Two LPC55S36 boards were connected for I3C communication, with one configured as the I3C Master and the other as the I3C Slave. Initially, the I3C Slave was not initialized. After the Master performed bus initialization (ENTDAA), the Slave was then initialized and issued a Hot-Join event. However, at this point, the SDA line is permanently pulled low, causing the communication to stop functioning.
Test steps:
(1) Reset slave board
(2) Reset master board
(3) Click SW3 on slave board
Hi @bell_huang
Would it be possible to make minimal modifications based on the i3c SDK example to verify the this functionality?
BR
Harry
I simplified the example by removing unused variables and functions.
Test steps:
(1) Reset slave board & master board
(2) Click SW3 on slave board
The Hot-Join sequence is:
Slave sends a Hot-Join Request → Master accepts it → Master performs ENTDAA → Slave obtains a dynamic address.
In the fsl_component_i3c_adapter API, there is no Hot-Join callback on the Master side, so there is no way to know when the Master has received the Hot-Join Request and completed ENTDAA. That said, this is a next-step concern; the current issue is that the process stalls at the Hot-Join Request, with the SDA line being permanently held low.
Hi @bell_huang
Your demo is including the i3c Bus. I think it's not simple enough for me, So i did an simple demo based on the i3c interrupt demo to verify Hot join feature.
Slave.
Master
We can check that there is Hot-Join callback on the Master side.
BR
Harry
Hi @Harry_Zhang ,
Thank you for the hint; I also modified my demo to use the fsl_i3c APIs.
After switching the Master to the fsl_i3c APIs, it can indeed receive the Hot-Join event. However, the issue is that the SDA line is being permanently held low, so the I3C bus cannot be used afterward.
Today I investigated and found that SDA is being pulled low by the Slave. I verified this in two ways:
1. Disconnect the Slave from the SDA line.
or
2. Press the RESET button on the Slave board.
In both cases, SDA can be observed to recover from low to the normal high state.
In addition, within the Slave driver, it can be observed that kI3C_SlaveRequestSentEvent is not received.
Hi @bell_huang
You can add
I3C_MasterEmitIBIResponse(EXAMPLE_MASTER, kI3C_IbiRespAck);
in master call back function.
And then the SDA will push high.
And the Slave driver will receive kI3C_SlaveRequestSentEvent.
But i found the the master can not ProcessDAA.
I need further investigation.
BR
Harry
" 1. Disconnect the Slave from the SDA line." mentioned in my previous post.
Hi @bell_huang
Thanks for your information, i have reproduced this issue, we need to investigate this issue.
I will inform you as soon as there is a result.
BR
Harry