3. 数字接口协议解析

XENSIV 系列传感器(如气压计 DPS368、CO₂ 传感器 PAS CO₂、雷达传感器 BGT60TR13C、霍尔传感器 TLI493D 等)对外暴露的寄存器与 FIFO 数据,几乎都通过 I²C、SPI 或 UART 三类数字接口访问。理解这三类接口的帧结构、时序约束与寄存器访问方式,是后续校准、补偿与数据采集的基础。本节不讨论协议的历史,而是聚焦“一帧数据长什么样、时钟与延时有什么硬约束、寄存器读写如何落到总线上”。

一、三类接口在 XENSIV 中的角色分工

I²C 是 XENSIV 传感器最通用的接口:DPS368、TLI493D、PAS CO₂ 均支持,采用两线(SCL/SDA)开漏结构,7 位从机地址,标准模式 100 kHz、快速模式 400 kHz、快速+模式 1 MHz。SPI 用于对吞吐率或时序确定性要求更高的场景,例如 BGT60TR13C 雷达前端以 SPI 读取高速采样数据,采用四线(SCLK、MOSI、MISO、CSN),支持 Mode 0~Mode 3。UART 在 XENSIV 中相对少见,主要用于部分模块化产品或调试通道,异步无时钟线,靠波特率对齐,典型 9600~115200 bps,帧含起始位、数据位、可选校验位与停止位。

选择接口时,关键不是“哪个更快”,而是“哪个能满足时序约束与寄存器访问语义”。I²C 的寄存器地址自动递增特性适合连续读 FIFO;SPI 的全双工与独立片选适合多传感器共享总线;UART 无地址概念,通常一对一连接。

二、I²C 帧结构与寄存器访问

一次 I²C 寄存器写由“起始 + 从机地址(写)+ 寄存器地址 + 数据 + 停止”构成;寄存器读则是“起始 + 从机地址(写)+ 寄存器地址 + 重复起始 + 从机地址(读)+ 数据 + 停止”。XENSIV 传感器普遍支持地址自动递增:写入首寄存器地址后连续读取,内部指针自动加一,因此读取 DPS368 的 6 字节压力/温度结果时,只需一次寻址即可连续读出。

时序上必须注意:标准/快速模式下 SDA 必须在 SCL 高电平期间保持稳定,仅在 SCL 低电平期间变化;总线电容(含走线与上拉)不得超过 400 pF,否则上升沿变缓导致误判。上拉电阻按总线速率选取,400 kHz 常用 2.2 kΩ~4.7 kΩ,1 MHz 需更小。此外,XENSIV 传感器在测量转换期间可能拉低 SCL 进行时钟拉伸(clock stretching),主机必须支持等待,不能强制超时。

三、SPI 帧结构与模式约束

SPI 没有统一的“帧”定义,帧边界由 CSN 片选决定:CSN 拉低开始,拉高结束。XENSIV SPI 通常采用“1 位读写标志 + 7 位寄存器地址 + 数据”的字节结构,读操作在发送地址后由 MISO 返回数据。BGT60TR13C 的 FIFO 读取则是在 CSN 有效期间连续移出多字节采样数据。

SPI 的核心约束是 CPOL/CPHA 决定的四种模式:Mode 0(CPOL=0, CPHA=0)在 SCLK 上升沿采样、下降沿更新;Mode 3(CPOL=1, CPHA=1)在下降沿采样、上升沿更新。主机与从机模式必须一致,否则数据错位。XENSIV 器件数据手册会明确支持的模式,配置前必须核对。SCLK 频率上限受器件限制,例如部分传感器最高 10 MHz,超频会导致读出错误。多从机共享总线时,未选中的 CSN 必须保持高电平,避免 MISO 冲突。

四、UART 帧结构与校验

UART 帧由起始位(低)、5~9 位数据(LSB 先发)、可选奇偶校验位、1~2 位停止位(高)组成。收发双方必须约定相同的波特率、数据位、校验与停止位,否则帧解析失败。XENSIV 模块的 UART 输出常带固定帧头与校验和,用于区分有效数据与噪声。由于无时钟线,波特率误差需控制在约 ±2% 以内,长线或高波特率下建议使用流控或降低速率。

