我正在尝试使用RaspBerry Pi作为开发工具包,通过I2C总线configurationSAA6752HS芯片(MPEG-2编码器)。 直到我不得不在芯片的地址0xC2处写入,这是小菜一碟。 对于这个任务,我必须使用一个I2C命令,它需要一个189字节的有效负载。 于是我偶然发现了在I2C驱动中的一个32字节的限制,这个限制在/usr/include/linux/i2c.h中由I2C_SMBUS_BLOCK_MAX定义。 不可能强制不同的最大限制值。 I2C lib中的所有内容都会结束到函数i2c_smbus_access中,任何超过32个字节的请求都会使ioctl返回-1。 我不知道如何debugging到目前为止。
static inline __s32 i2c_smbus_access(int file,char read_write,__u8 command,int size,union i2c_smbus_data *data) { struct i2c_smbus_ioctl_data args; args.read_write = read_write; args.command = command; args.size = size; args.data = data; return ioctl(file,I2C_SMBUS,&args); }
我不明白为什么有这样的限制,考虑到有设备需要超过32个字节的有效载荷数据才能工作(SAA6752HS就是这样一个例子)。
有没有办法克服这种限制,而不重写一个新的驱动程序?
先谢谢你。
如何访问我的英特尔芯片组的特定registry?
更改PID / VID后,VCOM驱动程序无法工作
没有得到DbgPrintEx打印在主机上运行的Windowsdebugging器(Windows 10)
限制对进程的pipe道访问权限(Windows)
已签名的INF驱动程序在签名的计算机上工作,而不是其他人
运行需要“安全消息”的命令行(cmd)
我怎样才能在内核模式(Windows)的IOCTL调用
在Windows中开始使用MongoDB C ++驱动程序
使用Nvidiagraphics卡安装AMD OpenCL cpu驱动程序
以下是Linux i2c界面的文档: https : //www.kernel.org/doc/Documentation/i2c/dev-interface
在最简单的级别上,您可以使用ioctl(I2C_SLAVE)设置从机地址和write系统调用来写入命令。 就像是:
i2c_write(int file,int address,int subaddress,char *data) { char buf[size + 1]; // note: variable length array ioctl(file,I2C_SLAVE,address); // real code would need to check for an error buf[0] = subaddress; // need to send everything in one call to write memcpy(buf + 1,data,size); // so copy subaddress and data to a buffer write(file,buf,size + 1); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。