文章目录
最近在使用I2c尝试去发送一些数据,可是按照原来的接口,我们怎么都发送不了完整的数据,才发现内核对这个接口有限制
s32 i2c_smbus_write_i2c_block_data(const struct i2c_client *client, u8 command,
u8 length, const u8 *values)
{
union i2c_smbus_data data;
if (length > I2C_SMBUS_BLOCK_MAX)
length = I2C_SMBUS_BLOCK_MAX;
data.block[0] = length;
memcpy(data.block + 1, values, length);
return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
I2C_SMBUS_WRITE, command,
I2C_SMBUS_I2C_BLOCK_DATA, &data);
}
而这个 I2C_SMBUS_BLOCK_MAX 会在 i2c.h的头文件里面进行定义
#define I2C_SMBUS_BLOCK_MAX 32
也就是说这个接口最多只能传输32字节的数据,不能传输超过这个的大小。
同样的无法去强制修改这个大小。
所以大家使用这个函数的时候需要注意下这个问题。