我正在尝试使用Raspberry Pi作为开发工具包,通过I2C总线配置SAA6752HS芯片(MPEG-2编码器)。直到我不得不在芯片的地址0xC2处写入,这是一块蛋糕。对于这个任务,我必须使用一个I2C命令,它需要一个189字节的有效载荷。于是,我偶然发现了I2C驱动程序中的32字节限制,由I2C_SMBUS_BLOCK_MAX在/usr/include/linux/i2c.h中定义。不可能强制不同的最大限制值。 I2C库中的所有内容都会结束到函数i2c_smbus_access中,并且任何具有多于32个字节的请求都会使ioctl返回-1。我不知道如何调试到目前为止。为什么I2C_SMBUS_BLOCK_MAX限制为32个字节?
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就是这样的例子)。
有没有办法克服这种限制,而不重写一个新的驱动程序?
预先感谢您。
I2C_SMBUS_BLOCK_MAX有此评论:'/ *作为SMBus的规定标准* /'你确定SAA6752HS讲SMBus和I2C不? SMBus和I2C在许多方面是兼容的,但它们不是一回事。 – nos 2014-09-22 20:54:21
是@nos,我在互联网上阅读了很多,但它离解决方案还很遥远。它只能确认问题。那么与SAA6752HS的交易是什么?和其他芯片有相同的问题?那么使用默认的I2C linux驱动程序无法与非SMBus标准I2C芯片进行通信?为什么I2C驱动仅限于SMBus? – 2014-09-22 20:56:50
@nos我相信SAA6752HS不是SMBus标准,但我无法弄清楚如何使用I2C Linux驱动程序处理非SMBus I2C接口。我该如何处理它? – 2014-09-22 20:59:28