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

相关推荐
Maple_land13 分钟前
Linux进程第八讲——进程状态全景解析(二):从阻塞到消亡的完整生命周期
linux·运维·服务器·c++·centos
嵌入式分享15 分钟前
嵌入式分享#41:RK3576改UART波特率【精简版】
linux·嵌入式硬件·ubuntu·嵌入式
爱吃生蚝的于勒17 分钟前
【Linux】零基础学会Linux之权限
linux·运维·服务器·数据结构·git·算法·github
量子物理学19 分钟前
Eclipse Mosquitto 在小内存下怎么修改配置文件
java·服务器·eclipse
惜.己25 分钟前
linux中jenkins正常启动外部无法访问
linux·servlet·jenkins
Cyan_RA937 分钟前
Linux 远程Ubuntu服务器本地部署大模型 EmoLLM 中常见的问题及解决方案 万字详解
linux·运维·服务器·ubuntu·大模型·远程部署·emollm
数字冰雹39 分钟前
图观 流渲染打包服务器
服务器·前端·github·数据可视化
minji...1 小时前
Linux相关工具vim/gcc/g++/gdb/cgdb的使用详解
linux·运维·服务器·c++·git·自动化·vim
web安全工具库1 小时前
Linux 高手进阶:Vim 核心模式与分屏操作详解
linux·运维·服务器·前端·数据库
egoist20231 小时前
[linux仓库]信号产生[进程信号·贰]
linux·键盘·系统调用·信号产生·软件条件