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:
- 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.
- 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.
- 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.
- 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.