Electronic – I2C General Call Confusion

i2c

I'm trying to understand how the I2C "General Call Address" is supposed to work for implementing in a microcontroller.

According to the I2C Specification (PDF), Section 3.1.13:

When bit B is a 'zero', the second byte has the following definition:

  • 0000 0110 (06h): Reset and write programmable part of slave address by hardware. On receiving this 2-byte sequence, all devices
    designed to respond to the general call address reset and take in the
    programmable part of their address. Precautions must be taken to
    ensure that a device is not pulling down the SDA or SCL line after
    applying the supply voltage, since these low levels would block the
    bus.

  • 0000 0100 (04h): Write programmable part of slave address by hardware. Behaves as above, but the device does not reset.

How is the "programmable" part of the slave address supposed to be set? Is there supposed to be a third byte in the general-call command?

Best Answer

The meaning of 'take in' the address is for the slave to read whatever address programming lines are present on them and re-establish the programmable part of their addresses from them.

As soon as 06h is received, the devices will soft-reset and take in their programmable address from their address lines. For 04h, they don't fully reset, but simply take in their programmable address from their address lines. There is no third byte.