4、SECS-I协议详解:RS-232物理层、块传输协议、多块消息重组、超时与重传机制
SECS-I(SEMI Equipment Communications Standard 1)是SECS/GEM协议栈中最底层的通信协议,定义了半导体设备与主机之间在RS-232串行接口上的物理连接、数据帧格式、块传输规则以及错误恢复机制。本章将深入剖析SECS-I的核心技术细节,为后续理解HSMS(高速消息服务)和GEM功能奠定基础。
学习提示:SECS-I虽然物理层基于传统的RS-232,但其块传输协议和多块消息重组机制的设计思想,至今仍影响着现代工业通信协议。理解SECS-I是掌握整个SECS/GEM协议栈的基石。
4.1 RS-232物理层规范
SECS-I严格规定了RS-232接口的电气特性、连接器定义和信号线功能。在半导体工厂环境中,设备与主机之间的物理连接必须遵循以下标准:
| 参数 | 规范值 | 说明 |
|---|---|---|
| 接口标准 | RS-232-C / RS-232-D | 点对点串行通信 |
| 连接器类型 | DB-25(25针)或 DB-9(9针) | 推荐使用DB-25,DB-9需适配 |
| 信号电平 | 逻辑1: -3V ~ -15V 逻辑0: +3V ~ +15V |
负逻辑,与TTL电平不兼容 |
| 传输模式 | 全双工 | 可同时发送和接收 |
| 最大电缆长度 | 15米(约50英尺) | 超过此长度需使用线路驱动器 |
| 波特率 | 9600 bps(默认) 可选项:19200, 38400, 57600 |
设备与主机必须协商一致 |
| 数据位 | 7位或8位 | 通常使用7位ASCII |
| 停止位 | 1位 | 固定为1位 |
| 奇偶校验 | 偶校验(Even)或无校验 | 推荐使用偶校验 |
关键信号线定义:在DB-25连接器中,SECS-I强制使用以下信号线:
- TxD(发送数据):引脚2,设备向主机发送数据。
- RxD(接收数据):引脚3,设备从主机接收数据。
- GND(信号地):引脚7,公共参考地。
- RTS(请求发送):引脚4,硬件流控信号(可选)。
- CTS(清除发送):引脚5,硬件流控信号(可选)。
4.2 块传输协议(Block Transfer Protocol)
SECS-I将上层消息(Message)分割成多个数据块(Block)进行传输。每个块是物理层传输的最小数据单元,具有固定的帧结构。块传输协议的核心目标是确保数据在不可靠的RS-232链路上可靠传输。
4.2.1 数据块帧结构
每个SECS-I数据块由以下字段组成,总长度可变,但最大不超过254字节(含头部):
| 字段 | 长度(字节) | 描述 |
|---|---|---|
| Length Byte | 1 | 块长度指示,表示后续数据的总字节数(不含本字节) |
| Device ID | 2 | 设备标识符,用于区分多设备环境(0~32767) |
| Message ID | 2 | 消息标识符,用于关联属于同一消息的多个块 |
| Block Number | 2 | 块序号,从0开始递增,用于重组和流控 |
| System Bytes | 2 | 系统字节,用于事务匹配和超时管理 |
| Data | 可变(0~244) | 实际数据负载,最大244字节 |
| Checksum | 2 | CRC-16校验和,覆盖整个块(含头部) |
重要约束:单个数据块的最大长度为254字节(Length Byte最大值)。如果上层消息超过244字节(254 - 10字节头部),则必须拆分为多个块进行传输。块序号(Block Number)从0开始,最后一个块的Block Number的最高位(Bit 15)必须置1,表示该块是消息的最后一个块。
4.2.2 块传输流程
SECS-I采用停止-等待(Stop-and-Wait)自动重传请求(ARQ)机制。发送方每发送一个块,必须等待接收方返回确认(ACK)或否定确认(NAK)后,才能发送下一个块。具体流程如下:
- 发送块:发送方将数据块通过RS-232发送给接收方。
- 等待响应:发送方启动超时计时器T3(块传输超时),等待接收方的确认。
- 接收确认:接收方校验块的校验和和格式正确性:
- 如果正确,返回ACK(0x06),发送方继续发送下一个块。
- 如果错误,返回NAK(0x15),发送方重传当前块。
- 超时重传:如果在T3超时内未收到任何响应,发送方重传当前块,最多重试T5次。
- 完成传输:当最后一个块被确认后,消息传输完成。
4.3 多块消息重组(Multi-Block Message Reassembly)
当上层消息长度超过244字节时,SECS-I将其分割为多个数据块进行传输。接收方必须根据块头部信息将这些块重新组装成完整的消息。重组过程涉及以下关键机制:
4.3.1 块头部关键字段
- Message ID:同一消息的所有块共享相同的Message ID,用于标识块属于哪个消息。
- Block Number:块序号从0开始递增,接收方按此顺序重组。最后一个块的Block Number最高位(Bit 15)置1,表示消息结束。
- Device ID:在多设备共享同一物理链路时,用于区分不同设备的消息。
4.3.2 重组算法
接收方维护一个重组缓冲区,按以下步骤处理接收到的块:
- 接收块:从物理层接收一个完整的数据块。
- 校验:验证校验和、Device ID和Message ID的一致性。
- 检查序号:
- 如果Block Number为0,且该Message ID无正在进行的重组,则创建新的重组会话。
- 如果Block Number等于期望的下一个序号,则将数据追加到重组缓冲区。
- 如果Block Number不连续(例如丢失块),则触发错误处理或等待重传。
- 检查结束标志:如果当前块的Block Number最高位为1,则消息重组完成,将完整消息提交给上层协议处理。
- 超时清理:如果重组过程中超过T6超时(消息重组超时),则丢弃已接收的部分数据,并通知上层消息传输失败。
重组示例:假设一个消息被分割为3个块:
- Block 0:Block Number = 0x0000,数据长度 = 244字节
- Block 1:Block Number = 0x0001,数据长度 = 244字节
- Block 2:Block Number = 0x8002(最高位为1),数据长度 = 50字节
4.4 超时与重传机制
SECS-I定义了多个超时计时器,用于处理通信过程中的各种异常情况。这些超时参数是协议可靠性的核心保障,必须根据实际物理链路质量进行合理配置。
4.4.1 超时参数定义
| 超时名称 | 符号 | 默认值 | 触发条件 | 动作 |
|---|---|---|---|---|
| 块传输超时 | T3 | 10秒 | 发送块后未收到ACK/NAK | 重传当前块,最多T5次 |
| 连接超时 | T4 | 60秒 | 建立物理连接后未收到任何数据 | 断开连接,报告错误 |
| 重传次数 | T5 | 3次 | 同一块连续重传次数 | 超过后终止传输,报告错误 |
| 消息重组超时 | T6 | 30秒 | 多块消息重组期间,块间间隔超时 | 丢弃已接收的部分消息 |
| 字符间超时 | T8 | 1秒 | 同一块内两个字符之间的间隔超时 | 丢弃当前块,等待下一个块 |
4.4.2 重传策略
SECS-I的重传机制遵循以下规则:
- 指数退避:每次重传的等待时间可以递增,避免网络拥塞。例如,第一次重传等待T3,第二次等待2×T3,第三次等待4×T3。
- 最大重传次数:由T5参数控制,默认3次。超过后,发送方放弃传输,并向上层报告通信失败。
- 重复块检测:接收方通过Block Number和Message ID检测重复块。如果收到已确认的块,直接丢弃并重新发送ACK。
故障排除要点:在实际测试中,T3超时是最常见的故障点。如果频繁出现T3超时,应检查:
- RS-232电缆长度是否超过15米,信号衰减是否严重。
- 波特率是否匹配,数据位/停止位/校验位配置是否一致。
- 是否存在电磁干扰(EMI),导致数据帧损坏。
- 接收方缓冲区是否溢出,导致无法及时处理接收到的块。
4.5 测试与故障排除实践
在SECS-I协议测试中,以下工具和方法可以帮助快速定位问题:
4.5.1 常用测试工具
| 工具类型 | 推荐工具 | 用途 |
|---|---|---|
| 串口调试工具 | RealTerm, Tera Term, Putty | 监控原始RS-232数据流,查看块帧结构 |
| 协议分析仪 | SECS-I Analyzer, Serial Port Monitor | 解析SECS-I块头部,显示块序号、校验和等 |
| 逻辑分析仪 | Saleae Logic, DSLogic | 捕获RS-232信号电平,分析时序和信号完整性 |
| 模拟器 | SECS-I Simulator, Equipment Simulator | 模拟设备或主机行为,测试协议交互 |