i2c读写8bit跟16bit

2019-07-13 02:32发布

写一个16位寄存器8位数据的操作:
static int hm5065_i2c_txdata(u16 saddr,u8 *txdata,int length) {        struct i2c_msg msg[] = {        {               .addr  = saddr,       //设备地址               .flags = 0,           //写的标志位               .len = length,        //长度是3               .buf = txdata,        //前2个buff,是寄存器的地址,后一个buff是要写的data        },        };        if (i2c_transfer(hm5065_client->adapter, msg, 1) < 0)      //这里的数据时按msgs的长度定的               return -EIO;        else               return 0; } 读一个16位寄存器8位数据的操作: static int hm5065_i2c_rxdata(unsigned short saddr,                               unsigned char *rxdata,                               int length) {        struct i2c_msg msgs[] = {        {               .addr   = saddr,     //设备地址               .flags = 0,          //写的标志位               .len   = 2,          //应为地址是16位的,所以要写2次               .buf   = rxdata,     //2个buff,2个8位的,高8位,低8位是一个完整的寄存器地址        },        {               .addr   = saddr,               .flags = I2C_M_RD,   //读的标志位               .len   = length,     //1个长度               .buf   = rxdata,     //返回一个8位的data        },        };
       if (i2c_transfer(hm5065_client->adapter, msgs, 2) < 0) {      //这里的数据时按msgs的长度定的               CDBG("hm5065_i2c_rxdata failed! ");               return -EIO;        }        return 0; }