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);
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
数据
+关注
关注
8文章
7068浏览量
89106 -
I2C
+关注
关注
28文章
1489浏览量
123890
发布评论请先 登录
相关推荐
i2c总线ppt(I2C总线器件应用)
I2C总线器件应用第一节 I2C总线器件应用概述I2C总线工作原理I2C总线系统结构I2C总线系统结构如图7-1所示。其中,SCL是时钟线,
发表于 08-13 17:34
•0次下载
i2c总线技术 (非常详细)
i2c总线技术:2 I2C 总线使设计人员和厂商都得益.. 32.1 设计人员的得益.. 42.2 厂商的得益. 53 介绍I2C 总线规范 64
发表于 03-25 08:58
•62次下载
I2C Guid I2C指南
I2C Guid I2C指南
The I2C bus is used in a wide rangeof applications because it is simpleand
发表于 04-23 13:55
•36次下载
硬件I2C与模拟I2C
硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C;一般也较为稳定,但
发表于 12-28 19:14
•81次下载
I2C总线能挂多少设备?I2C spec知识总结
I2C 是 Philips 公司在 1982 年为主机板、嵌入式系统(短距)设计的一种简单、双向二线制同步串行总线。
评论