Hi,
I am using a 4-Channel SPDT Relay connected through I2C to a Single Board Computer (currently a STM32MP157C-DK2):
root@stm32mp1:~# i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- 11 -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
I can set / reset the 4 relays through i2c commands. For example, this command sets the 4 relays:
root@stm32mp1:~# i2cset -y 0 0x11 0x10 0xF
I can also change the I2C address:
root@stm32mp1:~# i2cset -y 0 0x11 0x11 0x12
root@stm32mp1:~# i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- 12 -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
root@stm32mp1:~# i2cset -y 0 0x11 0x11 0x11
But all read accesses to register addresses return 0x2:
root@stm32mp1:~# i2cdump -y 0 0x11
No size specified (using byte-data access)
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 ????????????????
10: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 ????????????????
20: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 ????????????????
30: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 ????????????????
40: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 ????????????????
50: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 ????????????????
60: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 ????????????????
70: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 ????????????????
80: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 ????????????????
90: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 ????????????????
a0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 ????????????????
b0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 ????????????????
c0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 ????????????????
d0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 ????????????????
e0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 ????????????????
f0: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 ????????????????
That includes the register address for the relays state (0x10), for the current I2C address (0x12) and for the firmware version (0x13):
root@stm32mp1:~# i2cget -y 0 0x11 0x10
0x02
root@stm32mp1:~# i2cget -y 0 0x11 0x12
0x02
root@stm32mp1:~# i2cget -y 0 0x11 0x13
0x02
Any idea why I got these values?
Cheers
–JM