Hello,
I bought two EVK-MIMXRT685 cards, connected their I3C lines and tried to run the provided I3C example: evkmimxrt685_i3c_polling_b2b_transfer_master on one card and evkmimxrt685_i3c_polling_b2b_transfer_master on the other. Unfortunately the example is stuck in the I2C phase.
On the connected LA, I can see that the master is sending a buffer to the slave, which is received by the slave properly.
Then after ~ 100ms the master sends start with the write address and 0x01. Both of them are ACKed by EVK. Then master sends a restart with the read address that is not accepted by the slave. As the result, the slave does not send the received buffer back to the masher and all the process stuck. What's wrong?
Thanks,
Slava
I have more details on this issue. I2C Reading works fine. The master requests data, an interrupt occurs on the slave that fills the FIFO, and the slave device returns this data.
When I change masterXfer.busType from kI3C_TypeI2C to kI3C_TypeI3CSdr, I expect everything to work the same but via I3C. But this is not happening. I can see that the master is sending a read request, I see an interrupt on the slave that fills the FIFO, but the slave does not ACK this read transaction and does not send any data. The Completion Status is 0x00001EEC. What is missing?
By the way, I3C write works fine in both I2C and I3C modes.
Hi,
But the example has two part. First it use I2C mode to submit and receive. Then it switch to I3CSdr mode to W/R data again. I tested on my board. It works fine.
BTW, please switch to UART debug console before debugging.
Regards,
Jing
Hi Jing,
Thanks for your response.
What do you mean by "switch to UART debug console before debugging"? Will it work in default mode too? When I take the master and slave examples and run them on two cards in parallel, the I2C write passes, but the I2C read does not receive ASK and fails.
I modified the scripts and left only I3C. In this scenario (the slave still works with the static address), the I3C write works, but the I3C read does not receive an ACK and fails. If I add lines to switch to dynamic address, both I3C read and write work as expected. What am I doing wrong?
Thanks,
Slava
Hi,
I tested the I3C again. If the dynamic address is used, the I3C works fine. If don't use, I3C can't work. Come back to the RM, in page 638 in RM reversion 1.2, it says "The I3C slave, if assigned an I2C static address, will act like a normal I2C device when the I3C slave first comes up. If the I3C slave is placed on an I2C bus with an I2C master, then the I3C slave will simply stay in I2C mode and operate normally."
At this time, I3C slave can't receive I3C signal. As you know, I3C wave format is different with I2C format.
Regards,
Jing
Thank you very much for explanation, Jing!
I did not see that in I3C spec, that an I3C device cannot work in I3C mode until it receives dynamic address. I thought that only IBI would not work. Moreover, if I remember correctly, in this mode (without dynamic address) the slave was able to receive I3C transaction, but but could not answer on I3C write one.
Regards,
Slava
Hi,
You can use SETDASA command (master assigns a Dynamic address to a Slave with a known Static Address). With this command Slave can work in I3C mode.
Regards,
Jing