VS-RK3288板卡 Android7.1 驱动实现i2c读写

  • RK3288
  • 44fa0e81e605471
  • LV3工程师
  • |      2018-09-06 10:18:33
  • 浏览量 957
  • 回复:0
VS-RK3288板卡 Android7.1 驱动实现i2c读写 在驱动里面实现自己的i2c读函数===read 方法一:(建议用该方法) static unsigned char my_i2c_read_reg(struct i2c_client *client, unsigned char reg) { unsigned char buf; i2c_master_send(client, ®, 1); // 发送寄存器地址 i2c_master_recv(client, &buf, 1); // 接收寄存器的值 return buf; } 参数: i2c_client:为此次与主机通信的从机。 reg:表示设备的寄存器的值。 方法二: static int my_i2c_read_reg(struct i2c_client *client, unsigned char reg, unsigned char *data) { int ret; struct i2c_msg msgs = { { .addr = client->addr, .flags = 0, .len = 1, .buf = ®, // 寄存器地址 }, { .addr = client->addr, .flags = I2C_M_RD, .len = 1, .buf = data, // 寄存器的值 }, }; ret = i2c_transfer(client->adapter, msgs, 2); // 这里 num = 2,通信成功 ret = 2 if (ret < 0) tp_err("%s error: %d\n", __func__, ret); return ret; } 在驱动里面实现自己的i2c写函数===write 对于写I2C寄存器,我们需要做的就是给 i2c_master_send 函数传入两个字节的数据即可。 i2c_master_send 的三个参数: client 为此次与主机通信的从机。 buf 为发送的数据指针, count 为发送数据的字节数。 static int my_i2c_write_reg( struct i2c_client* client,uint8_t reg,uint8_t data) { unsigned char buffer; buffer = reg; buffer = data; if( 2!= i2c_master_send(client,buffer,2) ) { printk( KERN_ERR " xxxx_i2c_write fail! \n" ); return -1; } return 0; }
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子