答案 0 :(得分:6)
如果你愿意,整个比特集合就是一个数据包。否则,起始位和停止位与数据位无法区分。比如说你有一个起始位,一个停止位,没有奇偶校验和8个数据位。这意味着存在低位(开始)8个数据位(可以是256种组合中的任何一种)和高位(停止)。接收器必须被告知这是8N1所以它正在寻找低,8位和高,如果它没有看到它然后它没有锁定数据,并且很可能它基本上丢弃了第一位,转移再一次,然后寻找一个开始和停止8中间。一旦它看到它然后它假定它是真实数据并允许字节/字符进入接收缓冲区。如果接下来的10位没有那个开始8位停止模式,那么这是一个帧错误,它再次开始搜索。所以,如果这种模式出现
000000000000011111
前10位没有启动和停止
0000000000
所以丢弃第一个零并重试
00000000000011111
0000000000
不,仍然没有开始和停止
重复此过程,直到串行流转换为这样
00000000011111xxxxxxxxxxx
0000000001
我们有一个开始,8位和一个停止,所以我们认为一个好的字符0x00在rx缓冲区中保存0x00。
从停止位后的下一位开始,我们采用下一个10
1111xxxxxxxxxxx
并且不以起始位开始,因此这是一个成帧错误
1111xxxxxx
我们返回搜索8位起始位和停止位。
如果你使用奇偶校验位然后它是相同的,但你不仅需要一个启动和停止,但你需要中间的位具有一定的奇偶校验,偶数或奇数。所以要获得一个好的字符,你需要启动,一些具有正确奇偶校验位和停止位的位,然后你可以提取字符并在停止位之后寻找另一个起始位。