4. 串行通信协议基础与医疗设备应用

在医疗设备数据采集中,串行通信是最常见、也最容易被低估的一层。监护仪、输液泵、麻醉机、血气分析仪等设备,往往通过一根串口线或板级总线,把心率、血氧、泵速、报警状态等数据交给采集网关。理解 UART、SPI、I2C 的差异,以及波特率、数据位、校验位、流控这些参数如何影响通信,是后续协议适配和排障的基础。

一、三种串行总线的定位差异

UART 是异步串行通信,收发双方没有共享时钟线,靠事先约定的波特率对齐每一位。它通常用于设备与网关之间的点对点连接,例如监护仪 RS-232 串口输出。SPI 是同步串行通信,由主设备提供 SCLK,通过 MOSI、MISO 全双工传输,片选 CS 决定与哪个从设备通信,速率可达数 MHz,常见于采集板上的 ADC、Flash 等芯片。I2C 也是同步通信,但只用 SDA、SCL 两根线,通过地址寻址多个从设备,速率通常为 100 kHz 或 400 kHz,适合连接温度传感器、EEPROM 等低速外设。

UART / SPI / I2C 信号结构与典型医疗连接 UART(异步,点对点) TX RX GND 监护仪 DB9 ↔ 采集网关 SPI(同步,全双工) SCLK MOSI MISO CS 采集板 ↔ ADC / 数据 Flash I2C(同步,地址寻址) SDA SCL 0x48 0x50 温度传感器 / EEPROM 串口参数配置与数据帧结构(以 9600 8N1 为例) 起始位 D0 D1 D2 D3 D4 D5 D6 D7 校验位 停止位 波特率 9600 → 每位约 104.17 μs;8N1 一帧共 10 位,约 1.04 ms 校验位:None / Even / Odd;流控:None / RTS-CTS / XON-XOFF 常见医疗设备:9600 8N1、19200 8E1、115200 8N1

二、串口参数:波特率、数据位、校验位与流控

串口配置通常写成“9600 8N1”这样的简写,含义是波特率 9600、数据位 8、无校验、停止位 1。波特率决定每一位的持续时间,9600 bps 下每位约 104.17 μs,一帧 10 位约 1.04 ms。如果收发双方波特率不一致,接收端会在帧中途采样错位,表现为乱码或持续收到 0x00、0xFF。数据位一般为 7 或 8 位,医疗设备多用 8 位;校验位可选 None、Even、Odd,用于发现单比特错误,但不能纠错;停止位通常为 1 或 2 位。

流控用于防止接收缓冲区溢出。RTS/CTS 是硬件流控,接收方拉高 RTS 表示可以接收,发送方检测 CTS 后决定是否发送;XON/XOFF 是软件流控,用 0x11、0x13 两个控制字符控制发送节奏。监护仪持续输出波形时,如果网关处理不及时,没有流控就会丢数据。实际配置时,先查设备手册确认默认参数,再用串口调试工具逐项核对,不要凭经验猜测。

三、监护仪与输液泵的串口通信实例

以某类监护仪为例,其 RS-232 串口默认 9600 8N1,无流控,周期输出生命体征数据帧。帧头常为 0x02,帧尾为 0x03,中间包含设备地址、心率、血氧、报警状态等字段。采集端收到帧后,先按帧头帧尾切分,再校验长度和校验和,最后解析字段。若收到 0x02 后长时间没有 0x03,说明帧不完整,应丢弃并重新同步。

输液泵的串口通信更偏向命令-响应模式。网关发送查询命令,例如读取当前泵速和剩余量,泵返回状态帧。此时除了串口参数,还要注意命令间隔和超时。如果泵在 500 ms 内没有响应,应重发或标记通信异常,而不是无限等待。对于报警状态,建议单独解析并设置优先级,避免被普通数据淹没。

调试串口时,先用回环测试确认本地串口收发正常,再连接设备。若出现乱码,优先检查波特率、数据位、校验位和停止位是否与设备手册一致,其次检查电平标准(RS-232 与 TTL 不能直接混接)。

四、配置与排障要点

实际项目中,建议把每台设备的串口参数、协议类型、帧格式、超时时间记录成配置表,作为采集网关的输入。下面是一份可直接参考的配置示例,参数为教学假设值,实际应以设备手册为准。

设备名称:监护仪-A
接口:RS-232 DB9
波特率:9600
数据位:8
校验位:None
停止位:1
流控:None
帧头:0x02
帧尾:0x03
超时:1000 ms
重试:2 次

设备名称:输液泵-B
接口:RS-232 DB9
波特率:19200
数据位:8
校验位:Even
停止位:1
流控:RTS/CTS
命令间隔:200 ms
响应超时:500 ms

排障时按“物理层—参数层—协议层”顺序检查:先确认线序和电平,再核对串口参数,最后检查帧格式和校验。若数据能收到但解析失败,多半是帧头帧尾、字节序或校验方式不匹配;若完全收不到数据,先查波特率和流控,再查设备是否处于主动上报模式。把这些检查点固定下来,串口通信问题就能从“靠猜”变成“按表排查”。