<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: How to implement nonblocking API GetStatus in MCX Microcontrollers</title>
    <link>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2322129#M4891</link>
    <description>&lt;P&gt;Hello &lt;a href="https://community.nxp.com/t5/user/viewprofilepage/user-id/256544"&gt;@Bruce_Teng&lt;/a&gt;,&lt;BR /&gt;According to the I3C standard, the bus must remain in the Idle state for at least 1 µs before an IBI can be issued. To ensure this timing requirement is met, the device uses the CLK_SLOW . When an IBI request is pending, the internal counter driven by CLK_SLOW must complete one or more counts before the bus is considered fully idle and the IBI can be generated. As shown the following image obtained from the RM (MCXN236):&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image.png" style="width: 999px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/377707iEAC840F94022520B/image-size/large?v=v2&amp;amp;px=999" role="button" title="image.png" alt="image.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;Also, in order to support you better, could you provide me the next information?&lt;BR /&gt;- Could you please clarify me if you have received any previous support of this specific part MCXN556? &lt;BR /&gt;- I am getting troubles to see the image that you shared in your previous post, could you share me it with higher resolution?&lt;BR /&gt;- Could you provide me the steps that you made to replicate this behavior?&lt;/P&gt;
&lt;P&gt;BR&lt;BR /&gt;Habib&lt;/P&gt;</description>
    <pubDate>Tue, 24 Feb 2026 22:10:15 GMT</pubDate>
    <dc:creator>Habib_MS</dc:creator>
    <dc:date>2026-02-24T22:10:15Z</dc:date>
    <item>
      <title>How to implement nonblocking API GetStatus</title>
      <link>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2317848#M4850</link>
      <description>&lt;P&gt;&lt;SPAN&gt; Hi&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;everyone,&lt;/SPAN&gt; &lt;SPAN&gt;From our experiments, we observed that&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=""&gt;&lt;SPAN&gt;MSTATUS&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;remains stuck in the&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=""&gt;&lt;SPAN&gt;SLVREQ&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;state, causing the MCU to treat the I3C bus&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;as busy.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Bruce_Teng_1-1770985476588.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/376799i95076DCF9CA01AA8/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Bruce_Teng_1-1770985476588.png" alt="Bruce_Teng_1-1770985476588.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;We found that&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;in&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;certain scenarios, calling the blocking&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=""&gt;&lt;SPAN&gt;GetStatus&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;API triggers this issue. We believe the root cause is mixing blocking and non‑blocking APIs, which leads to incorrect IBI handling. We’d like to implement a non‑blocking&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=""&gt;&lt;SPAN&gt;GetStatus&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;to address this. Could you help with the implementation?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;MCU: mcxn556 and mcxn236&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 13 Feb 2026 12:34:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2317848#M4850</guid>
      <dc:creator>Bruce_Teng</dc:creator>
      <dc:date>2026-02-13T12:34:55Z</dc:date>
    </item>
    <item>
      <title>Re: How to implement nonblocking API GetStatus</title>
      <link>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2319167#M4865</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.nxp.com/t5/user/viewprofilepage/user-id/256544"&gt;@Bruce_Teng&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks for your post, and apologies for the delayed reply.&lt;/P&gt;
