4. SECS-I串行通信协议

SECS-I(SEMI Equipment Communications Standard 1)是半导体设备通信中最早被广泛采用的串行通信协议,它定义了设备(Equipment)与主机(Host)之间基于 RS-232 串行链路的点对点消息交换规则。虽然今天许多新设备已转向 HSMS(基于 TCP/IP),但 SECS-I 仍是理解 SECS/GEM 消息语义、握手逻辑与超时重试机制的经典入口。本节从物理层、数据链路层、消息格式、块传输、超时与重试机制到典型应用,逐层拆解 SECS-I 的完整通信模型。

一、物理层:RS-232 点对点串行链路

SECS-I 的物理层基于 EIA RS-232 标准,采用点对点连接,通常使用 DB-25 或 DB-9 连接器。设备与主机之间通过交叉线(Null Modem)连接,即一端的 TXD 接另一端的 RXD,RTS/CTS 与 DSR/DTR 按握手需求交叉。关键参数包括:

  • 波特率:常见 9600、19200、38400 bps,SECS-I 标准推荐 9600 bps 作为默认速率。
  • 数据位:8 位;停止位:1 位;校验:无校验(None)。
  • 流控:通常使用 RTS/CTS 硬件流控,也可用 XON/XOFF 软件流控。
  • 电气特性:逻辑 1 为 -3V ~ -15V,逻辑 0 为 +3V ~ +15V,传输距离一般不超过 15 米。

物理层只负责比特流的透明传输,不关心消息边界。真正的消息成帧、块编号、确认与重试由数据链路层完成。

二、数据链路层:块、握手与设备 ID

SECS-I 数据链路层将上层消息切分为若干“块”(Block),每个块最大 254 字节(含 10 字节块头)。块头包含:

  • 设备 ID(Device ID):15 位,标识通信对端,0 表示主机,非 0 表示设备。
  • 块编号(Block Number):1 位,在 0 与 1 之间交替,用于检测重复块。
  • 等待位(Wait Bit, W-Bit):1 位,表示发送方是否还需要发送后续块。
  • 字节数(Byte Count):10 位,表示本块数据长度。
  • 校验和(Checksum):16 位,对块头与数据做累加和校验。

接收方收到块后,必须回送一个单字节的 ACK(0x06)表示正确接收,或 NAK(0x15)表示校验失败。发送方只有收到 ACK 后才发送下一块。这种“停等协议”保证了串行链路上的可靠传输。

三、消息格式:SECS-II 消息的封装

SECS-I 承载的是 SECS-II 消息。一条完整的 SECS-II 消息由消息头(10 字节)和消息体(数据项列表)组成。消息头包含:

  • Session ID:2 字节,会话标识。
  • Header Byte 2:包含 W-Bit、Stream、Function 等。
  • Header Byte 3:包含 PType、SType、System Bytes 等。
  • System Bytes:4 字节,用于事务匹配,主设备发起时生成,从设备回复时原样返回。

消息体由数据项(Data Item)组成,每个数据项有格式字节(Format Byte)和长度字节(Length Byte),支持 List、Binary、Boolean、ASCII、I2/I4/I8、F4/F8、U1/U2/U4/U8 等类型。例如,一条 S1F1(Are You There)消息体为空,而 S1F2 回复可能包含设备型号与软件版本。

四、块传输与超时重试机制

当消息长度超过 244 字节时,SECS-I 会将其拆分为多个块。发送方在发送第一块时置 W-Bit=1,表示还有后续块;最后一块置 W-Bit=0。接收方每收到一块都回 ACK,直到收到 W-Bit=0 的块后,才将完整消息交给上层处理。

SECS-I 定义了多个超时定时器,最核心的是 T1(块间超时)、T2(协议超时)、T3(回复超时) 和 T4(会话超时)。典型值如下:

定时器含义典型值超时动作
T1等待 ACK 或下一块1 秒重发当前块,最多 3 次
T2等待完整消息接收10 秒丢弃已收块,回 NAK
T3等待回复消息45 秒上层报错,事务失败
T4链路空闲检测45 秒发送 S1F1 探测链路

重试机制采用“超时重发 + 块编号去重”策略。接收方通过块编号判断是否为重复块:若收到与上一块编号相同的块,则丢弃数据但回 ACK,避免重复处理。发送方在 T1 超时后重发当前块,连续 3 次失败则上报链路故障。

关键点:SECS-I 的可靠性建立在“停等 + ACK/NAK + 块编号 + 超时重发”四重机制之上。任何一块丢失或校验错误,都会触发重传,直到成功或达到重试上限。

五、典型应用与配置示例

SECS-I 常用于老旧设备改造、低速串口设备以及部分量测设备。典型场景包括:主机通过串口轮询设备状态、下发配方(Recipe)、采集过程数据(S6F11)等。以下是一个典型的 SECS-I 串口配置片段:

Port: COM1
Baud Rate: 9600
Data Bits: 8
Parity: None
Stop Bits: 1
Flow Control: RTS/CTS
Device ID: 1
T1: 1s
T2: 10s
T3: 45s
T4: 45s
Retry Limit: 3

在调试时,常用串口监听工具抓取原始字节流,观察块头、ACK/NAK 与 W-Bit 的变化。例如,一次 S1F1 交互的原始日志可能如下:

TX: 80 00 01 00 00 00 00 00 00 0A 01 02 00 00
RX: 06
RX: 80 00 01 00 00 00 00 00 00 0A 01 02 00 00
TX: 06

六、常见误区与复盘

误区 1:认为 SECS-I 与 SECS-II 是同一层。实际上 SECS-I 是传输层/数据链路层,SECS-II 是消息语义层,二者配合使用。

误区 2:忽略 T3 超时设置。T3 过短会导致正常回复被误判为超时,过长则故障恢复缓慢。应根据设备响应时间合理设置。

误区 3:块编号去重未实现。若接收方不检查块编号,重传会导致消息重复处理,可能引发配方重复下发等严重后果。

复盘时建议检查:串口参数是否一致、流控是否匹配、T1/T2/T3/T4 是否合理、重试次数是否足够、块编号是否严格交替。通过串口抓包与协议分析仪,可以快速定位是物理层丢包、链路层校验失败还是上层超时。

SECS-I 块传输与超时重试机制 主机 Host Device ID = 0 设备 Equipment Device ID = 1 RS-232 串行链路 Block 0 (W=1) ACK Block 1 (W=0) ACK T1 超时重发 NAK 数据块 ACK 确认 超时/NAK W-Bit:1=还有后续块,0=最后一块

掌握 SECS-I 的关键在于理解“块”是链路层的最小传输单元,而“消息”是上层语义单元。块传输、ACK/NAK、块编号与 T1~T4 定时器共同构成了一个简单但可靠的停等协议。在实际项目中,合理配置串口参数与超时值,并配合抓包分析,才能保证设备与主机之间稳定、可追溯的通信。