1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-08-23 03:54:33 +03:00
Files
esp8266/cores
Gijs Noorlander 36c369bb8f Double I2C read in one transaction skips a clock pulse (#5528) (#6654)
* Double I2C read in one transaction skips a clock pulse (#5528)

See https://github.com/esp8266/Arduino/issues/5528  and the more elaborate [description](https://github.com/maarten-pennings/I2C-tool/blob/master/I2Ctest8266/README.md#how-to-fix)
where @maarten-pennings did all the hard work, but as far as I could see, no PR was made.

I also noticed some code duplication, which I moved to separate functions.

According to [this documentation on I2C clock stretching](https://www.i2c-bus.org/clock-stretching/) it is not allowed to have some slave keep the clock low during transmission of a byte, only after an ack.
So that's why it is not done in the while loop.
But I wondered if there should be an extra delay between the sequence of pulses and the extra added clock "valley". See my comment in the code.

Fixes #5528

* [I2C] Restore clock stretch functionality during transfer

As requested here: 8357a8c644 (r339310509)

* [I2C] Move duplicated clock stretch call to twi_scl_valley function
2019-10-26 20:59:19 -07:00
..