…
|
||
---|---|---|
.. | ||
boards | ||
common | ||
src | ||
CMakeLists.txt | ||
Kconfig | ||
README.txt | ||
prj.conf | ||
testcase.yaml |
README.txt
I2C Target API test ################## .. note: See :ref:`coding_guideline_inclusive_language` for information about plans to change the terminology used in this API. This test verifies I2C target driver implementations using two I2C controllers on a common bus. The test is supported by a test-specific driver that simulates an EEPROM with an I2C bus target interface. Data is pre-loaded into the simulated devices outside the I2C API, and the Zephyr application issues commands to one controller that are responded to by the simulated EEPROM connected through the other controller. This test was originally designed for I2C controllers that support both controller and target behavior simultaneously. This is not true of all I2C controllers, so this behavior is now opt-in using CONFIG_APP_DUAL_ROLE_I2C. However, the devicetree still must provide a second EEPROM just to identify the bus. In slightly more detail the test has these phases: * Use API specific to the simulated EEPROM to pre-populate the simulated devices with device-specific content. * Register a simulated EEPROM as a I2C target device on a bus. If CONFIG_APP_DUAL_ROLE_I2C is selected, register both. * Issue commands on one bus controller (operating as the bus controller) and verify that the data supplied by the other controller (target) match the expected values given the content known to be present on the simulated device. If CONFIG_APP_DUAL_ROLE_I2C is selected, do this with the roles reversed. Transfer of commands from one bus controller to the other is accomplished by hardware through having the SCL (and SDA) signals shorted to join the two buses. Presence of this required hardware configuration is identified by the `i2c_bus_short` fixture. If the buses are not connected as required, or the controller driver has bugs, the test will fail one or more I2C transactions.