37.2.3.4.4 Bus Time-out

If there is no activity on the SCL line and the Target is not in its Idle state (in between transactions, BFREE = 0), then it is possible that either the Controller or the Target might have stalled during a transaction. As a preventive measure for the stalled Target device from hanging indefinitely, an internal Bus Time-out timer can be configured to notify the user of such an occurrence. This time is specified by the user using the I3CxBTO Bus Time-out Register. An internal counter incremented by the I3CxCLK clock is compared against the value in the I3CxBTO register to determine when a Bus Time-out occurs. This feature is disabled by default and must be enabled by setting the Bus Time-out Enable BTOEN bit.
When enabled, the Bus Time-out timer starts counting after a Start condition, resets at every SCL clock edge, and stops after a Stop condition. If the timer expires before it is reset by an SCL clock, then a Bus Time-out condition has occurred, and the Bus Time-out Error BTOIF flag is set. In addition, if either the Hot-Join or In-Band Interrupt has been requested (HJREQ = 1 or IBIREQ = 1) and the Controller has not responded with SCL clocks yet, then the corresponding error condition is also set (HJEIF = 1 or IBIEIF = 1) and the Hot-Join/In-Band Interrupt request is canceled.(1,2)

It is recommended to set the Bus Time-out value to at least 32 times the SCL period, however it is up to the user’s discretion to choose a value based on the application speed. For example, for FSCL = 12.5 MHz, 32 times of SCL period results in a Bus Time-out of 2.56 μs. For I3CxCLK = FOSC = 64 MHz, a 2.56 μs duration takes 164 counts. Hence, the user should set I3CxBTO = 164 during setup.

Important:
  1. The Hot-Join/In-Band Interrupt request will be canceled even if the Target is participating passively, meaning another device on the bus issued a Start condition while the IBIREQ or HJREQ was set in the Target and the Bus Idle/Available condition has not occurred yet.
  2. If the Controller has already acknowledged the Hot-Join/In-Band Interrupt request by sending SCL clocks, then a Bus Time-out will not generate the corresponding error condition.
  3. The Bus Time-out feature has been implemented in this Target module to enhance the user experience and is not a MIPI I3C® Specification. It should also not be confused with the SMBus Bus Time-out specification. In SMBus specification, a Bus Time-out occurs anytime the SCL is driven low for at least 25 ms, which is different from this implementation.
  4. The internal timer continues to count even after a Bus Time-out condition has occurred. If the user has cleared the BTOIF flag after it has been set once, it is possible that a second Bus Time-out may occur and BTOIF flag may be set again if the Controller has not sent additional SCL clocks. The user can choose to perform a Software Reset to reset the entire Target module, if desired.