前言
前面我们介绍过编码规则,强调了时钟对于收发双方的重要性。有单独的时钟信号,称作同步,无单独的时钟信号称作异步。
文章目录
前言1. 同步通信2. 异步通信2.1 ModbusRTU2.2 HDLC
3. 例题4. 小故事-为何1个字符包含7个数据位后记修改记录
1. 同步通信
同步通信是一种数据传输方式,其中发送方和接收方使用相同的时钟信号来协调数据的发送和接收。
发送方和接收方共享同一个时钟信号,这个时钟信号可以是外部提供的,也可以由发送方生成并随数据一起传输。
由于不需要额外的起始位和停止位来标记每个字符的边界,同步通信可以实现更高的数据传输效率。
USB是一个很好的例子,通常,主机负责生成时钟信号,并通过这个时钟信号来协调外设的数据传输。
2. 异步通信
在异步通信中,我们除了需要区分波特率,还要知道字符的起始和终止位置。整个异步通信领域,基本上都采用了在字符之间插入同步信息的方式,也就是插入起始位、停止位来实现异步通信。
这里,我们举两例。
2.1 ModbusRTU
这是一个简单的工业上的通讯协议,它在传输每个字符的时候可以指定起始位、数据位、停止位、奇偶校验:
2.2 HDLC
HDLC(高级数据链路控制)是一种链路层协议的国际标准,旨在实现远程用户间资源共享以及信息交互。
HDLC的起始标志和终止标志都是特殊的八位序列 01111110(十六进制为 0x7E),这个序列用于界定HDLC帧的开始和结束。
至于为什么是 01111110 (7E) 也有个说法,它包含六个连续的“1”,这在正常的数据流中出现的概率相对较低,所以拿它作为一中标志。
为啥它在当时出现的概率相对较低呢?因为在 ASCII 编码中可显示字符的最后一个,也就是波浪号 ~ 的ASCII编码对应 7E ,再往后就是一个不可见的控制字符 DEL ,也就是 7F 了。故采用 7E 是颇为合理的选择。
您可参考:《ASCII码对照表》
决定了使用 7E ,也就是6个连续的1之后,HDLC不得不进行零比特填充,不过这都是后话了,咱们之后再详细讨论HDLC。
3. 例题
在异步通信中,每个字符包含1个起始位,7个数据位,1个奇偶校验位和1个终止位,每秒传输100个字符,采用DPSK调制,则码元速率为?有效数据速率为多少?
解: 使用奈奎斯特定理
R
=
B
⋅
log
2
N
100
⋅
(
1
+
7
+
1
+
1
)
=
B
⋅
log
2
2
B
=
1000
B
a
u
d
R = B \cdot \log_2N \\ 100 \cdot (1+7+1+1) = B \cdot \log_2{2} \\ B = 1000 Baud
R=B⋅log2N100⋅(1+7+1+1)=B⋅log22B=1000Baud
由于除数据位以外,都是为了同步、差错校验而存在,所以要乘以一个数据位占整个字符的比值:
1000
b
p
s
×
7
10
=
700
b
/
s
1000 bps \times \frac{7}{10} = 700 b/s
1000bps×107=700b/s
4. 小故事-为何1个字符包含7个数据位
为什么异步传输时,一个字符常常包含7bit或8bit数据位呢?
这里我们先引用 《rfc20》 :
Network Working Group Vint Cerf
Request for Comments: 20 UCLA
October 16, 1969
ASCII format for Network Interchange
For concreteness, we suggest the use of standard 7-bit ASCII embedded
in an 8 bit byte whose high order bit is always 0. This leads to the
standard code given on the attached page, copies from USAS X3, 4-
1968. This code will be used over HOST-HOST primary connections.
Break characters will be defined by the receiving remote host, e.g.
SRI uses "." (ASCII X'2E' or 2/14) as the end-of-line character,
where as UCLA uses X'OD' or 0/13 (carriage return).
USA Standard Code for Information Interchange
1. Scope
This coded character set is to be used for the general interchange of
information among information processing systems, communication
systems, and associated equipment.
这篇规范记录了 ASCII 编码早期,是仅使用一个字节中的 7个比特,而且当时传输数据最重要就是传输人与人之间的书信,所以异步传输的字符中的数据位好多就定义成7比特。
我们知道,今天的 ASCII 码已经是8比特了,码表相比于早期扩展了很多内容,故现在异步传输数据位会默认给你 8bit 的配置。
当然了,处在物联网时代,我们更多地会用异步传输去传输传感器的采集值,对于采集值来说,7也好,8也罢,都对于传输没有太多的影响。
后记
大家也可以参考郭天祥老师的3分钟短视频来熟悉这种同步、异步的感觉:认识异步通信和同步通信
文中有任何错误、遗漏,烦请各位老铁在评论区指出,共同学习进步。
修改记录
更新日期修改内容2025年4月5日完成初稿2025年8月8日增加了异步传输一个字符包含7个比特的由来