cancel
Showing results for 
Search instead for 
Did you mean: 

About I3C ENTDAA ,How to do End DAA procedure waveform?

CLHUANG
Associate III

hi

I do the ENTDAA protocol use this code

if (HAL_I3C_Ctrl_DynAddrAssign_IT(&hi3c1, 0) != HAL_OK)

{

/* Error_Handler() function is called when error occurs. */

Error_Handler();

}

 

In below picture , I get the ENTDAA Protocol, but After protocol there should be repect start and do End DAA procedure waveform. It always keep  ,pull up high after a few seconds.(ref three pic.
CLHUANG_1-1690457730965.png

How can I do it?End DAA procedure waveform

CLHUANG_0-1690457717715.png

Below picture is all protocol , no End DAA procedure waveform

CLHUANG_2-1690457746444.png

 

 

 

 

 

1 ACCEPTED SOLUTION

Accepted Solutions

Hello @CLHUANG , 

You have this waveform because on the IKS01A3 shield you have 2 I3C sensors LSM6DSO and LPS22HH,
So you need to remove jumpers and use one (LSM6DSO for example :  JP2 ) to get the same waveform as the Application Note.

Please check the 9.3 Hardware and software settings section on the AN.

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.

View solution in original post

12 REPLIES 12
Foued_KH
ST Employee

Hello @CLHUANG 

I suggest you this code : 

 

     /* Assign dynamic address processus */
      do
      {
         status = HAL_I3C_Ctrl_DynAddrAssign(&hi3c1, &payload[1], I3C_RSTDAA_THEN_ENTDAA, 5000);
        if (status == HAL_BUSY)
        {
          HAL_I3C_Ctrl_SetDynAddr(&hi3c1, DynAddr);
        }
          TargetDesc1.TARGET_BCR_DCR_PID = (uint64_t) payload;  
      }while (status == HAL_BUSY);

 

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.

Dear Foued:

How to define payload?

 

/* Buffer that contain payload data, mean PID, BCR, DCR */
uint64_t TargetPayload[64];

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.

Dear Foued:

How do I define "DynAddr", which is generated automatically?

Foued_KH
ST Employee

Just you can set your own dynamic address : uint8_t Dynaddr = 0x32;

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.

Dear Foued

why  48-bit provisioned ID have two data?

CLHUANG_0-1690513548495.png

my code 

 

  uint64_t status;
  uint64_t TargetPayload[64];
   do
   {
		status = HAL_I3C_Ctrl_DynAddrAssign(&hi3c1, &TargetPayload[1], I3C_ONLY_ENTDAA, 5000);
		if (status == HAL_BUSY)
		{
			HAL_I3C_Ctrl_SetDynAddr(&hi3c1, 0x32);
		}
			TargetDesc1.TARGET_BCR_DCR_PID = (uint64_t) TargetPayload;


   }while (status == HAL_BUSY);

 

 

I want same as this sample one => https://www.st.com/resource/en/application_note/an5879-introduction-to-i3c-for-stm32h5-series-mcu-stmicroelectronics.pdf

CLHUANG_1-1690513731289.png

 

CLHUANG
Associate III

CLHUANG_0-1690525862079.png

I still can't make a protocol with a red circle

Hello @CLHUANG , 

You have this waveform because on the IKS01A3 shield you have 2 I3C sensors LSM6DSO and LPS22HH,
So you need to remove jumpers and use one (LSM6DSO for example :  JP2 ) to get the same waveform as the Application Note.

Please check the 9.3 Hardware and software settings section on the AN.

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.

Could you please provide a screenshot about your issue ?

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.