Electronic – Changing I2C address

i2csensor

I need to connect two Si114x light sensors to one I2C bus. I don't have them physically yet. Every sensor has the same I2C address, so connecting them with the default settings would mean a conflict. However, the datasheet (http://www.silabs.com/Support%20Documents/TechnicalDocs/Si114x.pdf) mentions a BUSADDR command which modifies the address, and the default value of the modified register is 0x00 (not 0x5A which is given as a slave address, that's a bit weird).

My question is: does the sensor keep the address in a non-volatile memory? The datasheet doesn't say it explicitly. Can I just connect one sensor first as the only sensor to the bus, reprogram its address and then add the second sensor? Is it some kind of pattern in I2C devices? If not, the address modification command wouldn't make sense to me.

Best Answer

On page 54, the datasheet states:

I2C Address[7:0] Specifies a new I2C Address for the device to respond to. The new address takes effect when a BUSADDR command is received.

That pretty much means, that you first set this RAM value, then call the BUSADDR command.


Anyway, I think your only shot is to separate one of the sensors somehow. This could mean a transistor for holding the SCL line high while you program the other sensor's address. After the initialization, you can keep this transistor conducting.

schematic

simulate this circuit – Schematic created using CircuitLab

... I hope I didn't mess up the MOSFET's orientation ...

Of course, this requires a separate signal. And I don't think you can do without it.