blob: d3eb1da971118f624a7893147604c7c2b1b78bee [file] [log] [blame]
.. _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());