I2C 工具、i2cdetect 和 i2cset 完美运行,但 i2cget returns 'read failed'

I2C tools, i2cdetect and i2cset works perfectly, but i2cget returns 'read failed'

我对 I2C 协议很陌生,但我设法写入了我的设备。我买了ADV7630评估板,是一个I2C控制的HDMI开关。

我可以使用 I2c 写入寄存器,i2cDetect 也可以显示所有设备。我也尝试读取寄存器内容,但无论我尝试读取什么,我总是得到 'Read failed'。 i2Cdump 也得到所有 'XX'.

我在某处看到的是连接不良,所以我仔细检查并焊接了连接器,但这没有帮助。

我的硬件是 Analog Device 的 ADV7630 评估板,Raspberry Pi 使用 raspbian 最新发行版。

如有任何线索,我们将不胜感激。

谢谢。

使用的命令:

i2cdetect -y 1

我只有 0x74 设备(根据 adv7630 数据表,这是正常的)

i2cset -y 1 0x58 0xff 0xff  # reset device
i2cset -y 1 0x58 0x0c 0x40  # disable chip powerdown
i2cset -y 1 0x58 0xea 0xc8  # set TXB main map address
i2cset -y 1 0x58 0xeb 0x80  # set TXB packet map address
i2cset -y 1 0x58 0xec 0x8e  # set TXB EDID map address
i2cset -y 1 0x58 0xed 0x8c  # set TXB Test map address
i2cset -y 1 0x58 0xee 0xb8  # set TXA main map address 
i2cset -y 1 0x58 0xef 0x70  # set TXA packet map address
i2cset -y 1 0x58 0xf0 0x7e  # set TXA EDID map address
i2cset -y 1 0x58 0xf1 0x7a  # set TXA test map address
i2cset -y 1 0x58 0xf9 0x64  # set repeater map address
i2cset -y 1 0x58 0xfa 0x6c  # set EDID map address
i2cset -y 1 0x58 0xfb 0x68  # set HDMI rx map address


i2cget -y 1 0x58 0xe1

错误:读取失败

i2cdetect -y 1

我检测到设备编号:(在本例中为:38,3d,3f,40,46,47,64,74)这是预期的。

我知道发生了什么事。实际上我的设备需要一些称为 i2c 重复启动条件的东西。由于这在 i2ctools 上默认未激活,因此它不适用于我的设备。

使用 Raspbian 和 i2ctools 激活 i2c 重复启动条件的方法是这样的:

/etc/modprobe.d/i2c.conf 创建一个文件 并将内容设置为:

options i2c_bcm2708 combined=1

而且效果很好!

感谢您的帮助!

参考文献:

https://ez.analog.com/message/77452

http://rabbit-note.com/2015/02/15/raspberry-pi-i2c-repeated-start/