&lt;P&gt;Could you please share more details about what you’re testing (test steps, expected vs. observed behavior, and any logs or traces)?&lt;/P&gt;
&lt;P&gt;I’m assuming the MCU is configured as Master, since you’re checking MSTATUS rather than SSTATUS. If that’s not the case, please let me know.&lt;/P&gt;
&lt;P&gt;From the reference manual, the interface behavior in this condition is described as follows:&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="carlos_o_0-1771349361781.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/377079i0F8E48FA0A63F44A/image-size/medium?v=v2&amp;amp;px=400" role="button" title="carlos_o_0-1771349361781.png" alt="carlos_o_0-1771349361781.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You might try enabling auto‑emit IBI so the bus does not remain in that state.&lt;/P&gt;
&lt;P&gt;A few clarifications to help us reproduce your setup:&lt;/P&gt;
&lt;P&gt;Which GetStatus API are you referring to (full function name and module/driver)?&lt;/P&gt;
&lt;P&gt;SDK version you are using (exact version string).&lt;/P&gt;
&lt;P&gt;Role and configuration: Master vs. Slave, and any relevant register settings (e.g., FIFO thresholds, interrupt masks).&lt;/P&gt;
&lt;P&gt;Hardware: MCU/board part number and any external components on the bus.&lt;/P&gt;
&lt;P&gt;Timing: Bus frequency, IBI configuration, and whether clock stretching or retries are enabled.&lt;/P&gt;
&lt;P&gt;Minimal code snippet that shows how you configure and call the API.&lt;/P&gt;</description>
      <pubDate>Tue, 17 Feb 2026 17:40:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2319167#M4865</guid>
      <dc:creator>carlos_o</dc:creator>
      <dc:date>2026-02-17T17:40:54Z</dc:date>
    </item>
    <item>
      <title>Re: How to implement nonblocking API GetStatus</title>
      <link>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2320719#M4874</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.nxp.com/t5/user/viewprofilepage/user-id/241501"&gt;@carlos_o&lt;/a&gt;&amp;nbsp;,&lt;BR /&gt;The following codes are implementation of Blocking API GetStatus&lt;/P&gt;&lt;LI-CODE lang="cpp"&gt; get_status(uint8_t address, uint16_t&amp;amp; status)
{
    constexpr uint8_t     BoradcastAddress = 0x7EU;
    constexpr uint8_t     CccGetStatus     = 0x90U;
    constexpr uint16_t    WordMask         = 0xFFFF;
    I3cBuffer             buffer{};
    i3c_master_transfer_t xfer{};
    xfer.slaveAddress   = BoradcastAddress;
    xfer.subaddress     = CccGetStatus;
    xfer.subaddressSize = 1U;
    xfer.direction      = kI3C_Write;
    xfer.busType        = kI3C_TypeI3CSdr;
    xfer.flags          = kI3C_TransferNoStopFlag;
    xfer.ibiResponse    = kI3C_IbiRespAckMandatory;
    auto result         = I3C_MasterTransferBlocking(_i3c_m_handle.base, &amp;amp;xfer);
    if (result != kStatus_Success) {
        I3C_MasterEmitRequest(_i3c_m_handle.base, kI3C_RequestForceExit);
        const logger::EventData data = {
            CccGetStatus,
            static_cast&amp;lt;uint8_t&amp;gt;(result &amp;gt;&amp;gt; 0 &amp;amp; 0xFF),
            static_cast&amp;lt;uint8_t&amp;gt;(result &amp;gt;&amp;gt; 8 &amp;amp; 0xFF),
            static_cast&amp;lt;uint8_t&amp;gt;(result &amp;gt;&amp;gt; 16 &amp;amp; 0xFF),
            static_cast&amp;lt;uint8_t&amp;gt;(result &amp;gt;&amp;gt; 24 &amp;amp; 0xFF),
        };
        logger::info(logger::Event::I3CCccError, data);
        auto driver_status = to_driver_status(static_cast&amp;lt;uint32_t&amp;gt;(result));
        if (driver_status != Status::Success) {
            const auto&amp;amp; task = *static_cast&amp;lt;nv::i3c::Task*&amp;gt;(_task);
            task.record_error(static_cast&amp;lt;uint8_t&amp;gt;(driver_status));
        }
        return false;
    }
    memset(&amp;amp;xfer, 0, sizeof(xfer));
    xfer.slaveAddress = address;
    xfer.data         = buffer.data();
    xfer.dataSize     = 2;
    xfer.direction    = kI3C_Read;
    xfer.busType      = kI3C_TypeI3CSdr;
    xfer.flags        = kI3C_TransferDefaultFlag;
    xfer.ibiResponse  = kI3C_IbiRespAckMandatory;
    result            = I3C_MasterTransferBlocking(_i3c_m_handle.base, &amp;amp;xfer);
    if (result != kStatus_Success) {
        I3C_MasterStop(_i3c_m_handle.base);
        const logger::EventData data = {
            CccGetStatus,
            static_cast&amp;lt;uint8_t&amp;gt;(result &amp;gt;&amp;gt; 0 &amp;amp; 0xFF),
            static_cast&amp;lt;uint8_t&amp;gt;(result &amp;gt;&amp;gt; 8 &amp;amp; 0xFF),
            static_cast&amp;lt;uint8_t&amp;gt;(result &amp;gt;&amp;gt; 16 &amp;amp; 0xFF),
            static_cast&amp;lt;uint8_t&amp;gt;(result &amp;gt;&amp;gt; 24 &amp;amp; 0xFF),
        };
        logger::info(logger::Event::I3CCccError, data);
        auto driver_status = to_driver_status(static_cast&amp;lt;uint32_t&amp;gt;(result));
        if (driver_status != Status::Success) {
            const auto&amp;amp; task = *static_cast&amp;lt;nv::i3c::Task*&amp;gt;(_task);
            task.record_error(static_cast&amp;lt;uint8_t&amp;gt;(driver_status));
        }
        return false;
    }
    status = (buffer[0] &amp;lt;&amp;lt; 8 | buffer[1]) &amp;amp; WordMask;
    return true;
}&lt;/LI-CODE&gt;&lt;P&gt;SDK version:&amp;nbsp; SDK_25_09_00_MCXN556S&lt;BR /&gt;Role and configuration:&lt;/P&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Master Mode&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;- The I3C controller is configured as a master device.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;The I3C master configuration is set up as follows:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;i3c_master_config_t&lt;/SPAN&gt;&lt;SPAN&gt; _master_config;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;// Configuration settings:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;_master_config&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;baudRate_Hz&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;i2cBaud&lt;/SPAN&gt;&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt; &lt;SPAN&gt;freq&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;i2c&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// I2C baud rate (typically 400 kHz)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;_master_config&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;baudRate_Hz&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;i3cPushPullBaud&lt;/SPAN&gt;&lt;SPAN&gt; &amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt; &lt;SPAN&gt;freq&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;i3c_pp&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;// I3C push-pull baud rate (typically 12.5 MHz)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;_master_config&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;baudRate_Hz&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;i3cOpenDrainBaud&lt;/SPAN&gt;&lt;SPAN&gt; &amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt; &lt;SPAN&gt;freq&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;i2c_od&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;// I3C open-drain baud rate (typically 2.5 MHz)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;_master_config&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;enableOpenDrainStop&lt;/SPAN&gt;&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt; &lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;_master_config&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;disableTimeout&lt;/SPAN&gt;&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt; &lt;SPAN&gt;true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Timeout disabled&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;_master_config&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;enableOpenDrainHigh&lt;/SPAN&gt;&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt; is_gpu &lt;/SPAN&gt;&lt;SPAN&gt;?&lt;/SPAN&gt; &lt;SPAN&gt;true&lt;/SPAN&gt; &lt;SPAN&gt;:&lt;/SPAN&gt; &lt;SPAN&gt;false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;SPAN&gt; &amp;nbsp;// GPU-specific: 50:50 duty cycle&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;_master_config&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;hKeep&lt;/SPAN&gt;&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt; kI3C_MasterHighKeeperNone;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;```&lt;/SPAN&gt;&lt;/DIV&gt;&lt;SPAN&gt;Transfer Mode:**&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;SmartDMA and EDMA (Enhanced DMA) based transfers&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;DMA Configuration&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;-&lt;/SPAN&gt; &lt;SPAN&gt;**TX DMA Channel:**&lt;/SPAN&gt;&lt;SPAN&gt; Channel 0 (DMA0 for I3C0, DMA1 for I3C1)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;-&lt;/SPAN&gt; &lt;SPAN&gt;**RX DMA Channel:**&lt;/SPAN&gt;&lt;SPAN&gt; Channel 1 (DMA0 for I3C0, DMA1 for I3C1)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;-&lt;/SPAN&gt; &lt;SPAN&gt;**DMA Mux:**&lt;/SPAN&gt;&lt;SPAN&gt; Configured for I3C TX/RX requests&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Hardware&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;MCU/Board Part Numb&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;MCXN556&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;(MCXN556SCDF variant)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;The code supports two I3C ports:&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;-&lt;/SPAN&gt; &lt;SPAN&gt;**I3C0:**&lt;/SPAN&gt;&lt;SPAN&gt; Base address &lt;/SPAN&gt;&lt;SPAN&gt;`I3C0`&lt;/SPAN&gt;&lt;SPAN&gt;, uses &lt;/SPAN&gt;&lt;SPAN&gt;`DMA0`&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;-&lt;/SPAN&gt; &lt;SPAN&gt;**I3C1:**&lt;/SPAN&gt;&lt;SPAN&gt; Base address &lt;/SPAN&gt;&lt;SPAN&gt;`I3C1`&lt;/SPAN&gt;&lt;SPAN&gt;, uses &lt;/SPAN&gt;&lt;SPAN&gt;&lt;SPAN&gt;`DMA1`&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;The I3C bus is used to communicate with GPU devices&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Bus Frequency&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;-&lt;/SPAN&gt; &lt;SPAN&gt;**Master Clock:**&lt;/SPAN&gt;&lt;SPAN&gt; 25 MHz (&lt;/SPAN&gt;&lt;SPAN&gt;`Clock = 25000000UL`&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;-&lt;/SPAN&gt; &lt;SPAN&gt;**I3C Push-Pull Baud Rate:**&lt;/SPAN&gt;&lt;SPAN&gt; 12.5 MHz (typical)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;-&lt;/SPAN&gt; &lt;SPAN&gt;**I3C Open-Drain Baud Rate:**&lt;/SPAN&gt;&lt;SPAN&gt; 2.5 MHz (typical)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;-&lt;/SPAN&gt; &lt;SPAN&gt;**I2C Baud Rate:**&lt;/SPAN&gt;&lt;SPAN&gt; 400 kHz (typical)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;### Clock Stretching and Retries&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;-&lt;/SPAN&gt; &lt;SPAN&gt;**Timeout:**&lt;/SPAN&gt;&lt;SPAN&gt; Disabled (&lt;/SPAN&gt;&lt;SPAN&gt;`disableTimeout = true`&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;-&lt;/SPAN&gt; &lt;SPAN&gt;**Retry Mechanism:**&lt;/SPAN&gt;&lt;SPAN&gt; Implemented in software with 5 retry attempts for failed transfers&lt;/SPAN&gt;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;LI-CODE lang="cpp"&gt;Nack occurred when MCU read/write data to the slave.
MCU send GetStatus command to GPU to recover it.

    for (uint8_t i = 0; i &amp;lt; recover_retry; i++) {
        bool success = get_status(address, value);
        if (success &amp;amp;&amp;amp; value == 0) {
            return true;
        }
        task-&amp;gt;delay(10ms);
    }​&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 20 Feb 2026 14:35:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2320719#M4874</guid>
      <dc:creator>Bruce_Teng</dc:creator>
      <dc:date>2026-02-20T14:35:54Z</dc:date>
    </item>
    <item>
      <title>Re: How to implement nonblocking API GetStatus</title>
      <link>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2320778#M4875</link>
      <description>&lt;LI-CODE lang="markup"&gt;bool i3c_write(uint8_t address, uint8_t* data, size_t length) {
    i3c_master_transfer_t xfer = {};
    xfer.slaveAddress  = address;
    xfer.data         = data;
    xfer.dataSize     = length;
    xfer.direction    = kI3C_Write;
    xfer.busType      = kI3C_TypeI3CSdr;
    xfer.flags        = kI3C_TransferDefaultFlag;
    xfer.ibiResponse  = kI3C_IbiRespAckMandatory;
    
    status_t status = I3C_MasterTransferEDMA(I3C0, &amp;amp;i3c_handle, &amp;amp;xfer);
    return (status == kStatus_Success);
}
```

### Read Operation

```cpp
bool i3c_read(uint8_t address, uint8_t* data, size_t length) {
    i3c_master_transfer_t xfer = {};
    xfer.slaveAddress  = address;
    xfer.data          = data;
    xfer.dataSize      = length;
    xfer.direction     = kI3C_Read;
    xfer.busType       = kI3C_TypeI3CSdr;
    xfer.flags         = kI3C_TransferDefaultFlag;
    xfer.ibiResponse   = kI3C_IbiRespAckMandatory;
    
    status_t status = I3C_MasterTransferEDMA(I3C0, &amp;amp;i3c_handle, &amp;amp;xfer);
    return (status == kStatus_Success);
}&lt;/LI-CODE&gt;&lt;P&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;If we&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;use this blocki&lt;/SPAN&gt;&lt;SPAN&gt;ng API&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=""&gt;&lt;SPAN&gt;get_sta&lt;/SPAN&gt;&lt;SPAN&gt;tus&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;to implement&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;the recovery f&lt;/SPAN&gt;&lt;SPAN&gt;or the private read/write NACK&lt;/SPAN&gt;&lt;SPAN&gt;, it seem&lt;/SPAN&gt;&lt;SPAN&gt;s that it causes t&lt;/SPAN&gt;&lt;SPAN&gt;he MCU to en&lt;/SPAN&gt;&lt;SPAN&gt;ter an error&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;state(as I mentioned).&lt;BR /&gt;We r&lt;/SPAN&gt;&lt;SPAN&gt;everted the recovery method and&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;stress tested&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;this version&lt;/SPAN&gt;&lt;SPAN&gt;; it would n&lt;/SPAN&gt;&lt;SPAN&gt;ever happen&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;again.&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 20 Feb 2026 16:52:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2320778#M4875</guid>
      <dc:creator>Bruce_Teng</dc:creator>
      <dc:date>2026-02-20T16:52:23Z</dc:date>
    </item>
    <item>
      <title>Re: How to implement nonblocking API GetStatus</title>
      <link>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2321635#M4884</link>
      <description>&lt;P&gt;Hi,&lt;BR /&gt;I have another problem.&lt;BR /&gt;if&amp;nbsp;f slave pulls SDA line low immediately after the STOP condition as picture.&lt;BR /&gt;It seems like&amp;nbsp;MCXN556/236 I3C IP can't detect the SDA failing edge, so it will not toggle SCL line to generate a START.&amp;nbsp;&lt;BR /&gt;Does it match your expectation?&lt;BR /&gt;If yes, does it due to slave violate the Bus available condition?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/377609iB5EF6378DC065515/image-size/medium?v=v2&amp;amp;px=400" role="button" title="image.png" alt="image.png" /&gt;&lt;/span&gt; &lt;/P&gt;&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 24 Feb 2026 03:29:31 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2321635#M4884</guid>
      <dc:creator>Bruce_Teng</dc:creator>
      <dc:date>2026-02-24T03:29:31Z</dc:date>
    </item>
    <item>
      <title>Re: How to implement nonblocking API GetStatus</title>
      <link>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2322129#M4891</link>
      <description>&lt;P&gt;Hello &lt;a href="https://community.nxp.com/t5/user/viewprofilepage/user-id/256544"&gt;@Bruce_Teng&lt;/a&gt;,&lt;BR /&gt;According to the I3C standard, the bus must remain in the Idle state for at least 1 µs before an IBI can be issued. To ensure this timing requirement is met, the device uses the CLK_SLOW . When an IBI request is pending, the internal counter driven by CLK_SLOW must complete one or more counts before the bus is considered fully idle and the IBI can be generated. As shown the following image obtained from the RM (MCXN236):&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image.png" style="width: 999px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/377707iEAC840F94022520B/image-size/large?v=v2&amp;amp;px=999" role="button" title="image.png" alt="image.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;Also, in order to support you better, could you provide me the next information?&lt;BR /&gt;- Could you please clarify me if you have received any previous support of this specific part MCXN556? &lt;BR /&gt;- I am getting troubles to see the image that you shared in your previous post, could you share me it with higher resolution?&lt;BR /&gt;- Could you provide me the steps that you made to replicate this behavior?&lt;/P&gt;
