10.4 I2C 系统的重要结构体 参考资料: ⚫ Linux 驱动程序:(某版本的 Linux,比如 Linux-4.9.88)/drivers/i2c ⚫ I2CTools: https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/ 284 / 577 10.4.1 重要结构体 使用一句话概括 I2C 传输:APP 通过 I2C Controller 与 I2C Device 传 输数据。 在 Linux 中要思索下面几个问题。 ⚫ 怎么表示 I2C Controller ⚫ 一个芯片里可能有多个 I2C Controller,比如第 0 个、第 1 个、...... ⚫ 对于使用者,只要确定是第几个 I2C Controller 即可 ⚫ 使用 i2c_adapter 表示一个 I2C BUS,或称为 I2C Controller,里面有 2 个重要的成员: a) nr:第几个 I2C BUS(I2C Controller) b) i2c_algorithm,里面有该 I2C BUS 的传输函数,用来收发 I2C 数据 i2c_adapter 原型: 图 10.27 i2c_adapter 原型 i2c_algorithm 原型: 图 10.28 i2c_algorithm 原型 285 / 577 怎么表示 I2C Device ⚫ 一个 I2C Device,一定有设备地址 ⚫ 它连接在哪个 I2C Controller 上,即对应的 i2c_adapter 是什么 使用 i2c_client 来表示一个 I2C Device 图 10.29 i2c_client 怎么表示要传输的数据 在上面的i2c_algorithm结构体中可以看到要传输的数据被称为:i2c_msg i2c_msg 原型: 图 10.30 i2c_msg ◼ i2c_msg 中的 flags 用来表示传输方向:bit 0 等于 I2C_M_RD 表示 读,bit 0 等于 0 表示写 ◼ 一个 i2c_msg 要么是读,要么是写 286 / 577 举例:设备地址为 0x50 的 EEPROM,要读取它里面存储地址为 0x10 的一个字节, 应该构造几个 i2c_msg?要构造 2 个 i2c_msg c) 第一个 i2c_msg 表示写操作,把要访问的存储地址 0x10 发给设备 d) 第二个 i2c_msg 表示读操作 代码如下 u8 data_addr = 0x10; i8 data; struct i2c_msg msgs[2]; msgs[0].addr = 0x50; msgs[0].flags = 0; msgs[0].len = 1; msgs[0].buf = &data_addr; msgs[1].addr = 0x50; msgs[1].flags = I2C_M_RD; msgs[1].len = 1; msgs[1].buf = &data; 10.4.2 内核里怎么传输数据
相关推荐
kaoa0005 小时前
Linux入门攻坚——62、memcached使用入门AI_56786 小时前
Selenium+Python可通过 元素定位→操作模拟→断言验证 三步实现Web自动化测试model20056 小时前
alibaba linux3 系统盘清理WG_176 小时前
Linux:动态库加载总结_进程间通信+进程池 + 进程IPC(27/28/29/30/31/32)一只懒鱼a7 小时前
docker部署nacos (版本2.3.2)小赵还有头发7 小时前
安装 RealSense SDK (驱动层)Root_Hacker8 小时前
include文件包含个人笔记及c底层调试REDcker8 小时前
RESTful API设计规范详解微学AI9 小时前
内网穿透的应用-告别局域网束缚!MonkeyCode+cpolar 解锁 AI 编程新体验sunnyday04269 小时前
基于Netty构建WebSocket服务器实战指南