1. I2C总线技术概述
在嵌入式系统开发中,I2C(Inter-Integrated Circuit)总线因其简单的两线制结构和灵活的多主从架构,成为连接各类低速外设的首选方案。IMX6ULL作为NXP推出的高性能ARM Cortex-A7处理器,其内置的I2C控制器在工业控制、消费电子等领域有着广泛应用。
I2C总线仅需SCL(时钟线)和SDA(数据线)两根信号线,通过独特的地址寻址机制,单个主机可以管理多达112个从设备(7位地址模式)。在实际项目中,我们常用它连接EEPROM、传感器(RTC、温湿度等)、触摸控制器等外设。IMX6ULL支持多达7个I2C接口,最高速率可达400kHz(快速模式)。
注意:I2C总线采用开漏输出结构,必须外接上拉电阻(典型值4.7kΩ),否则无法正常工作。这是新手最容易忽略的关键点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. IMX6ULL的I2C控制器详解
2.1 硬件架构特性
IMX6ULL的I2C控制器完全兼容Philips I2C标准,主要特性包括:
- 支持标准模式(100kHz)和快速模式(400kHz)
- 7位和10位地址寻址
- 中断驱动和轮询两种工作模式
- 内置FIFO缓冲区(64字节)
- 支持SMBus协议扩展
硬件连接时需注意:
- VDDIO电压需与从设备匹配(通常3.3V)
- 走线长度建议不超过1米(高速模式下更短)
- 避免与高频信号线平行走线
2.2 寄存器配置要点
关键寄存器及其作用:
- I2CR (控制寄存器):使能I2C、选择主机/从机模式
- I2SR (状态寄存器):检测传输状态(ACK/NACK、仲裁丢失等)
- I2DR (数据寄存器):读写传输数据
- IFDR (分频寄存器):设置SCL时钟频率
时钟分频计算公式:
code复制SCL频率 = IPG_CLK / (2 × (IFDR[5:0] + 1))
例如IPG_CLK=66MHz,目标SCL=100kHz时:
code复制IFDR = (66MHz / (2 × 100kHz)) - 1 = 329 → 0x14(20)
3. Linux驱动开发实战
3.1 设备树配置示例
dts复制i2c1: i2c@021a0000 {
compatible =
