2. SECS-I物理层与数据链路层:RS-232C接口标准、SECS-I帧格式(Block、Message)、校验和计算、多块消息传输机制
SECS-I(SEMI Equipment Communications Standard 1)是SECS/GEM协议栈中最底层的通信标准,定义了物理层和数据链路层的规范。它基于经典的RS-232C串行通信接口,并在此基础上构建了面向半导体设备的消息帧结构。理解SECS-I是掌握整个SECS/GEM协议体系的基础,也是进行底层通信故障排除的关键。
2.1 RS-232C接口标准与SECS-I物理层
SECS-I物理层直接采用RS-232C标准,定义了主机(Host)与设备(Equipment)之间的电气特性、机械连接和信号定义。虽然RS-232C在现代工业中逐渐被USB或以太网取代,但在半导体设备领域,其简单、可靠的点对点通信特性仍被广泛保留。
2.1.1 电气特性与信号定义
RS-232C使用非平衡(单端)传输方式,信号电压相对于信号地(GND)进行测量。SECS-I强制要求使用以下关键信号线:
| 信号名称 | DB-25引脚 | 方向(Host→Equip) | 功能描述 |
|---|---|---|---|
| TX (Transmitted Data) | 2 | Host → Equip | 主机发送数据给设备 |
| RX (Received Data) | 3 | Host ← Equip | 主机接收来自设备的数据 |
| RTS (Request To Send) | 4 | Host → Equip | 主机请求发送(硬件流控) |
| CTS (Clear To Send) | 5 | Host ← Equip | 设备允许主机发送(硬件流控) |
| GND (Signal Ground) | 7 | — | 信号地参考点 |
2.1.2 波特率与通信参数
SECS-I标准定义了固定的通信参数,以确保不同厂商的设备能够互操作:
- 波特率:9600 bps(标准值,部分设备支持19200或38400)
- 数据位:7位(ASCII字符集)
- 校验位:偶校验(Even Parity)
- 停止位:1位
- 流控制:硬件流控(RTS/CTS)
2.2 SECS-I帧格式:Block与Message
SECS-I数据链路层将上层(SECS-II)的消息封装成帧进行传输。帧的基本单位是Block(块),一个或多个Block组成一个Message(消息)。
2.2.1 Block帧结构
每个Block由10个字节(Byte)组成,固定长度为10字节。其结构如下:
| 字节偏移 | 字段名称 | 长度(字节) | 描述 |
|---|---|---|---|
| 0 | Length Byte | 1 | 表示后续数据字节数(通常为9) |
| 1 | Device ID / Control Byte | 1 | 高7位为设备ID,最低位为R-bit(回复位) |
| 2 | Message ID (Low) | 1 | 消息ID的低8位 |
| 3 | Message ID (High) | 1 | 消息ID的高8位 |
| 4 | Block Number | 1 | 当前Block在Message中的序号(0~127) |
| 5 | System Bytes | 2 | 系统字节,用于消息匹配与超时控制 |
| 7 | Data[0] | 2 | 数据载荷的前2个字节 |
| 9 | Checksum | 1 | 校验和(对字节0~8进行异或运算) |
- Length Byte:固定为0x09(9),表示后续9个字节为有效数据。
- Device ID:用于区分总线上的不同设备,范围0~127。
- R-bit:0表示需要回复(Reply),1表示不需要回复。
- Block Number:最高位(bit 7)为E-bit(结束位),0表示还有后续Block,1表示这是最后一个Block。
2.2.2 Message与多块传输机制
当SECS-II消息的数据长度超过2字节时,需要将消息拆分为多个Block进行传输。多块消息的传输遵循以下规则:
- 第一个Block:Block Number = 0,E-bit = 0。
- 中间Block:Block Number = 1, 2, 3...,E-bit = 0。
- 最后一个Block:Block Number = N,E-bit = 1。
- 数据重组:接收方根据Block Number顺序重组数据,当收到E-bit=1的Block时,表示消息完整。
以下SVG图展示了单个Block与多块消息的帧结构对比:
2.3 校验和计算
SECS-I使用异或(XOR)校验和来检测传输错误。校验和字段(Checksum)是对Block中前9个字节(字节0~8)进行逐字节异或运算的结果。
2.3.1 计算规则
- 初始化校验和变量为0x00。
- 依次对字节0到字节8进行异或运算:
checksum = checksum XOR byte[i]。 - 将最终结果写入字节9(Checksum字段)。
2.3.2 计算示例
假设一个Block的前9个字节为:09 81 01 00 00 12 34 56 78,计算其校验和:
初始值: checksum = 0x00
第1步: checksum = 0x00 XOR 0x09 = 0x09
第2步: checksum = 0x09 XOR 0x81 = 0x88
第3步: checksum = 0x88 XOR 0x01 = 0x89
第4步: checksum = 0x89 XOR 0x00 = 0x89
第5步: checksum = 0x89 XOR 0x00 = 0x89
第6步: checksum = 0x89 XOR 0x12 = 0x9B
第7步: checksum = 0x9B XOR 0x34 = 0xAF
第8步: checksum = 0xAF XOR 0x56 = 0xF9
第9步: checksum = 0xF9 XOR 0x78 = 0x81
最终校验和: 0x81
2.4 多块消息传输机制详解
当SECS-II消息的数据长度超过2字节时,SECS-I必须将数据拆分为多个Block进行传输。多块消息的传输涉及发送方和接收方之间的协调机制。
2.4.1 发送流程
- 拆分数据:将SECS-II消息数据按每2字节一组进行拆分,最后一组可能不足2字节。
- 构建Block:为每个数据组构建一个10字节的Block,设置正确的Block Number和E-bit。
- 顺序发送:按Block Number从小到大的顺序依次发送每个Block。
- 等待确认:发送完最后一个Block后,等待接收方的确认(ACK/NAK)。
2.4.2 接收流程
- 接收Block:逐个接收Block,检查校验和和帧格式。
- 检查E-bit:若E-bit=0,则继续等待下一个Block;若E-bit=1,则开始重组消息。
- 重组数据:按Block Number顺序提取Data字段,拼接成完整的SECS-II消息数据。
- 发送确认:若所有Block接收正确,发送ACK;否则发送NAK并请求重传。
以下SVG图展示了多块消息的发送与接收流程:
2.5 故障排除要点
- 物理层故障:检查RS-232C电缆连接、电压电平、波特率设置是否匹配。
- 帧格式错误:使用串口抓包工具(如Serial Port Monitor)捕获原始数据,检查Length Byte是否为0x09,Block Number是否连续。
- 校验和错误:在测试工具中实现校验和自动计算与验证功能,快速定位错误Block。
- 多块消息超时:检查T3(Reply Timeout)和T5(Connect Timeout)定时器设置,确保接收方有足够时间处理多块消息。
2.6 本章小结
SECS-I作为SECS/GEM协议栈的底层基础,其RS-232C物理层和帧结构设计直接影响了上层协议的可靠性和效率。掌握Block帧格式、校验和计算方法以及多块消息传输机制,是进行SECS/GEM协议测试与故障排除的前提。在实际测试中,应重点关注物理层连接质量、帧格式正确性和校验和一致性,这些是确保通信稳定的关键因素。