Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TW#26603] I2C master reset routine doesn't work #2494

Closed
jeremyherbert opened this issue Sep 30, 2018 · 2 comments
Closed

[TW#26603] I2C master reset routine doesn't work #2494

jeremyherbert opened this issue Sep 30, 2018 · 2 comments

Comments

@jeremyherbert
Copy link
Contributor

Hi,

I have an I2C device which was causing a bus lockup (it contained some undocumented behaviour). However, this caused me to discover that the I2C master reset routine is incorrect. Please see #2493 for an explanation and details of the problem.

@jeremyherbert
Copy link
Contributor Author

related to #680

@Alvin1Zhang Alvin1Zhang changed the title I2C master reset routine doesn't work [TW#26603] I2C master reset routine doesn't work Sep 30, 2018
@negativekelvin
Copy link
Contributor

@igrr igrr closed this as completed in 924daf7 Nov 30, 2018
igrr pushed a commit that referenced this issue Jan 24, 2019
… SDA

closes #2494
closes #2493
closes #2496

1. Change bus reset to handle interrupted READ sequences.
2. Slow down I2C to 100khz during reset
3. If a SLAVE device was in a read operation when the bus was interrupted, the SLAVE device is controlling SDA.The only bit during the 9 clock cycles of a byte READ the MASTER(ESP32) is guaranteed control over, is during the ACK bit period.
If the SLAVE is sending a stream of ZERO bytes, it will only release SDA during the ACK bit period. The master(ESP32) cannot generate a STOP unless SDA is HIGH. So, this reset code synchronizes the bit stream with, Either, the ACK bit, Or a 1 bit.
igrr pushed a commit that referenced this issue Jan 29, 2019
… SDA

closes #2494
closes #2493
closes #2496

1. Change bus reset to handle interrupted READ sequences.
2. Slow down I2C to 100khz during reset
3. If a SLAVE device was in a read operation when the bus was interrupted, the SLAVE device is controlling SDA.The only bit during the 9 clock cycles of a byte READ the MASTER(ESP32) is guaranteed control over, is during the ACK bit period.
If the SLAVE is sending a stream of ZERO bytes, it will only release SDA during the ACK bit period. The master(ESP32) cannot generate a STOP unless SDA is HIGH. So, this reset code synchronizes the bit stream with, Either, the ACK bit, Or a 1 bit.
catalinio pushed a commit to catalinio/pycom-esp-idf that referenced this issue Jun 28, 2019
… SDA

closes espressif/esp-idf#2494
closes espressif/esp-idf#2493
closes espressif/esp-idf#2496

1. Change bus reset to handle interrupted READ sequences.
2. Slow down I2C to 100khz during reset
3. If a SLAVE device was in a read operation when the bus was interrupted, the SLAVE device is controlling SDA.The only bit during the 9 clock cycles of a byte READ the MASTER(ESP32) is guaranteed control over, is during the ACK bit period.
If the SLAVE is sending a stream of ZERO bytes, it will only release SDA during the ACK bit period. The master(ESP32) cannot generate a STOP unless SDA is HIGH. So, this reset code synchronizes the bit stream with, Either, the ACK bit, Or a 1 bit.
catalinio pushed a commit to catalinio/pycom-esp-idf that referenced this issue Jun 28, 2019
… SDA

closes espressif/esp-idf#2494
closes espressif/esp-idf#2493
closes espressif/esp-idf#2496

1. Change bus reset to handle interrupted READ sequences.
2. Slow down I2C to 100khz during reset
3. If a SLAVE device was in a read operation when the bus was interrupted, the SLAVE device is controlling SDA.The only bit during the 9 clock cycles of a byte READ the MASTER(ESP32) is guaranteed control over, is during the ACK bit period.
If the SLAVE is sending a stream of ZERO bytes, it will only release SDA during the ACK bit period. The master(ESP32) cannot generate a STOP unless SDA is HIGH. So, this reset code synchronizes the bit stream with, Either, the ACK bit, Or a 1 bit.
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

No branches or pull requests

2 participants