I just started learning about serial communication protocols. So I understand there are only two lines connecting a master and many slaves

enter image description here

  1. Master broadcasts the start condition then the slave address with R/W
  2. The slaves compare this address with their inbuilt ones and the addressed slave makes the SDA low.


How does the master recognise which slave made the SDA low? Is the ACK bit just there to confirm that such a slave exists, doesn't the MASTER know which slave sent the ACK?


The master does not know which slave pulled the SDA low to send the ACK. It just means that at least some chip responds to the address sent. In reality there could be accidentally or intentionally many slaves at the same address so they all would pull the SDA low to send an ACK bit.

However the assumption is that each chip has one (or multiple) unique address so if you send an address, only one chip will pull SDA low for ACK.

If no chip pulls low, then that means nothing on the bus responds to that address, i.e. a chip might be missing, faulty, disconnected from bus, or have just been configured to wrong address.

  • \$\begingroup\$ Is there an official resource for learning these standards like I2C, UART etc.? \$\endgroup\$ – Shashank V M Feb 1 at 8:15
  • 1
    \$\begingroup\$ Yes, I2C specification does exist. UART specification does not exist, as even before the first UART chip was made 50 years ago, asynchronous serial comms were a thing already in the age of electromechanical computing. Best to read the UART section of whatever MCU you are using. \$\endgroup\$ – Justme Feb 1 at 8:26
  • 2
    \$\begingroup\$ @ShashankVM The I2C specification was created by Philips, which is now NXP. You should be able to get the specification from their site. \$\endgroup\$ – Elliot Alderson Feb 1 at 12:44

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.