启动和停止位(串行通信)

use*_*006 4 communication serial-communication bit

  1. 如果串行通信中没有启动和停止位,会发生什么?
  2. 启动和停止位有什么用?

old*_*mer 6

如果你愿意的话,整个比特集合就是一个数据包.否则,起始位和停止位与数据位无法区分.比如说你有一个起始位,一个停止位,没有奇偶校验和8个数据位.这意味着存在低位(开始)8个数据位(可以是256种组合中的任何一种)和高位(停止).接收器必须被告知这是8N1所以它正在寻找低,8位和高,如果它没有看到它然后它没有锁定数据,并且很可能它基本上丢弃了第一位,转移再一次,然后寻找一个开始和停止8中间.一旦它看到它然后它假定它是真实数据并允许字节/字符进入接收缓冲区.如果接下来的10位没有那个开始8位停止模式,那么这是一个帧错误,它再次开始搜索.所以,如果这种模式进来

000000000000011111

前10位没有启动和停止

0000000000

所以丢弃第一个零,然后再试一次

00000000000011111

0000000000

不,仍然没有开始和停止

这种情况一直重复,直到串行流转换为这样

00000000011111xxxxxxxxxxx

0000000001

我们有一个开始,8位和一个停止,所以我们认为一个好的字符0x00在rx缓冲区中保存0x00.

从停止位后的下一位开始,我们接下来的10位

1111xxxxxxxxxxx

并且这不是以起始位开始,因此这是一个帧错误

1111xxxxxx

我们回去寻找8位的起始位和停止位.

如果你使用奇偶校验位然后它是相同的,但你不仅需要一个启动和停止,但你需要中间的位具有一定的奇偶校验,偶数或奇数.所以为了获得一个好的字符,你需要启动,一些具有正确奇偶校验位和停止位的位,然后你可以提取字符并在停止位之后寻找另一个起始位.