我正在使用Linux下的I2C设备,并尝试使用如下Link所述的设备界面。
因此,如果我们假设以下代码:
char outbuf[SIZE] = { 'e', 'b' };
struct i2c_rdwr_ioctl_data msgset;
struct i2c_msg msg[1];
msg[0].addr = 0x53; // access address 0x53
msg[0].flags = 0; // 0 means write
msg[0].len = SIZE; // size is already set to two
msg[0].buf = outbuf
msgset.msgs = msg;
msgset.nmsgs = 1;
ioctl( file, I2C_RDWR, &msgset ); // fille is already assigned, etc.
我们会写一条包含两个字节的消息来寻址0x53!? 或者我们可以说,
S Addr Wr [A] Data [A] Data [A] P
就像完成here一样。
但是当我看到我的范围时,我会得到这样的结论:
或更详细的文字:
但这不是我们想要的,而不是规范所说的, 而且我们得到了
S Addr Wr [A] Data P S Addr Wr [A] Data P
有人知道这种行为还是可以向我描述一下? 我尝试了所有类型的调用IOCTL,SMBUS,write_block_data。 每次数据字节之间都有一个新的启动条件,地址也会重复!
我出错了吗?
感谢您的时间和最好的问候!
Befedo
答案 0 :(得分:0)
我发现了错位...
我的硬件设置如下:
Notebook -> DP/VGA -> I2C-Slave
我使用的笔记本只有一个DisplayPort输出,通过DP-to-VGA适配器转换它,并使用了I2C接口,其中连接了一个简单的Slave。
看起来DP-to-VGA适配器只能用于Bytewide-Access到I2C-Bus,因此我设置了一台“新”笔记本电脑,它集成了VGA接口并直接使用它......
这导致完全一致的转移,就像预期的那样。