嵌入式开发基础学习笔记(I2C 通信协议与 ADC 模数转换)

一、I2C 通信协议基础

I2C(Inter-Integrated Circuit)是由飞利浦公司开发的同步串行半双工通信总线,广泛应用于嵌入式系统中与各类传感器和存储设备的通信。

I2C 读时序详解

I2C 读操作采用复合格式(Combined Format),即在不释放总线的情况下,先写入地址再切换为读取模式,具体步骤如下:

  1. 起始信号:主机在SCL为高电平时,将SDA拉低,产生起始信号。
  2. 设备地址写入
    • 主机发送从机地址(7位)
    • 数据流向位设置为 0(Write),即使最终目的是读取,也需要先发送写命令
    • 等待从机应答 (ACK)
  3. 寄存器/存储地址发送:主机发送要读取的内部寄存器地址,等待从机应答 (ACK)
  4. 重复起始信号:主机再次发送起始信号,保持总线占用
  5. 设备地址读取
    • 主机重新发送从机地址(7位)
    • 数据流向位设置为 1(Read)
    • 等待从机应答 (ACK)
  6. 数据接收
    • 从机开始向主机发送数据
    • 读取最后一个字节时,主机必须发送 NACK 信号(SDA保持高电平)
  7. 停止信号:主机释放总线

在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实现)

  1. 配置阶段:设置引脚复用(为GPIO功能)、配置ADCx_CFG和ADCx_GC寄存器
  2. 校准阶段:启动自动校准(写ADCx_GC[CAL]位),保证测量精度
  3. 转换阶段:向ADCx_HC0寄存器写入通道号,触发一次转换
  4. 结果读取:转换完成后,数据保存在ADCx_R0寄存器中

五、ADC 应用实践

在IMX6ULL系统中,ADC的典型应用包括:

  • 温度监测:通过连接温度传感器(如LM75)实现环境温度监测
  • 光强检测:配合光敏电阻实现环境光强检测
  • 电压测量:直接测量外部电压信号
  • 数据采集系统:作为多通道数据采集系统的核心组件

开发建议 :在实际应用中,应特别注意基准电压的稳定性模拟信号的滤波处理,这两点对提高ADC测量精度至关重要。同时,根据应用场景合理选择分辨率,平衡精度需求与系统资源消耗。

相关推荐
好奇龙猫2 小时前
人工智能学习-AI入试相关题目练习-第十一次
人工智能·学习
淮北4942 小时前
大模型学习(一、Qwen2.5-1.5B本地部署)
学习
Jackyzhe2 小时前
从零学习Kafka:集群架构和基本概念
学习·架构·kafka
切糕师学AI2 小时前
ARM Cortex-M 中的 异常和中断
arm开发·单片机·嵌入式硬件
麒qiqi2 小时前
从像素点亮到时序控制:i.MX6U 驱动 LCD 的完整流程
单片机·嵌入式硬件
石像鬼₧魂石2 小时前
网络安全渗透测试学习路线的核心技能阶段应该学习哪些知识
学习·安全·web安全
觉醒大王2 小时前
简单说说参考文献引用
java·前端·数据库·学习·自然语言处理·学习方法·迁移学习
求真求知的糖葫芦2 小时前
微波工程4.3节散射矩阵(S参数矩阵)参考平面移动与广义散射参数学习笔记(下)(自用)
学习·平面·矩阵·射频工程
西城微科方案开发2 小时前
汽车打气泵方案
单片机·汽车·方案公司推荐