| 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. |