XENSIV 三类数字接口:帧结构 · 时序约束 · 寄存器访问 I²C(两线,开漏) SCL / SDA · 7位地址 · 100k/400k/1M 写:S + 地址W + 寄存器 + 数据 + P 读:S + 地址W + 寄存器 + Sr + 地址R + 数据 + P 时序约束 SCL高时SDA稳定;总线电容≤400pF 支持时钟拉伸,主机需等待 寄存器访问 地址自动递增,连续读FIFO DPS368:一次寻址读6字节结果 典型器件 DPS368 / TLI493D / PAS CO₂ 上拉2.2k~4.7kΩ @400kHz 判断要点 ACK/NACK 确认从机响应 无ACK→地址错或器件未就绪 SPI(四线,全双工) SCLK/MOSI/MISO/CSN · Mode 0~3 帧:CSN↓ + 读写位 + 7位地址 + 数据 + CSN↑ FIFO:CSN有效期间连续移出多字节 时序约束 Mode0:上升沿采样;Mode3:下降沿采样 主从模式必须一致,SCLK≤器件上限 寄存器访问 读写位区分方向,地址显式给出 无自动递增,需逐地址访问 典型器件 BGT60TR13C 雷达前端 高速采样数据经SPI读出 判断要点 未选中CSN保持高,避免MISO冲突 数据错位→先查CPOL/CPHA UART(异步,无时钟线) TX/RX · 9600~115200 bps 帧:起始位 + 5~9数据位 + 校验 + 停止位 LSB先发,常带帧头与校验和 时序约束 波特率误差≤±2%,双方参数一致 长线/高速建议流控或降速 寄存器访问 无地址概念,一对一连接 通过命令字间接访问寄存器 典型器件 模块化产品 / 调试通道 输出带固定帧头便于解析 判断要点 乱码→先核对波特率与数据位 校验失败→丢弃该帧重同步

五、配置寄存器访问的实操要点

无论哪种接口,配置寄存器访问都遵循“先读 ID 确认通信、再写配置、后读回验证”的闭环。以 DPS368 为例,上电后先读 WHO_AM_I(0x0D)应为 0x11,确认 I²C 地址与接线正确;随后写 PRS_CFG(0x06)设置压力测量速率与过采样,写 TMP_CFG(0x07)设置温度配置,再写 MEAS_CFG(0x08)启动连续测量。每一步写完后回读同一寄存器,确认写入值与预期一致,避免因总线干扰导致配置丢失。

SPI 访问 BGT60TR13C 时,需先通过配置寄存器设置 FIFO 水位与采样率,再以 CSN 有效期间连续读取 FIFO 数据。由于 SPI 无自动递增,读取多字节 FIFO 依赖器件内部的 FIFO 指针自动推进,而非地址递增,这一点与 I²C 不同,配置时需查阅数据手册确认。

UART 访问通常以命令帧形式下发,例如“帧头 + 命令码 + 参数 + 校验和”,传感器返回“帧头 + 数据 + 校验和”。解析时必须先校验帧头与校验和,再提取有效载荷,否则噪声会被误认为数据。

调试建议:先用示波器或逻辑分析仪抓取一次完整读写波形,确认起始条件、地址、ACK、数据与停止条件均符合预期,再排查寄存器配置。I²C 无 ACK 优先查地址与上拉;SPI 数据错位优先查 CPOL/CPHA;UART 乱码优先查波特率与地线共地。

六、三类接口的对比与选型参考

维度I²CSPIUART
线数2(SCL/SDA)4(SCLK/MOSI/MISO/CSN)2(TX/RX)
寻址7位从机地址片选CSN无,一对一
典型速率100k/400k/1M1M~10M+9.6k~115.2k
寄存器递增支持通常不支持命令字间接
时钟拉伸支持,主机需等待无无
XENSIV典型DPS368/TLI493D/PAS CO₂BGT60TR13C模块/调试口

选型时,若传感器数量多、走线受限、速率要求不高,优先 I²C;若需要高速 FIFO 读取或多器件并行、时序确定性强,选 SPI;若为模块化输出或仅需调试通道,UART 更简单。三者并非互斥,同一系统中可同时存在,但共享总线时必须处理好地址、片选与电平匹配。

常见误区:把 I²C 的地址自动递增当成所有接口的通用行为,在 SPI 上连续读寄存器却不更新地址,导致读到重复数据;或忽略 UART 的波特率误差,在长线下出现偶发乱码却误判为传感器故障。

掌握帧结构、时序约束与寄存器访问语义后,后续的校准系数读取、FIFO 数据采集与补偿计算才能建立在可靠的通信基础之上。实际工程中,建议把“读 ID—写配置—回读验证—读数据”固化为接口初始化流程,并在每次上电或复位后执行,以降低现场偶发通信异常带来的排查成本。