i2c 写i2c spec 规定如下
详细解析如下
对从机进行写操作时,主设备发出开始标志 (s) 和写地址 (从机地址加一个 r/w 位,1 为读,0 为写)。从机产生应答信号。然后主设备开始传送寄存器地址 (ra),接到应答后,开始传送寄存器数据,然后仍然要有应答信号,连续写入多字节时依次推。
举例(例子进行了两次封装)
static int ap3216c_open(struct inode *inode, struct file *filp){ filp- >private_data = &ap3216cdev; /* 初始化ap3216c */ ap3216c_write_reg(&ap3216cdev, ap3216c_systemcong, 0x04); /* 复位ap3216c */ mdelay(50); /* ap3216c复位最少10ms */ ap3216c_write_reg(&ap3216cdev, ap3216c_systemcong, 0x03); /* 开启als、ps+ir */ return 0;}static void ap3216c_write_reg(struct ap3216c_dev *dev, u8 reg, u8 data){ u8 buf = 0; buf = data; ap3216c_write_regs(dev, reg, &buf, 1);}static s32 ap3216c_write_regs(struct ap3216c_dev *dev, u8 reg, u8 *buf, u8 len){ u8 b[256]; struct i2c_msg msg; struct i2c_client *client = (struct i2c_client *)dev- >private_data; b[0] = reg; /* 寄存器首地址 */ memcpy(&b[1],buf,len); /* 将要写入的数据拷贝到数组b里面 */ msg.addr = client- >addr; /* ap3216c地址 */ msg.flags = 0; /* 标记为写数据 */ msg.buf = b; /* 要写入的数据缓冲区 */ msg.len = len + 1; /* 要写入的数据长度 */ return i2c_transfer(client- >adapter, &msg, 1);}
Linux页面大小对数据库性能的影响
液晶显示器偏光膜的基本原理
HAM/业余无线电爱好者,HAM/业余无线电爱好者是什么意思
智慧工地农民工实名制管理的措施及手段
GPS接收机基本工作原理
I2C spec规定和详细解析
简述电机控制器以及其未来
赛灵思嵌入式网络解决方案的应用研究
快恢复二极管与整流二极管有什么区别呢,能代换使用吗?
”新基建“时代协助人工智能产业的发展
陶瓷电容存在要注意的地方
工业机器人将助力中国航空技术的发展
红米pro2什么时候上市?红米pro2最新消息:红米Pro 2曝光:骁龙660,第一款全面屏千元机
控制机器人通用控制步骤
台积电产A11处理器 预估7月下旬量产交货
一加正在研发一款智能手表,并将搭载Wear OS操作系统
采用DSP的通用型嵌入式语音平台系统设计
华为正在成为下一代通信技术领域的强大竞争者
ide接口和ata接口
台湾开发具有高射稳定性的权彩花量子点Micro LED阵列