What are the possible problems for slave to not give ACK (pull down SDA line) after 8 bits of data? I can see 8bits (slave address) with osciloscope, but the ACK is high at 9th bit clock pulse, why?
-
\$\begingroup\$ Broken SDA connection? \$\endgroup\$– JimmyBCommented Jun 16, 2017 at 15:26
-
\$\begingroup\$ Mismatch in the I2C Frequency or the Voltage levels for the high and the Low. \$\endgroup\$– MaNyYaCkCommented Jun 16, 2017 at 17:02
-
\$\begingroup\$ A quick schematic please. What chips are being used? What voltages? Pull-up resistor values? Speed? Include scope/logic probe traces if available. \$\endgroup\$– Chris KnudsenCommented Jun 16, 2017 at 19:02
-
\$\begingroup\$ Investigating with a scope / logic probe is really a good idea. You can rule out many possible electrical problems this way. And posting the waveforms would be helpful so we could help you more. A schematic is also a great idea. \$\endgroup\$– nickagianCommented Jun 19, 2017 at 8:11
2 Answers
Interesting - I already listed the possible reasons in this comment in that similar question. However, since that comment actually answers the more-general question here, I will "promote it" to an answer.
The 3 general categories of problems which can cause that behaviour are:
Electrical problem on the bus, so the slave does not actually "see" that it is being addressed. Some examples are obvious (e.g. missing pull-up resistors). Others are more subtle (e.g. pull-up resistor values unsuitable for length of bus, missing voltage translation etc. etc.) and may need an oscilloscope to investigate.
Address problem e.g. you think you have configured the slave to use address X, but it is actually using address Y, so it correctly does not "Ack" address X (this is device-specific). Check the datasheet.
Slave is being correctly addressed, but is not in the correct state to "Ack" right now - this is device specific (e.g. there can be timing constraints etc. etc.). Check the datasheet.
Or, of course, the slave could simply be faulty, or the design has another hardware problem (e.g. missing or out-of-spec power supply voltage, missing decoupling, or other conditions specified in the device datasheet).
All of the "unresponsive I2C slave" situations which I have seen, fit into one of those categories.
If you are Blabec from that previous question it would be sensible to stick with one username and to reference previous questions when you ask a new one, to avoid people duplicating effort, as they might not see the previous related questions.
A common problem when there is no ACK is that the slave address was incorrectly placed in the outgoing byte.
The 7-bit address needs to be shifted left one bit and the R/W bit inserted at the LSB.
What device are you trying to communicate with? What is the slave address you are using?
-
\$\begingroup\$ ADV7511, slave address 0xE4 for transmit, and 0xe5 for receiving data \$\endgroup\$– PatrickCommented Jun 16, 2017 at 15:06
-
-
\$\begingroup\$ Can you post the waveform? \$\endgroup\$ Commented Jun 16, 2017 at 15:24