03、SECS-I 协议介绍

SECS-I属于传输协议标准,主要定义了电气规格、传输速度、交握码等物理信息。

1、SECS-I 基础介绍

1.1 物理传输单位 bit

SECS-I 定义了使用RS-232作为传输媒质时点到点的数据通信。实际的传输由8位Bit连续发送,有一个开始位和一个停止位。

通信是 双向和异步的,但是同一时间只能有一个方向的数据进行传输方向由特殊字符和握手建立,然后发送数据本身。

03、SECS-I 协议介绍-LMLPHP

1.2 逻辑传输单位 Block

数据被分块进行传输,每个数据块最大为 254 字节。一个消息是一个方向完整的通信单元,由1到32,767个块组成。每个块标头都包含用于标识该块作为特定消息的一部分的信息。

1.3 Block的组成

一个Block包括一个Length Byte、N Data Bytes 和 CheckSum

  • LengthByte:表示随后有多少个字节的数据(即 N bytes),不包括最后 2个字节的校验和
  • CheckSum:计算N Data Bytes的校验和;
  • N Data Bytes:Block中的数据,长度范围是 10 至 254 字节,它由十个字节的头和消息数据组成。

Data Bytes 由 10 byte Header 和 Message Data 组成:

  • MessageData:表示Data Bytes中的数据部分,由编码后的 SECS-II 消息构成
  • 10 byte Header:描述Data Bytes中的数据内容。

10 byte Header 由 4个内容组成,其中:

  • Device ID:Header的第一和第二字节,其第一个比特为 R-bit,其作用是指出消息传输的方向。
  • Message ID:Header的第三和第四字节,其第一个比特为 Wait-bit,用于指示消息的发送者是否需要回复。
  • Block No.:Header的第五和第六字节,其第一个比特为 End-bit,用于指示这个是否是消息的最后一个块。
  • System Bytes:Header的最后四个字节,第七和第八字节表示 source ID,用于表示消息的发送者,第九和第十字节表示 transaction ID,用于唯一标示每个发送的消息

我们一起看看 Block 的组成:

03、SECS-I 协议介绍-LMLPHP

我们一起看看 Header 的组成:

03、SECS-I 协议介绍-LMLPHP

1.4 Block的传输

块的传输过程,先传输块的长度,再传输块,最后发送校验码。

标准建议每次可传输的Date Bytes字节最多为254,如果一个消息的大小<245个字节,则以一个块的形式进行传输。如果一个消息的大小> 245个字节,则以分块的形式进行传输。

03、SECS-I 协议介绍-LMLPHP

2、SECS-I Block Transfer Protocol

03、SECS-I 协议介绍-LMLPHP

从上图中,我们可以得知,SECS-I 使用的是块传输协议。

块传输协议用于建立通信的方向,并为传递消息块提供环境。主消息或回复消息可能需要多个块传输(多块消息)。

2.1 Handshake Sequence(握手顺序)

看到这个,是不是想起来 TCP 建立连接时的三次握手。这里的作用是 TCP 的三次握手差不多,用于确认通信双方已经准备就绪。那接下来我们一起看看 Block Transfer Protocol 的握手顺序是怎么做的。

Block Transfer Protocol 中的握手顺序是主机和设备之间的字节交换

那既然是字节交换,交换的是哪些字节的呢?

Handshake Codes(握手码):

SECS-I Parameters

  • T1: 在接受 BLOCK DATA时,接收到每个字符的时间间隔(从接收到第一个字符后开始计算)
  • T2: 发送 ENQ 和接收到 EOT 之间的时间间隔

03、SECS-I 协议介绍-LMLPHP

  • RTY: 这里说说我的理解,这里就是当使用 ENQ 开始发送后,接收到了 NAK 或者其他的错误(比如超时等),就会重新发送 ENQ,重新发送的最大次数是 RTY。
  • Master/Slave: 用于解决争议。主机是 slave ,设备是 master。争论是指主机和设备同时尝试进行通信。下面显示了如何解决争论

