0
\$\begingroup\$

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?

\$\endgroup\$
  • \$\begingroup\$ Broken SDA connection? \$\endgroup\$ – JimmyB Jun 16 '17 at 15:26
  • \$\begingroup\$ Mismatch in the I2C Frequency or the Voltage levels for the high and the Low. \$\endgroup\$ – MaNyYaCk Jun 16 '17 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 Knudsen Jun 16 '17 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\$ – nickagian Jun 19 '17 at 8:11
1
\$\begingroup\$

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?

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ ADV7511, slave address 0xE4 for transmit, and 0xe5 for receiving data \$\endgroup\$ – Patrick Jun 16 '17 at 15:06
  • \$\begingroup\$ That seems correct. \$\endgroup\$ – Kevin White Jun 16 '17 at 15:23
  • \$\begingroup\$ Can you post the waveform? \$\endgroup\$ – Kevin White Jun 16 '17 at 15:24
1
\$\begingroup\$

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.

| improve this answer | |
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.