type
date
slug
category
icon
password
Linux内核提供了一套完整的I2C子系统,它采用分层设计,实现了硬件抽象,使得应用程序可以透明地访问I2C设备。
Linux I2C子系统的架构分为几个关键层次:应用层、设备驱动层、核心层和控制器驱动层。这种分层设计使得整个系统更加模块化,便于维护和扩展。
- 应用层:
- 用户空间的应用程序通过系统调用与I2C设备交互
- I2C工具(i2ctools)提供设备探测、寄存器读写等功能
- 设备驱动层:
- 特定I2C设备的驱动程序
- 通用I2C设备接口(i2c-dev.c)提供用户空间访问I2C总线的能力
- 核心层:
- 提供统一的API(如i2c_transfer、i2c_smbus_xfer等)
- 管理I2C总线和设备的注册与注销
- 处理地址分配和冲突检测
- 控制器驱动层:
- 实现特定硬件控制器的驱动
- 提供I2C协议的底层实现
- 包括硬件适配器驱动和GPIO模拟I2C驱动
下面对设备驱动层、核心层总线驱动匹配机制以及控制器驱动有源码分析。
IIC 驱动专题01 - 设备驱动 at24.c 源码分析IIC 驱动专题02 - I2C总线驱动匹配机制分析IIC 驱动专题03 - 控制器驱动 i2c-imx.c 源码分析IIC 驱动专题04 - I2C Adpater驱动框架与实例IIC 驱动专题05 - GPIO模拟I2C源码分析和实例核心数据结构
- 适配器 adpter,也是控制器,或总线。
设备注册流程
数据传输流程
Linux内核中的I2C核心实现位于
drivers/i2c/i2c-core.c
。以下是几个关键函数:- i2c_transfer函数:I2C消息传输的核心函数
- __i2c_transfer函数:实际执行传输操作
设计理念
Linux I2C子系统的设计体现了以下几个关键理念:
- 分层架构:清晰分离应用层、驱动层、核心层和硬件控制层,每层职责明确。
- 设备模型集成:I2C子系统完全集成到Linux设备模型中,设备注册、发现和匹配都遵循统一的模式。
- 硬件抽象:通过抽象接口隔离硬件细节,使上层应用无需关心底层实现。
- 总线与设备分离:区分总线控制器(adapter)和总线上的设备(client),便于管理。
- Author:felixfixit
- URL:http://www.felixmicrospace.top/article/linux_drv_iic_set
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!