blob: 0369876783ad0ffd96c9bf6174ef14e9d66ee3dc [file] [log] [blame]
.. _emulators:
Zephyr's device emulators/simulators
####################################
Overview
========
Zephyr includes in its codebase a set of device emulators/simulators.
With this we refer to SW components which are built together with the embedded SW
and present themselves as devices of a given class to the rest of the system.
These device emulators/simulators can be built for any target which has sufficient RAM and flash,
even if some may have extra functionality which is only available in some targets.
.. note::
| Zephyr also includes and uses many other types of simulators/emulators, including CPU and
platform simulators, radio simulators, and several build targets which allow running the
embedded code in the development host.
| Some of Zephyr communication controllers/drivers include also either loopback modes or loopback
devices.
| This page does not cover any of these.
.. note::
Drivers which are specific to some platform, like for example the
:ref:`native_sim specific drivers <native_sim_peripherals>` which
emulate a peripheral class by connecting to host APIs are not covered by this page.
Available Emulators
===================
**ADC emulator**
* A fake driver which pretends to be actual ADC, and can be used for testing higher-level API
for ADC devices.
* Main Kconfig option: :kconfig:option:`CONFIG_ADC_EMUL`
* DT binding: :dtcompatible:`zephyr,adc-emul`
**DMA emulator**
* Emulated DMA controller
* Main Kconfig option: :kconfig:option:`CONFIG_DMA_EMUL`
* DT binding: :dtcompatible:`zephyr,dma-emul`
**EEPROM emulator**
* Emulate an EEPROM on a flash partition
* Main Kconfig option: :kconfig:option:`CONFIG_EEPROM_EMULATOR`
* DT binding: :dtcompatible:`zephyr,emu-eeprom`
.. _emul_eeprom_simu_brief:
**EEPROM simulator**
* Emulate an EEPROM on RAM
* Main Kconfig option: :kconfig:option:`CONFIG_EEPROM_SIMULATOR`
* DT binding: :dtcompatible:`zephyr,sim-eeprom`
* Note: For :ref:`native targets <native_sim>` it is also possible to keep the content
as a file on the host filesystem.
**External bus and bus connected peripheral emulators**
* :ref:`Documentation <bus_emul>`
* Allow emulating external buses like I2C or SPI and peripherals connected to them.
.. _emul_flash_simu_brief:
**Flash simulator**
* Emulate a flash on RAM
* Main Kconfig option: :kconfig:option:`CONFIG_FLASH_SIMULATOR`
* DT binding: :dtcompatible:`zephyr,sim-flash`
* Note: For native targets it is also possible to keep the content as a file on the host
filesystem. Check :ref:`the native_sim flash simulator section <nsim_per_flash_simu>`.
**GPIO emulator**
* Emulated GPIO controllers which can be driven from SW
* Main Kconfig option: :kconfig:option:`CONFIG_GPIO_EMUL`
* DT binding: :dtcompatible:`zephyr,gpio-emul`
**I2C emulator**
* Emulated I2C bus. See :ref:`bus emulators <bus_emul>`.
* Main Kconfig option: :kconfig:option:`CONFIG_I2C_EMUL`
* DT binding: :dtcompatible:`zephyr,i2c-emul-controller`
**RTC emulator**
* Emulated RTC peripheral. See :ref:`RTC emulated device section <rtc_api_emul_dev>`
* Main Kconfig option: :kconfig:option:`CONFIG_RTC_EMUL`
* DT binding: :dtcompatible:`zephyr,rtc-emul`
**SPI emulator**
* Emulated SPI bus. See :ref:`bus emulators <bus_emul>`.
* Main Kconfig option: :kconfig:option:`CONFIG_SPI_EMUL`
* DT binding: :dtcompatible:`zephyr,spi-emul-controller`
**UART emulator**
* Emulated UART bus. See :ref:`bus emulators <bus_emul>`.
* Main Kconfig option: :kconfig:option:`CONFIG_UART_EMUL`
* DT binding: :dtcompatible:`zephyr,uart-emul`