-
Notifications
You must be signed in to change notification settings - Fork 7.3k
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
Comments
related to #680 |
Alvin1Zhang
changed the title
I2C master reset routine doesn't work
[TW#26603] I2C master reset routine doesn't work
Sep 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
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.
The text was updated successfully, but these errors were encountered: