一、HSMS协议概述
各位同学,今天咱们来聊聊HSMS。说实话,这个协议在半导体设备自动化里,就像人的神经系统一样关键。我做了十几年设备自动化,见过太多因为HSMS没搞明白导致产线停摆的案例。嗯,咱们先从最基础的概念说起。
1.1 HSMS在半导体设备自动化中的角色
HSMS,全称是High-Speed SECS Message Services。说白了,它就是SECS-II消息在TCP/IP网络上的传输通道。你想想看,在半导体工厂里,上百台设备要跟主机(Host)通信,总不能每台都拉根RS-232串口线吧?
HSMS解决了三个核心问题:
- 高速传输:相比老旧的SECS-I(串口),HSMS跑在以太网上,速度从9600bps直接跳到100Mbps甚至更高
- 连接管理:设备可以随时上线、下线,主机能同时管理几百个连接
- 消息可靠性:TCP/IP协议栈保证了数据不丢包、不乱序
核心观点:HSMS不是取代SECS-II,而是给SECS-II换了一条高速公路。消息内容还是SECS-II的格式,只是传输方式从串口变成了网络。
我在一个12寸晶圆厂的项目里遇到过这样的情况:设备端和主机端明明都支持HSMS,但就是连不上。查了两天,最后发现是端口号配错了。这种低级错误,其实很常见。
1.2 HSMS与SECS-II的关系
很多新手会混淆这两个概念。我习惯用一个比喻来解释:
| 层次 | 比喻 | 职责 |
|---|---|---|
| SECS-II | 信封里的信 | 定义消息内容(S1F13、S2F41等) |
| HSMS | 邮递员+卡车 | 负责把信安全送到目的地 |
SECS-II定义了消息的格式和含义,比如S1F13是"建立通信请求",S1F14是"建立通信确认"。而HSMS负责把这些消息打包成TCP数据包,发出去,再收回来。
我的经验:调试时先确认SECS-II消息格式对不对,再查HSMS连接。很多人一上来就抓TCP包,其实90%的问题出在SECS-II消息体上。
1.3 HSMS协议栈模型
HSMS的协议栈分四层,我画了一张图,你看完就明白了:
从上往下看,每一层都依赖下一层提供服务。我调试时有个习惯:先确认IP层通不通(ping一下),再确认TCP端口能不能连(telnet一下),最后才看HSMS消息对不对。
1.4 HSMS消息类型
HSMS定义了三种消息类型,这个必须记住:
| 消息类型 | 代码 | 用途 | 方向 |
|---|---|---|---|
| Data Message | 0x00 | 传输SECS-II数据 | 双向 |
| Select.req / Select.rsp | 0x01 / 0x02 | 建立通信会话 | 设备→主机 |
| Deselect.req / Deselect.rsp | 0x03 / 0x04 | 断开通信会话 | 设备→主机 |
| Linktest.req / Linktest.rsp | 0x05 / 0x06 | 连接保活检测 | 双向 |
| Reject.req | 0x07 | 拒绝非法消息 | 双向 |
| Separate.req | 0x09 | 正常断开连接 | 双向 |
避坑指南:我曾经遇到一个案例,设备每隔30秒发一次Linktest.req,但主机端没响应。结果设备认为连接断了,自动重连,导致产线频繁中断。后来发现是主机端的Linktest超时设置太短。记住:Linktest的间隔和超时要匹配,一般建议间隔30-60秒,超时设成间隔的3倍。
1.5 HSMS连接状态机
HSMS的连接管理是一个有限状态机,有四个状态:
- Not Connected:TCP连接未建立,啥也干不了
- Connected:TCP已连接,但还没建立HSMS会话
- Selected:HSMS会话已建立,可以收发SECS-II消息
- Retry:连接失败,等待重试
状态切换的规则其实不复杂:
Not Connected → (TCP连接成功) → Connected
Connected → (发送Select.req并收到Select.rsp成功) → Selected
Selected → (发送Separate.req或TCP断开) → Not Connected
Connected → (超时或失败) → Retry → (等待重试) → Not Connected
嗯,这里要注意:从Connected到Selected,必须由设备端发起Select请求。主机端不能主动Select,这是SEMI标准规定的。我见过有厂商搞反了,结果设备死活连不上。
实战要点:调试HSMS连接时,我建议先抓一个完整的Select流程包看看。正常的Select.req里,消息头中的Session ID应该是0xFFFF,Device ID在消息体里。如果Session ID不对,主机端会直接Reject。