I3C HDR0 Operation

By smillerneosemcom , 23 September 2025

I am trying to communicate with ICM42670 via I3C DDR mode. The device is responding to HDR0 DDR Read commands. However, I do not know how to tell it what registers that I want to read. The HDR0 protocol has a command code and the Slave Address combined into a 16 bit DDR word. If I try different command codes as if the command code was a register address, then I receive back 8 words of 0xFFFD. Then I get one or two bytes of data in the ninth word. After the ninth word, it just keeps returning 0xFFFF for all later words. I will attach a logic analyzer trace of the start of this sequence. Below is pasted an example of the returned data. If I run the same pattern over and over again, it is consistent in that the ninth word is always the same value with the same header pattern. The datasheet appears to be lacking with respect I3C spec as it does not list anything about the HDR0 command codes or the packet sizes for those command codes.

Is there any app notes on this?
Is there any example code that I could reverse engineer?
Is there any update to the datasheet?

Thank you for your help.

ReadByte[0] = 0xff
ReadByte[1] = 0xfd
ReadByte[2] = 0xff
ReadByte[3] = 0xfd
ReadByte[4] = 0xff
ReadByte[5] = 0xfd
ReadByte[6] = 0xff
ReadByte[7] = 0xfd
ReadByte[8] = 0xff
ReadByte[9] = 0xfd
ReadByte[10] = 0xff
ReadByte[11] = 0xfd
ReadByte[12] = 0xff
ReadByte[13] = 0xfd
ReadByte[14] = 0xff
ReadByte[15] = 0xfd
ReadByte[16] = 0x31
ReadByte[17] = 0xff
ReadByte[18] = 0xff
ReadByte[19] = 0xff

smillerneosemcom

5 months 3 weeks ago

I slowed up the SCL clock to get a better capture. It does not appear that this part is following the HDR0 standard as it keeps issuing the preamble of 0x3 regardless of the number of data words that I read. I will attach a logic analyzer capture where is changes from sending data to sending 0xFFFF. Essentially the device appears to quit sending data without sending the preamble of 0x01 which would indicate the final CRC value. On an HDR read, to terminate early it appears that this 0x01 preamble and CRC are required.

Also, per the I3C spec, the command area for read data is "0xA0 – 0xFF: Reserved for Vendor Definition – 96 Commands" These commands are Vendor defined, but I see no where that TDK as defined them.

Thanks.

phpbb Post ID
53013
phpbb Topic ID
53009