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:
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.
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.