cancel
Showing results for 
Search instead for 
Did you mean: 

STM32 H5 I3C 0x7E start byte in I2C waveform

Ren1
Associate

Hello,

I am trying to use the I3C interface between STM32H563ZI in MB1404 board and NXP's temperature sensor P3T1085UK.

 

I have found a question would like to be answered:

 

Is there any way to send the IBI header (7'h7E) with SCL signal configured in I2C timing characteristics?

According to MIPI I3C Basic specification v1.1.1, page 33, table 3, note 3, It is expecting an I3C / I2C capable target having a switchable 50ns spick filter and the swtich is triggered by the IBI header (7'h7E).

spike_filter.png

I have selected the "Bus Characteristics" as "Mixed I3C and I2C" and "I2C Duty Cycle" to be 50% in stm32cubeIDE's "Pinout & Configuration -> Connectivity -> I3C1", It generates the code with "hi3c1.Init.CtrlBusCharacteristic.SCLI2CHighDuration = 0x7c;", which seens fine. But when I run the function "HAL_I3C_Ctrl_DynAddrAssign", I found the waveform is different, the SCL high duration is actually controlled by the parameter "SCLI3CHighDuration", shown below.

IBI_header.png

the SCL pulse is around 50ns and It is not responed by the temperature sensor P3T1085UK, the sensor does responed to the waveform when I change the parameter "SCLI3CHighDuration" to larger one, which is beyond 50ns. I believe the SCL signal is filtered out by the filter in defualt I2c configuration after power up, and I need to swiich it off by sending the IBI header with I2C timing, altought P3T1085UK document states it only have a 20ns filter.

And I have not found any good alternative way to generate a start + IBI header in I2c timing to tigger it, other than toggling the SCL pin like the traditional soft I2C.

 

Thanks for checking this post.

1 ACCEPTED SOLUTION

Accepted Solutions
Ren1
Associate

A quick solution to disable the I3C and I2C compatible device 's 50ns spike filter is send  7'h7E header with any CCC that cause nothing at slow rate, the spike filter would be turned off and the full speed I3C is enabled after that.

 

one example could be :

 

hi3c1.Init.CtrlBusCharacteristic.SCLI3CHighDuration = 0x7c; //slow rate for first header

HAL_I3C_Init(&hi3c1);

HAL_I3C_Ctrl_DynAddrAssign(&hi3c1, ptarget_payload, I3C_ONLY_ENTDAA, 1000);

hi3c1.Init.CtrlBusCharacteristic.SCLI3CHighDuration = 0x09; //previous fast rate

HAL_I3C_Init(&hi3c1);

View solution in original post

1 REPLY 1
Ren1
Associate

A quick solution to disable the I3C and I2C compatible device 's 50ns spike filter is send  7'h7E header with any CCC that cause nothing at slow rate, the spike filter would be turned off and the full speed I3C is enabled after that.

 

one example could be :

 

hi3c1.Init.CtrlBusCharacteristic.SCLI3CHighDuration = 0x7c; //slow rate for first header

HAL_I3C_Init(&hi3c1);

HAL_I3C_Ctrl_DynAddrAssign(&hi3c1, ptarget_payload, I3C_ONLY_ENTDAA, 1000);

hi3c1.Init.CtrlBusCharacteristic.SCLI3CHighDuration = 0x09; //previous fast rate

HAL_I3C_Init(&hi3c1);