03、SECS-I 协议介绍-LMLPHP

2.2 Block Data

2.2.1、块数据简介

块数据是单块或多块消息的数据部分。它包含一个Length Byte(长度字节), N Data Bytes(N个数据字节)和a two byte Checksum(一个两个字节校验和)

03、SECS-I 协议介绍-LMLPHP

接下来,我们对上面的图进行逐一的讲解:

  • Length Byte:是在块数据中发送的第一个字节。它是N个DAta Bytes(10 Byte Header + Data Structure)中的字节数。两个字节校验和不包括在这个计数中,值范围为10到254字节。这里要注意的是,Length Byte 占用一个字节
  • N Data Bytes: 是消息块的数据部分。它包含一个10字节的报头和消息数据。大小范围从10字节到254字节。N个数据字节的最小为10(只包含10字节的字节头),最大为254。
  • Message Data: 是消息的数据部分。它包含已编码的SECS-II的全部或部分(如果是多块消息)。这里需要注意的是,发送的是多块消息时, Message Data 只包含了已编码的 SECS-II 的部分。
2.2.2、10 字节的Header

每个消息都包含一个报头。标头用于描述包含在块数据中的数据。它包含 Device ID, Message ID, Block Number, and System Bytes(设备ID、消息ID、块号和系统字节)。其他重要指标也包括在内。

接下来,我们一起来看看 Header 的 4 个组成部分:

  • Device ID: 报头的第1个和第2个字节是设备ID。左字节是上设备ID,右字节是下设备ID。左字节中最左边的位是反向位(R位)。R-位决定了消息的方向。

03、SECS-I 协议介绍-LMLPHP

  • Message ID: 报头的第3个字节和第4个字节是消息ID。左字节是上消息ID,右字节是下消息ID。左字节中最左边的位是等待位(W位)。w位用于表示主消息的发送方是否期望得到回复。

03、SECS-I 协议介绍-LMLPHP

  • Block Number:
报头的第5个字节和第6个字节表示块号。左字节是 upper block number,右字节是  lower block number。左字节中最左边的位是结束位(E位)。E位表示这是否是消息的最后一个块。

当发送的消息需要多个块时,将使用多块消息。每个块都是数字并且是有序的(这里的数字应该指的是块的序号)。由于消息的接收者不知道一共发送了多少个块,所以使用 e位 指示当前块是不是最后一个块,不会最后一个块的话,后面还会有块发送过来。多块消息中的最大块数为32,767个。

03、SECS-I 协议介绍-LMLPHP

  • System Bytes: 报头的最后四个字节system bytes(系统字节)。左边的两个字节是 source ID(源ID),右边的两个字节是 transaction ID(事务ID)。源ID标识消息的发送方,并用于消息路由。事务ID标识该消息,并且对于所发送的每个消息都是唯一的。在其关联应答处的主消息具有相同的(匹配的)系统字节。最后一句话如何理解呢?它的意思是,回复的消息的 System Bytes 和 发送的消息的 System Bytes 是相等的。

03、SECS-I 协议介绍-LMLPHP

上面我们对 SECS-I 使用到的 Block Transfer Protocol 有了初略的了解。接下来,一起看看 如何发送 S1F1 指令,以及对应的回复指令 S1F2。

3、Example of S1F1 / S1F2

下面显示了在发送primary message和接收secondary reply message时传输的字节。这不是一个多块的消息。主机发送S1F1,设备发送S1F2应答。

03、SECS-I 协议介绍-LMLPHP

4、Typical SECS Protocol Parameters

这一节内容我们将一起看看Typical SECS Protocol Parameters(典型的SECS协议参数)

下面是 SECS-I / SECS-II 协议参数的摘要集,以及一些典型的值。

参考资料:

SECS半导体设备通讯-1 SECS的基本概念

05-25 05:47