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 接口的笔记本电脑并使用了它直接...
这导致了完美对齐的传输,正如预期的那样。
我正在使用 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 接口的笔记本电脑并使用了它直接...
这导致了完美对齐的传输,正如预期的那样。