"); //-->
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[2];
buffer[0] = reg;
buffer[1] = data;
if( 2!= i2c_master_send(client,buffer,2) ) {
printk( KERN_ERR " xxxx_i2c_write fail! \n" );
return -1;
}
return 0;
}
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
[分享]我的一点感想!
555红外打靶游戏控制电路图
ADI在线研讨会:利用 ECG AFE 简化病人监护仪设计
ADI在线研讨会:解决工业自动化领域的隔离难题
555红外光枪打靶游戏声光报讯机电路图
评论:大学生应该学习哪些电子知识
DeepSeek的一次小更新 堪比发布新模型
改善8051系统用电效率的微控制器
高速PCI总线接口卡的开发
同级唯一激光雷达+8650芯片智驾方案!零跑B10有望4月上市:预售10.98万起
基础教程:传感器及其如何使用
555热释电红外传感定时控制插座电路图
高精度大推力试验模型烧蚀补偿自动送进控制系统
ISO 21434:道路车辆网络安全工程标准
比GPU快几百倍!曦智科技首发新一代光电混合计算卡:128×128光子矩阵
2003年液晶显示器市场二月份分析报告
长棒形瓷绝缘子在输电线路中的应用前景
求助“低通滤波器”
电子保险丝选型要点全解析
555热释电红外传感遥控器电路图
西部地区PC商用市场同比增长6.6%,政府和教育大单带来显著增长
基于GPl020的6信道相关器电路图
高速电路的信号完整性分析
基础教程:差分放大器以及相关设计软件的基础知识
别再搞混了!教你区分PCB中的通孔、盲孔、埋孔!
基础教程:电压基准源产品
俄罗斯首台350nm光刻机将在莫斯科生产
是德科技和Capgemini合作加速验证再生和透明非地面网络RAN
由Nordic赋能的Matter-over-Thread智能锁可实现远程上锁和解锁,确保智能家居安全
高密度在系统可编程逻辑器件在数字IO电路中的应用