Linux I2C-Dev IOCTL-Call 产生错误消息

Linux I2C-Dev IOCTL-Call produces wrong message

我正在使用 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。 每次数据字节之间有一个新的开始条件,地址也会重复!

我是不是弄错了什么?

感谢您抽出宝贵时间并致以最诚挚的问候!

贝菲多

我发现错位了...

我的硬件是这样设置的:

Notebook -> DP/VGA -> I2C-Slave

我使用了一台只有 DisplayPort 输出的笔记本电脑,通过 DP-to-VGA 适配器将其转换并使用了连接简单从设备的 I2C 接口。

而且看起来 DP-to-VGA 适配器只能与对 I2C 总线的字节范围访问一起使用,所以我安装了一台 'new' 集成了 VGA 接口的笔记本电脑并使用了它直接...

这导致了完美对齐的传输,正如预期的那样。