嵌入式开发基础学习笔记(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_GCCAL位),保证测量精度
  3. 转换阶段:向ADCx_HC0寄存器写入通道号,触发一次转换
  4. 结果读取:转换完成后,数据保存在ADCx_R0寄存器中

五、ADC 应用实践

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

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

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

相关推荐
xiaominngtongxue1 分钟前
从一次接触网实训课看中职实训教学的组织逻辑
笔记
comyccccc16 分钟前
PCB走线设计秘籍:从载流到3D预览全解析学习笔记
单片机·嵌入式硬件
endeavor1226 分钟前
can总线(五)
c语言·stm32·单片机·can
xier_ran42 分钟前
【infra之路】AI 编译器学习笔记(四):PatternRewriter 与贪心 driver
人工智能·笔记·学习
深圳市尚想信息技术有限公司1 小时前
TM52F1376海速芯HITENX Flash-8位MCU单片机,多通道ADC + 段码显示一体化主控芯片
单片机·嵌入式硬件·mcu·flask·芯片·控制器
小弥儿1 小时前
GitHub今日热榜 | 2026-10-12:pytorch 上升四位
人工智能·pytorch·学习·开源·github
ACP广源盛139246256732 小时前
硬件选型笔记|国产 PCIe4.0 交换芯片 IX8012@ACP,边缘 AI 设备 IO 扩展方案探讨
人工智能·笔记·硬件架构·pcie·国产芯片
AOI小白新手上路2 小时前
DeepLens 的课程学习自动设计与同源仿真论文综述
学习
硅基手札2 小时前
【I2C 技术系列 08】I2C 控制器寄存器与 IP 架构
驱动开发·stm32·单片机·嵌入式硬件·mcu·架构·计算机外设
新晨单片机设计2 小时前
S027A-基于STM32单片机模拟电梯控制系统【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus·模拟电梯