一、I2C 通信协议基础
I2C(Inter-Integrated Circuit)是由飞利浦公司开发的同步串行半双工通信总线,广泛应用于嵌入式系统中与各类传感器和存储设备的通信。
I2C 读时序详解
I2C 读操作采用复合格式(Combined Format),即在不释放总线的情况下,先写入地址再切换为读取模式,具体步骤如下:
- 起始信号:主机在SCL为高电平时,将SDA拉低,产生起始信号。
- 设备地址写入 :
- 主机发送从机地址(7位)
- 数据流向位设置为 0(Write),即使最终目的是读取,也需要先发送写命令
- 等待从机应答 (ACK)
- 寄存器/存储地址发送:主机发送要读取的内部寄存器地址,等待从机应答 (ACK)
- 重复起始信号:主机再次发送起始信号,保持总线占用
- 设备地址读取 :
- 主机重新发送从机地址(7位)
- 数据流向位设置为 1(Read)
- 等待从机应答 (ACK)
- 数据接收 :
- 从机开始向主机发送数据
- 读取最后一个字节时,主机必须发送 NACK 信号(SDA保持高电平)
- 停止信号:主机释放总线
在IMX6ULL系统中,
i2c_read函数正是按照上述时序实现的,先写入地址,再通过Repeated Start切换为读模式。
二、ADC 基本概念
ADC (Analog-to-Digital Converter) 即模数转换器,是嵌入式系统中连接模拟世界与数字世界的关键桥梁。
核心定义与作用
- 定义:将连续变化的模拟信号(如电压)转换为离散的数字信号(二进制代码)的电子器件或模块
- 作用:数字系统(微处理器、微控制器)只能处理0和1组成的数字信号,而现实世界中的物理量(温度、湿度、光照、压力等)多为模拟量,ADC实现了从模拟到数字的转换
IMX6ULL ADC 特性
- 内部集成两个ADC控制器
- 采用逐次逼近法 (SAR) 原理设计
- 具有10个外部通道(GPIO1_IO00 ~ GPIO1_IO09)
- 最大转换速率为1MHz
三、ADC 关键参数
1. 基准电压 (Reference Voltage, Vref)
基准电压 是ADC进行模数转换时的参考标准,其重要性体现在:
- 工作原理:ADC通过将输入的模拟电压与基准电压进行比较,确定输入电压的数字量值
- 转换公式:在逐次逼近型ADC中,先比较采样电压( VadcVadc )与基准电压( VrefVref )的1/2;若 Vadc>Vref/2Vadc>Vref/2 ,结果为1,否则为0,然后继续与1/4或3/4比较
- 精度影响:基准电压的稳定性直接决定ADC转换精度,波动会导致转换值错误
- 典型值 :IMX6ULL实验中常将基准电压设置为3.3V
2. 分辨率 (Resolution)
分辨率是衡量ADC精度的最关键指标:
- 定义:ADC能够将基准电压分割成多少份,表示ADC输出的数字信号位数
- 计算公式:若基准电压为 VrefVref ,分辨率为 nn 位,则最小电压变化为 Vref2n2nVref
- 常见分辨率 :
- 8位:可表示0~255个数值,精度较低
- 10位:可表示0~1023个数值,常用精度
- 12位:可表示0~4095个数值,IMX6ULL默认推荐模式
- 16位及以上:用于精密仪器的高精度测量
实例计算:IMX6ULL在12位模式下,基准电压3.3V时,能识别的最小电压约为 3.3V/4096≈0.8mV3.3V/4096≈0.8mV
四、ADC 工作原理
IMX6ULL的ADC主要基于逐次逼近法 (Successive Approximation) 工作,其核心流程分为三个阶段:
1. 采样 (Sampling)
- ADC在特定时间间隔内采集模拟信号的瞬时电压值
- 通过保持并测量模拟信号在每个采样时间点的电压值实现
2. 量化 (Quantization)
- 将采样得到的连续模拟电压值映射到离散的数字值
- 比较过程:内部DAC产生电压与输入电压比较
- 计算公式:输入电压 VinVin 对应的数字值 DD 为 D=VinVref×(2n−1)D=VrefVin×(2n−1)
3. 转换流程 (IMX6ULL实现)
- 配置阶段:设置引脚复用(为GPIO功能)、配置ADCx_CFG和ADCx_GC寄存器
- 校准阶段:启动自动校准(写ADCx_GC[CAL]位),保证测量精度
- 转换阶段:向ADCx_HC0寄存器写入通道号,触发一次转换
- 结果读取:转换完成后,数据保存在ADCx_R0寄存器中
五、ADC 应用实践
在IMX6ULL系统中,ADC的典型应用包括:
- 温度监测:通过连接温度传感器(如LM75)实现环境温度监测
- 光强检测:配合光敏电阻实现环境光强检测
- 电压测量:直接测量外部电压信号
- 数据采集系统:作为多通道数据采集系统的核心组件
开发建议 :在实际应用中,应特别注意基准电压的稳定性 和模拟信号的滤波处理,这两点对提高ADC测量精度至关重要。同时,根据应用场景合理选择分辨率,平衡精度需求与系统资源消耗。