I2C Examples (Blocking API) =========================== Overview ~~~~~~~~ The blocking I2C examples are available for both C and C++: - C: ``examples/blocking_api/i2c/c/`` - C++: ``examples/blocking_api/i2c/cpp/`` These examples are intended for **Supernova** and **Pulsar** USB host adapters. Hardware Setup ~~~~~~~~~~~~~~ Required hardware: 1. One Binho **Supernova** or **Pulsar** 2. One I2C target device with 7-bit address ``0x50`` (EEPROM-like/register-based target) What The I2C Examples Do ~~~~~~~~~~~~~~~~~~~~~~~~ The C and C++ examples implement the same workflow: 1. Connect to the device. 2. Read adapter information. 3. Configure I2C bus voltage to ``3300 mV``. 4. Initialize I2C controller on ``I2C_BUS_A`` at ``200 kHz`` with ``I2C_PULLUP_330Ohm``. 5. Re-apply I2C parameters and pull-up resistor configuration. 6. Perform a non-stop write/read transfer to target ``0x50`` and verify readback. 7. Perform a standard write/read transfer to target ``0x50`` and verify readback. 8. Scan the I2C bus and print discovered 7-bit and 10-bit addresses. Transfer Notes ~~~~~~~~~~~~~~ - The examples exercise both transfer styles: - Non-stop transfer (`repeated start` style). - Standard transfer (normal stop behavior). - Readback verification is done after each write/read stage. - The target subaddress used in both examples is ``{0x01, 0x00}``. Build and Run (I2C C/C++) ~~~~~~~~~~~~~~~~~~~~~~~~~ I2C example directories build binaries with the following names: - C (``examples/blocking_api/i2c/c/``): - ``example_c_dynamic`` - ``example_c_static`` - C++ (``examples/blocking_api/i2c/cpp/``): - ``example_cpp_dynamic`` - ``example_cpp_static`` See: - C API I2C reference: :doc:`../../api/c/i2c` - C++ blocking I2C reference: :doc:`../../api/cpp_blocking/i2c`