ADS131M02 通过 SPI 与 MCU 通信。它是 SPI 从机,固定使用 Mode 1(CPOL=0,CPHA=1):空闲时钟低,数据在 SCLK 上升沿变化、下降沿采样。
🎛️ SPI 信号速览
- CS:片选低有效。一帧通信内保持低电平;
- SCLK:时钟输入,数据在上升沿变化、下降沿锁存;
- DIN:主机发送给 ADC(MOSI);
- DOUT:ADC 回传给主机(MISO),CS 高时高阻;
- DRDY:数据准备好,可配成电平或脉冲模式;
- SYNC/RESET:同步转换或复位。
📨 通信帧结构
每个 SPI 帧由若干个字组成,字长可设为 16/24/32 位(MODE 寄存器的 WLENGTH 位)。典型 24 位模式下:
图 8-18. 典型通信帧
- 主机发送:命令字 + 命令 CRC/0 + 两个 dummy 字;
- 从机回复:上一帧命令的响应字 + 通道 0 数据 + 通道 1 数据 + CRC/状态字。
注意:ADC 输出的是上一帧命令的响应,不是当前帧。这是流水线延迟,写代码时要特别注意。
📝 读寄存器时序
读寄存器分两步:第一帧发送 RREG 命令,第二帧接收寄存器值。
图 8-23. 读取单个寄存器
🗂️ 关键寄存器速查
| 寄存器 | 地址 | 作用 |
|---|---|---|
| ID | 00h | 芯片 ID,上电可读 |
| STATUS | 01h | 状态位:锁定、CRC 错误等 |
| MODE | 02h | SPI 字长、DRDY 格式、CRC 使能等 |
| CLOCK | 03h | OSR、功耗模式、通道使能 |
| GAIN1 | 04h | 两通道 PGA 增益 |
| CFG | 06h | 全局斩波、电流检测配置 |
| CH0_CFG / CH1_CFG | 09h / 0Ch | 通道输入 MUX、相位 |
| CH0_OCAL / CH1_OCAL | 0Ah/B / 0Dh/E | 偏移校准 |
| CH0_GCAL / CH1_GCAL | 0Ah/B? 具体见手册 | 增益校准 |
提醒
配置寄存器时建议先关闭通道(CLOCK 寄存器),写短帧完成配置后再开启,避免读出不完整数据。
💻 代码伪代码理解
数据手册给了完整 C 风格伪代码,核心流程是:
- 初始化 MCU SPI、GPIO、DMA、CLKOUT;
- 等 DRDY 变高,说明芯片准备好通信;
- 写 CLOCK 寄存器设置 OSR、功耗模式;
- 写 MODE 寄存器设置 DRDY 格式、字长;
- 写 GAIN1/CH_CFG 设置增益和输入;
- 使能 DRDY 中断,在中断里发 dummy 字读回 ADC 数据。
ADS131M02 使用 SPI 哪种模式?
Mode 1:CPOL=0(空闲低),CPHA=1(下降沿采样)。
为什么读寄存器需要两帧?
第一帧发送 RREG 命令,ADC 在下一帧才把寄存器值放到 DOUT 上。这是流水线延迟。
配置寄存器前为什么建议先关闭通道?
避免在配置过程中读到不完整的转换数据,保证后续数据帧格式一致。