全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 接口/总线/驱动 >

I2C spec规定和详细解析

时间:2023-07-22 15:55

人气:

作者:admin

标签: 数据 

导读:...

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);
}
温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信