linux的系统

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 内核里怎么传输数据

相关推荐
小马学嵌入式~20 分钟前
linux开发深度学习-时钟
linux·arm开发·嵌入式硬件·学习
276695829223 分钟前
租车帮(悟空)订单查询算法分析
java·服务器·前端·悟空·悟空app·租车帮·租车帮逆向
青瓦梦滋24 分钟前
Linux进程间通信(IPC)——system V
linux·服务器·c++·文件
XMAIPC_Robot29 分钟前
基于RK3588 ARM+FPGA的电火花数控硬件平台总体设计(二)
运维·arm开发·人工智能·fpga开发·边缘计算
Are_You_Okkk_34 分钟前
研发运维一体化:开源知识库落地案例与价值探析
运维·人工智能·架构·开源
蓝队云计算34 分钟前
深耕本土,安全稳定——云南云服务器为何首推蓝队云
运维·服务器·安全·云服务器·蓝队云
人生苦短,菜的抠脚34 分钟前
RK628 Linux 内核驱动开发指南
linux·驱动开发
讯捷蓝达36 分钟前
服务器维修立等可取?Dell R730不开机 现场维修分享(东莞长安)
运维·经验分享
代码AC不AC37 分钟前
【Linux】命名管道
linux·命名管道
陌上花开缓缓归以39 分钟前
linux boot 烧写纪要以及内存相关分析
linux·服务器·网络