2024-05-15 08:42 AM
I just downloaded the "I3C_Controller_WakeUpFromStop" project for the Nucleo-H563ZI board using the example project import option. It compiled with no issues. Ran it with debugger and protocol analyzer on the I3C bus. When the subroutine "Handle_ENTDAA_Controller()" is called/executed, the protocol analyzer shows "START | Address 7F | Rnw(1) | |NACK" and not "0x7E" for broadcast. The project/code locks up at line 172 = " while(ubFrameComplete == 0U); /*Wait end of Dynamic Address Assignment procedure */ " Also, the subroutine Handle_ENTDAA_Controller() shows "ptrTXFunc = &I3C_DynamicAddressTreatment;" and this function is never invoked for some reason.
1) What am I doing wrong?
2) why is there no RSTDAA (Restart DAA) sent first? Everything I have read said if there is already a dynamic address it cannot be reassigned until it has been cleared or reset.
3) My other project, "I3C_Controller_Private_Command_IT" and several others all have the same issue. Why? What is the simplest project/code example code that performs a broadcast that I can use?
4) My other project, "I3C_Controller_Private_Command_IT" when downloaded did not compile. I had to add some missing files to get it to compile (e.g. stm32h5xx_util_i3c.h). It also has the same broadcast 0x7F issue described above, however instead of looping it goes to the Error_Handler() subroutine and I do not know why?
5) What does 0x7F mean? The spec says it should not be used.
Any input on these matters is much appreciated!
2024-07-30 02:02 AM
Hello @JRM_02 ,
Use I3C_RSTDAA_THEN_ENTDAA instead of I3C_ONLY_ENTDAA as a parameter if you want RSTDAA then ENTDAA.
/* Assign dynamic address processus */
if (HAL_I3C_Ctrl_DynAddrAssign_IT(&hi3c1, I3C_RSTDAA_THEN_ENTDAA ) != HAL_OK)
{
/* Error_Handler() function is called when error occurs. */
Error_Handler();
}
Are you using STM32 MCU as a target ?
Foued
To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.