Skip to main content
Explorer
May 15, 2024
Question

dynamic address broadcast not working for Nulceo-H563ZI

  • May 15, 2024
  • 1 reply
  • 802 views

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!

 

    This topic has been closed for replies.

    1 reply

    ST Employee
    July 30, 2024

    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