在日常I2C设备驱动开发过程,经常要对设备进行一些简单寄存器读写,可以利用以下函数进行封装
I2C读
u8 addr_buf[2] = { (addr >> 8) & 0xFF, addr & 0xFF };
u8 data[2];
struct i2c_msg msgs[2] = {
{
.addr =client->addr, //从设备I2C地址
.flags = 0, //写标志位
.buf = addr_buf, //要写内容数组地址
.len = 2 //数组长度
},
{
.addr = client->addr,
.flags = I2C_M_RD,//读标志位
.len = 2, //读长度
.buf = data,//保存数据buffer
}
};
ret = i2c_transfer(client->adapter, msgs, 2);
if (ret != 2) {
return ERROR_IIC;
}
addr_buf的长度可以根据IC 数据手册获取的,可以是8bit 也可以16bit,读入的长度data,一般与I2C内部寄存器长度一致。
I2C写
u8 addr_buf[4] = { (addr >

本文介绍了在Linux内核中如何进行I2C设备的寄存器读写操作。针对I2C读,讲解了addr_buf的长度设定,并指出读取的数据长度通常与IC寄存器长度匹配。对于I2C写,说明了数据包括寄存器地址,地址可以是8bit或16bit,紧随其后的是要写入的数据。
订阅专栏 解锁全文
711

被折叠的 条评论
为什么被折叠?



