MIMXRT685 I3C interrupt master example

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

MIMXRT685 I3C interrupt master example

1,527 Views
AlicePXLin
Contributor II

你好,

請問 I3C interrupt master example中這段 code 是Read , 我錄起來的波型是Write是正確的嗎?

請問這段code 的工作內容是master 從 slave read data 嗎?

 為甚麼waveform 看起來像 master一直在傳送data 給slave?

謝謝I3C interrupt master example.png

      masterXfer.slaveAddress = 0x30U;
      masterXfer.data         = g_master_rxBuff;
      masterXfer.dataSize     = I3C_DATA_LENGTH - 1U; 
      masterXfer.direction    = kI3C_Read;
      masterXfer.busType      = kI3C_TypeI3CSdr;
      masterXfer.flags        = kI3C_TransferDefaultFlag;
      masterXfer.ibiResponse  = kI3C_IbiRespAckMandatory;
      result                  = I3C_MasterTransferNonBlocking(EXAMPLE_MASTER, &g_i3c_m_handle, &masterXfer);
      if (kStatus_Success != result)
      {
          return result;
      }

      timeout = 0U;
      /* Wait for transfer completed. */
      while ((!g_ibiWonFlag) && (!g_masterCompletionFlag) && (g_completionStatus == kStatus_Success) &&
             (++timeout < I3C_TIME_OUT_INDEX))
      {
          __NOP();
      }

      result = g_completionStatus;
      if ((result != kStatus_Success) || (timeout == I3C_TIME_OUT_INDEX))
      {
          return -1;
      }
      g_masterCompletionFlag = false;

 

Labels (1)
0 Kudos
9 Replies

1,522 Views
kerryzhou
NXP TechSupport
NXP TechSupport

Hi @AlicePXLin ,

   Maybe you didn't see the correct area in the wave, this is my previous wave:

write:

kerryzhou_0-1648546949414.png

 

 

read:

kerryzhou_1-1648546956800.png

 

Wish it helps you!

Best Regards,

Kerry

 

1,515 Views
AlicePXLin
Contributor II

@kerryzhou 

感謝你的幫忙!

請問 evkmimxrt685_i3c_interrupt_b2b_transfer_slave 中的Read 與 evkmimxrt685_i3c_polling_b2b_transfer_slave 中的Read

波型會有差異嗎?

我該如何知道是否為IBI?

謝謝!

0 Kudos

1,505 Views
kerryzhou
NXP TechSupport
NXP TechSupport

Hi @AlicePXLin ,

   IBI 的数据应该是符合下面流程图:

kerryzhou_0-1648633547087.png

我记得MIMXRT685-AUDIO-EVK, 这个会接一个外部sensor,然后是IBI的,之前我测过,但是忘记波形放哪里了。和这个单纯传数据不一样。

关于interrupt和polling,应该波形一样,你可以测试看看。上面我给的波形是polling的。暂时手上没有工具,在家办公,没法测,你可以测试看看。多跑几遍,看上去你的逻辑分析仪好像不太能抓全波形。

IBI的应该可以看到mandatory byte。

比如如下代码:

主机:

i3c_register_ibi_addr_t ibiRecord = {.address = {0x30U}, .ibiHasPayload = true};
I3C_MasterRegisterIBI(EXAMPLE_MASTER, &ibiRecord);
I3C_MasterTransferCreateHandle(EXAMPLE_MASTER, &g_i3c_m_handle, &masterCallback, NULL);
result = kStatus_Success;

while (1)
{
if (g_ibiWonFlag)
{
PRINTF("\r\nReceived slave IBI request.");
for (uint8_t count = 0; count < g_ibiUserBuffUsed; count++)
{
PRINTF(" Data %x.", g_ibiUserBuff[count]);
}
g_ibiWonFlag = false;
g_pollIbiEvent = false;
}

if (g_pollIbiEvent)
{
do
{
i3c_poll_slaveIBI(EXAMPLE_MASTER, &g_i3c_m_handle);
} while(result != kStatus_Success);
}
}

 

