Skip to content

Conversation

@gastmaier
Copy link

Tries to decode most I3C SDR and I2C legacy transfers.
As an observer, there is some "ambiguity", so the decoder will collect known i3c address to mark further transfers as i3c instead of i2c.

In particular, I am pretty sure a

Figure 249 I3C Private Write and Read Transfers without 7'h7E Address

will be detected as either an i2c or i3c ibi transfer.
even with looking forward, I think there is no reliable way of differentiate an IBI from a Read Transfers without 7'h7E Address.
Making this initial version public since resolves the most common pain-point of decoding i3c:
the transition and parity-bit that differ in logic from usual i2c ack/nack.
So, even though not perfect, maybe useful for most use cases.

Based on the i2c decoder.

aux:
https://github.com/gastmaier/sigrok-test/tree/decoder-i3c
https://github.com/gastmaier/sigrok-dumps/tree/decoder-i3c

Support decoding I2C legacy, I3C Standard Data Rate (SDR) and I3C
In-Band interrupt (IBI) transfers. For IBI, does support Mandatory Data
Byte (MDB) and extra bytes. Does not support decoding Common Command
Code (CCC), MDB values. An IBI and I2C read transfer are ambiguous,
therefore, collect addresses from I3C SDR transfers to differentiate
subsequent IBI from I2C read.
Detect CCCs, and if is a CCC ENTDAA, follow state machine flow that
extracts the PID, BCR, DCR and assigned DA.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant