标准概况与适用范围
CAN/CSA Z243.183-89 (R2004) 是加拿大标准协会(CSA)采纳的国际标准,等同采用 ISO 3309:1984《信息处理系统——数据通信——高级数据链路控制(HDLC)规程——帧结构》。该标准最初于1989年发布,2004年经过确认(R2004),目前仍是数据链路层协议设计的重要参考。它定义了 HDLC 规程中使用的帧结构,包括帧的格式、字段含义、透明传输方法以及帧校验序列(FCS)的生成规则。
该标准适用于所有采用 HDLC 规程的数据通信系统,涵盖同步/异步通信、点对点及多点链路、半双工/全双工模式。它是理解 HDLC 及其衍生协议(如 LAPB、LAPD、PPP 的部分机制)的基础,广泛应用于广域网、分组交换网、ISDN 以及工业控制网络。
关键技术要点: CAN/CSA Z243.183-89 聚焦于帧结构本身,不涉及链路控制命令和响应(属于 ISO 4335 范畴)或链路层操作类型(属于 ISO 7809 范畴)。开发者应将本标准与配套标准结合使用以构建完整的 HDLC 实现。
主要技术内容与要求
帧的基本格式
标准规定的HDLC帧包含以下字段:
- 标志序列(F):使用位模式
01111110 作为帧开始和结束的定界符。 - 地址字段(A):长度为 8 比特,可使用扩展进行多字节寻址(取决于是否启用扩展选项)。
- 控制字段(C):长度为 8 或 16 比特,区分信息帧(I帧)、监督帧(S帧)和无编号帧(U帧)。
- 信息字段(I):可变长度(可为 0),承载用户数据或上层协议数据。
- 帧校验序列(FCS):16 位 CRC 校验码,对地址、控制、信息字段进行保护。
- 标志序列(F):同前,结束帧。
帧结构各字段的顺序如下图所示:
| 字段位置 | 字段名称 | 长度(比特) | 说明 |
|---|
| 开头 | F(标志) | 8 | 帧定界符,位模式 01111110 |
| 第2字段 | A(地址) | 8/16/…(可扩展) | 标识数据站地址,单字节或多字节 |
| 第3字段 | C(控制) | 8/16 | 帧类型与序号管理 |
| 第4字段 | I(信息) | 0~n(可变) | 应用层数据(仅I帧必须) |
| 第5字段 | FCS | 16 | CRC-CCITT 生成多项式 G(x)=x^16+x^12+x^5+1 |
| 结尾 | F(标志) | 8 | 帧结束定界符,与开头标志可复用 |
重要注意事项: 帧检验序列(FCS)的计算范围不包括起始标志和结束标志,但包括所有在零比特填充后的插入比特。发送前必须对地址、控制、信息字段以及FCS本身进行零比特填充(发送时)与删除(接收时)。若接收到的FCS计算错误,应丢弃整个帧。
透明传输机制
为保证标志序列的比特模式不出现于帧内数据中,HDLC 采用“零比特填充”技术:发送器在连续五个‘1’之后自动插入一个‘0’;接收器在检测到连续五个‘1’时,若后续为‘0’则删除该‘0’,若为‘1’则视为标志或异常。该机制确保帧内任意位置不会出现大于5个连续的1,从而避免与标志冲突。
安全关键要求: 实现零比特填充逻辑时,必须严格遵循连续五个1后插入/删除0的规则。任何偏差都将导致帧定界错误或校验失败。对于高速链路,建议采用硬件辅助实现以确保实时性。
标志的复用与帧间填充
标准允许两个连续的标志序列之间没有其他数据,即一个标志可同时作为上一帧的结束和下一帧的开始。在空闲链路期间,可连续发送标志序列(01111110)以维持同步,或发送全1作为“空闲信道”标志。
无效帧处理
以下情况被视为无效帧:
- 长度小于7个字节(不包括标志)的帧(即最小帧长要求:地址、控制、FCS三字段共至少2字节地址+控制+2字节FCS,但标准通常定义最小帧长为2字节地址+1字节控制+2字节FCS=5字节?需根据规范:实际最小帧为地址、控制、FCS,但地址和控制可能扩展,所以规定“至少32比特”(不含标志)?应参考:ISO 3309规定有效HDLC帧必须包含至少3个字段(A+C+FCS),长度至少32比特(4字节)。我会按标准原意:帧的最小长度为3个字节(不含标志)?不常见。仔细考察:帧至少由地址、控制、FCS三个字段构成,并且它们的最小长度(若使用单字节地址、单字节控制、2字节FCS)是4个字节(32比特)。因此标准通常规定有效帧长度应≥32比特。我们将此写入FAQ。
- 接收到的FCS检查错误。
- 两个标志之间出现连续七个1(视为“取消”或“异常终止”)。
标准实施的益处: 严格按照CAN/CSA Z243.183-89实现帧结构,可提供:
- 高度的数据透明性,零比特填充确保无限制的数据内容;
- 强大的错误检测能力(16位CRC可检测几乎所有突发错误);
- 与全球大量HDLC设备互操作的能力,因为标准等同于ISO 3309,被广泛采纳。
实施与应用要点
帧类型与配置
虽然在帧结构级未区分帧类型,但控制字段的结构决定了 HDLC 帧的类别:
- 信息帧(I帧):控制字段第1比特为0,包含发送序号N(S)和接收序号N(R),用于顺序编号传输。
- 监督帧(S帧):控制字段前2比特为10,包含接收序号N(R)和2种功能位(RR、RNR、REJ、SREJ)。
- 无编号帧(U帧):控制字段前2比特为11,用于链路管理、模式设置等。
实施时需要根据所使用的链路层协议(如LAPB、LAPD、SDLC等)确定控制字段的长度(8比特或16比特)和帧类型编码。
FCS 计算的实现
标准采用的生成多项式为 CRC-CCITT(x^16 + x^12 + x^5 + 1)。发送端对字段(包括填充后的比特)进行除法运算,初始值为全1,余数取反后作为FCS;接收端进行相同除法,初始全1,若余数为固定值(0xF0B8)则校验正确。注意:零比特填充处理在FCS之前进行,接收端先删除填充再校验。
扩展选项
标准允许地址字段和控制字段扩展:
- 地址扩展:通过将地址字节的第0位(最低位)设为0表示后续字节仍是地址,设为1表示最后一个字节。可形成多字节地址。
- 控制扩展:信息帧和部分无编号帧可以扩展为16比特(包含完善的序号和保护位)。
扩展选项必须在链路建立阶段协商一致。
实用提示: 在嵌入式系统中实现HDLC时,建议将帧发送/接收状态机与零比特填充逻辑分离。使用DMA控制器完成比特填充/删除可以显著降低CPU负载。同时确保FCS校验的硬件加速可提升吞吐量。
与其他标准的关系
- ISO 3309:1984 — 本标准采用的国际标准基础,内容完全等同。
- CAN/CSA Z243.185-89 (R2004) — HDLC 规程要素(等同 ISO 4335),定义命令/响应和异常处理。
- CAN/CSA Z243.184-89 (R2004) — HDLC 规程类别(等同 ISO 7809),定义链路层操作模式(NRM、ABM、ARM)。
- ISO/IEC 13239:2002 — 更新的 HDLC 标准,合并了帧结构、规程要素和类别,但本标准仍然有效作为基础参考。
- CAN/CSA Z243.100 系列 — 加拿大对应的信息处理标准框架。
常见问题与解答
问: HDLC 帧的最小长度是多少?
答: 根据 CAN/CSA Z243.183-89,有效帧必须包含至少 3 个字段:地址(A)、控制(C)和帧校验序列(FCS)。在非扩展模式下,最小长度为 8±1? 准确说是:地址不小于 8 比特,控制 8 比特,FCS 16 比特,因此最小总长度为 32 比特(4 字节)。部分实现要求帧完全包含起始标志和结束标志之间的所有比特,零填充后总长度应 ≥40 比特(5 字节)。当启用扩展寻址或扩展控制时,最小相应增加。
问: 零比特填充是否影响 FCS 的计算?
答: 是。标准的做法是:发送端先对 A、C、I 字段(原始数据)计算 FCS,然后将计算结果附加到数据后作为 FCS 字段。最后对整帧(包括 A、C、I 和 FCS)进行零比特填充后才发送。接收端则先对收到的比特流执行零比特删除(即去除连续五个1后的0),还原出原始帧内容(包括原始 FCS),然后再对还原后的字段进行 FCS 校验。确保填充/删除过程与校验完全对称。
问: CAN/CSA Z243.183-89 与 ISO 13239 有何区别?
答: ISO 13239:2002 是较晚的版本,它合并并取代了 ISO 3309、ISO 4335 和 ISO 7809 等多个标准。CAN/CSA Z243.183-89 基于 ISO 3309:1984,仅专注帧结构,范围较窄。两者在核心技术内容上兼容,但 ISO 13239 增加了 32 位 FCS 选项、更大帧长度、以及一些现代通信的适应性。对于现有符合 CAN/CSA Z243.183 的系统,能与遵循 ISO 13239 的设备互操作,但需要确保选项匹配。
问: 在多点链路中,地址字段使用单字节还是多字节有何影响?
答: 单字节地址可标识最多 2^7 = 128 个主站或次站(一位用于扩展标志或命令/响应指示)。多字节地址(扩展模式)可支持更多地址,但增加开销。实际使用中标准并未强制,需在系统设计时根据网络规模选择。多字节寻址过程中,每个地址字节的第一位(LSB)为0表示地址继续,为1表示地址终止。
本文参考标准文件: CAN CSA Z243.183-89 (2004) | 版权 © 2026 标准技术解析