我正在嘗試使用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