&lt;P&gt;BR&lt;BR /&gt;Habib&lt;/P&gt;</description>
      <pubDate>Tue, 24 Feb 2026 22:10:15 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2322129#M4891</guid>
      <dc:creator>Habib_MS</dc:creator>
      <dc:date>2026-02-24T22:10:15Z</dc:date>
    </item>
    <item>
      <title>Re: How to implement nonblocking API GetStatus</title>
      <link>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2322280#M4892</link>
      <description>&lt;DIV class=""&gt;&amp;nbsp;&lt;/DIV&gt;&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.nxp.com/t5/user/viewprofilepage/user-id/231807"&gt;@Habib_MS&lt;/a&gt;&amp;nbsp;&lt;BR /&gt;No, I haven't received any&amp;nbsp;&lt;SPAN&gt;support&amp;nbsp;of&amp;nbsp;this specific part MCXN556&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2026-02-25 131322.png" style="width: 999px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/377733i10FFE69C282BD5EA/image-size/large?v=v2&amp;amp;px=999" role="button" title="Screenshot 2026-02-25 131322.png" alt="Screenshot 2026-02-25 131322.png" /&gt;&lt;/span&gt;&lt;BR /&gt;Background:&lt;BR /&gt;In our system, MCU play a role of bridge between USB and downstream device (GPUs)&lt;BR /&gt;So, MCU charges of forwarding data from USB to GPU or GPU to USB.&lt;BR /&gt;Once GPU need to pass data to USB, GPU will arise IBI request, then MCU service it and read data from GPU, then forward it to USB.&lt;/P&gt;&lt;P&gt;Experiment:&lt;BR /&gt;Send GetStatus command before every transaction (read/write).&lt;BR /&gt;I get GPU information or update GPU firmware to trigger read/write&amp;nbsp;transaction.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;Note: I3C IP of GPU is not NXP product&lt;/P&gt;</description>
      <pubDate>Wed, 25 Feb 2026 05:49:38 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2322280#M4892</guid>
      <dc:creator>Bruce_Teng</dc:creator>
      <dc:date>2026-02-25T05:49:38Z</dc:date>
    </item>
    <item>
      <title>Re: How to implement nonblocking API GetStatus</title>
      <link>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2322310#M4893</link>
      <description>&lt;P&gt;In our system, MCU is I3C master and GPU is I3C slave.&lt;BR /&gt;So, it seems that we couldn't modify register setting to decide GPU how to d&lt;SPAN&gt;etect the bus available&amp;nbsp;condition.&lt;/SPAN&gt;&amp;nbsp;right?&lt;BR /&gt;If yes, should we focus on GPU behavior?&lt;/P&gt;</description>
      <pubDate>Wed, 25 Feb 2026 06:39:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2322310#M4893</guid>
      <dc:creator>Bruce_Teng</dc:creator>
      <dc:date>2026-02-25T06:39:07Z</dc:date>
    </item>
    <item>
      <title>Re: How to implement nonblocking API GetStatus</title>
      <link>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2322691#M4896</link>
      <description>&lt;P&gt;Hello&amp;nbsp;&lt;a href="https://community.nxp.com/t5/user/viewprofilepage/user-id/256544"&gt;@Bruce_Teng&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;Thank you for your response. Based on your comments, the slave (CPU) does not meet the I3C requirement to keep the bus in the IDLE state for at least 1 µs before issuing an IBI request. Is my understanding correct? If so, this could explain why the master (MCU) is unable to process the IBI.&lt;BR /&gt;&lt;BR /&gt;On the other hand, the AN14434 describes exactly the type of behavior expected for the MCU in your application. I highly recommend reviewing this document to ensure the MCU is working correctly.&lt;BR /&gt;&lt;BR /&gt;Please let me know if you have any further questions.&lt;/P&gt;
&lt;P&gt;BR&lt;BR /&gt;Habib&lt;/P&gt;</description>
      <pubDate>Wed, 25 Feb 2026 20:06:36 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MCX-Microcontrollers/How-to-implement-nonblocking-API-GetStatus/m-p/2322691#M4896</guid>
      <dc:creator>Habib_MS</dc:creator>
      <dc:date>2026-02-25T20:06:36Z</dc:date>
    </item>
  </channel>
</rss>

