.. _module-pw_i2c_mcuxpresso: ================= pw_i2c_mcuxpresso ================= .. pigweed-module:: :name: pw_i2c_mcuxpresso ``pw_i2c_mcuxpresso`` implements the ``pw_i2c`` interface using the NXP MCUXpresso SDK. The implementation is based on the i2c driver in SDK. I2C transfers use non-blocking driver API. ``I3cMcuxpressoInitiator`` implements the ``pw_i2c`` initiator interface using the MCUXpresso I3C driver. It exposes a few I3C specific API's for setting up the bus, allowing normal I2C API's to work after setup. ----- Setup ----- This module requires following setup: 1. Use ``pw_build_mcuxpresso`` to create a ``pw_source_set`` for an MCUXpresso SDK. 2. Include the i2c driver component in this SDK definition. 3. Specify the ``pw_third_party_mcuxpresso_SDK`` GN global variable to specify the name of this source set. 4. Use ``pw::i2c::McuxpressoInitiator`` implementation of ``pw::i2c::Initiator`` while creating ``pw::i2c::Device`` or ``pw::i2c::RegisterDevice`` interface to access the I2C devices connected to target. ----- Usage ----- .. code-block:: cpp constexpr uint32_t kI2CBaudRate = 100000; constexpr McuxpressoInitiator::Config kConfig = { .flexcomm_address = I2C11_BASE, .clock_name = kCLOCK_Flexcomm11Clk, .baud_rate_bps = kI2CBaudRate, }; McuxpressoInitiator initiator{kConfig}; initiator.Enable(); ``I3cMcuxpressoInitiator`` example usage. .. code-block:: cpp constexpr I3cMcuxpressoInitiator::Config kI3c0Config = { .base_address = I3C0_BASE, .i2c_baud_rate = kI3cI2cBaudRate, .i3c_open_drain_baud_rate = kI3cOpenDrainBaudRate, .i3c_push_pull_baud_rate = kI3cPushPullBaudRate, .enable_open_drain_stop = false, // NXP default .enable_open_drain_high = true, // necessary to allow bus to operate in // mixed mode }; I3cMcuxpressoInitiator i3c_0_initiator{kI3c0Config}; const std::array dynamic_address_list = {kDynamicAddress}; PW_TRY(i3c_initiator.SetDynamicAddressList(dynamic_address_list)); PW_TRY(i3c_initiator.Initialize());