从机:

PRINTF("\r\n I3C master I3C SDR transfer finished .\r\n");

uint8_t ibiData = 0x55U;
I3C_SlaveRequestIBIWithData(EXAMPLE_SLAVE, &g_i3c_s_handle, &ibiData, 1);
PRINTF("\r\n I3C slave request IBI event with one mandatory byte %x.\r\n", ibiData);

 

Best Regards,

Kerry

 

 

0 Kudos

1,495 Views
AlicePXLin
Contributor II

@kerryzhou 

感謝你的回覆!

請問下面這行code在SDK 2.11.1有嗎?

i3c_poll_slaveIBI(EXAMPLE_MASTER, &g_i3c_m_handle);

我沒有看到此function

請問可以提供此function 的code嗎 ?

 

謝謝!

0 Kudos

1,474 Views
kerryzhou
NXP TechSupport
NXP TechSupport

Hi @AlicePXLin ,

    那个并非是SDK发布的代码,所以我不能分享出来。

不过对于IBI, 你可以参考现在SDK发布的代码:

SDK_2_11_1_MIMXRT685-AUD-EVK\boards\mimxrt685audevk\driver_examples\i3c\master_read_sensor_icm42688p

https://mcuxpresso.nxp.com/en/builder?hw=MIMXRT685-AUD-EVK

你可以看看,这个是IBI接sensor的,MIMXRT685-AUD-EVK带一个I3C的sensor。

 

Best Regards,

kerry

0 Kudos

1,433 Views
AlicePXLin
Contributor II

@kerryzhou 

感謝!

想請問

i3c_register_ibi_addr_t ibiRecord = {.address = {0x30U}, .ibiHasPayload = true};
I3C_MasterRegisterIBI(EXAMPLE_MASTER, &ibiRecord);
I3C_MasterTransferCreateHandle(EXAMPLE_MASTER, &g_i3c_m_handle, &masterCallback, NULL)

這段 code 是在設定哪些東西呢?

謝謝

0 Kudos

1,430 Views
kerryzhou
NXP TechSupport
NXP TechSupport

Hi @AlicePXLin 

  IBI, 你下载这个代码吧:

SDK_2_11_1_MIMXRT685-AUD-EVK\boards\mimxrt685audevk\driver_examples\i3c\master_read_sensor_icm42688p

 之前的代码片段不能给你完整版代码,因为还是内部没发布的。

你看已经发布的IBI代码会比较好!

Best Regards,

Kerry

Tags (1)
0 Kudos

1,425 Views
AlicePXLin
Contributor II

@kerryzhou 

你好

你提到的範例我已下載

裡面也有一樣的function(如下)

I3C_MasterTransferCreateHandle(EXAMPLE_MASTER, &g_i3c_m_handle, &masterCallback, NULL);

i3c_register_ibi_addr_t ibiRecord = {.address = {SENSOR_ADDR}, .ibiHasPayload = true};
I3C_MasterRegisterIBI(EXAMPLE_MASTER, &ibiRecord);

不過不太了解此設定的作用

謝謝!

0 Kudos

1,419 Views
kerryzhou
NXP TechSupport
NXP TechSupport

Hi @AlicePXLin 

/*! @brief Structure with setting master IBI rules and slave registry. */
typedef struct _i3c_register_ibi_addr
{
uint8_t address[5]; /*!< Address array for registry. */
bool ibiHasPayload; /*!< Whether the address array has mandatory IBI byte. */
} i3c_register_ibi_addr_t;

这个是注册IBI功能。

如果你看看I3C 协议手册, IBI的传输情况,是要用到mandatory IBI 字节的,就相当于主机注册之后,如果从机发起IBI波形,主机这边就能够识别。

如果能够有这个配套板子测试抓个波形就更好理解了。

我之前抓过,但是找不到波形了,暂时手里也没板子抓给你看。

所以你那边如果有icm42688,可以接上去测试试。

 

Best Regards,

Kerry

0 Kudos