I2C:如何使用i2cset写入16位寄存器地址



尝试使用i2cset将字节写入I2C设备(OV5640相机(上的16位地址。我可以使用以下顺序成功地从设备寄存器中读取(从设备地址0x3c和寄存器地址0x3030读取字节(:

i2cset -v -f 1 0x3c 0x30 0x30
i2cget -v -f 1 0x3c

要写入设备,我使用以下序列(将字节0x40写入设备地址0x3c和寄存器地址0x3030(:

i2cset -v -f 1 0x3c 0x30 0x30
i2cset -v -f 1 0x3c 0x40

此序列不显示任何错误,但当再次读取地址时,值不变。有人能提供任何关于在写入该设备时使用的正确i2cset语法的见解吗?

已解决!我找到了解决方案,它需要使用i2cset块写入选项(i(,如下所示:

i2cset -y -f 2 0x3c 0x30 0x30 0x40 i

此命令将值0x40写入设备地址0x3c处的寄存器地址0x3030。

i2ctransfer-y 2w5@0x3C[寄存器地址][字节3][字节2][字节1][字节0]

其中:w5是用于将5个字节写入I2C地址0x3C处的设备的命令;[寄存器地址]是要存储[字节3]的寄存器的8位地址;[bytex]是将写入连续寄存器的字节。(每次写入字节后,设备中的内部地址指针将自动递增!(您还可以通过将寄存器地址拆分为两个单独的字节来将四个字节发送到16位寄存器地址:首先是高字节,然后是低字节。还要增加5到6,因为SIX字节必须发送到I2C设备:前两个是16位寄存器地址,后面是四个数据字节。

最新更新