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

2 Answers 2

2
\$\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.

\$\endgroup\$
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?

\$\endgroup\$
3
  • \$\begingroup\$ ADV7511, slave address 0xE4 for transmit, and 0xe5 for receiving data \$\endgroup\$
    – Patrick
    Commented Jun 16, 2017 at 15:06
  • \$\begingroup\$ That seems correct. \$\endgroup\$ Commented Jun 16, 2017 at 15:23
  • \$\begingroup\$ Can you post the waveform? \$\endgroup\$ Commented Jun 16, 2017 at 15:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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