Page 1 of 1

Distinguish between I2C Stop and Repeated Start

Posted: Sun Aug 04, 2024 2:15 am
by bejikebeem
Hi, I'm trying to write an I2C Slave on the ESP32-S3, but the Reference Manual offers almost no info on how Repeated STARTs are handled in the hardware. So I'd appreciate some help with these:
  • The manual says that I2C_TRANS_COMPLETE_INT is "Triggered when the Master or Slave detects a STOP bit". But the Arduino ESP32 port https://github.com/espressif/arduino-es ... ave.c#L715 suggests this interrupt may also be generated for Repeated STARTs. Which is it? Or are both true?
  • Is I2C_TRANS_START_INT generated for Repeated START? Or only for "true" START?
  • More generally, how is a Master / Slave expected to detect the STOP event alone? And how are they expected to detect a Repeated START?
[It is useful to know when a Repeated START occurs because then the Slave knows it may need to use the context of the bytes transferred so far, to decide what it needs to send next, if needed.

It is useful to know when a STOP occurs because it signals the true end of a transaction, so a bus participant may decide to clear cached data, forward information to consumers, etc.]

Re: Distinguish between I2C Stop and Repeated Start

Posted: Wed Aug 21, 2024 11:11 pm
by bejikebeem
Can anyone from Espressif help here?