Att*_*tie 10
串行通信中的起始位和停止位是可选的吗?
不。
假设 RS232(或其 TTL 变体)。
独立考虑每个“方向”,忽略流控制线。有一个信号,它必须以某种方式传送“数据”,但它也必须能够传送“无数据”。
为了传达“无数据”,我们干脆把信号留为高电平——逻辑1。可以无限期这样,大家都开心。
一旦我们想传送“数据”,我们就必须通知远程端,只使用这个二进制信号,数据即将到来。
如果我们不使用起始位并传输0b11110000,它看起来像这样(灰色是空闲的,绿色是活动数据):
但是……接收方如何知道开始接收?它看起来与0b00111100:
因此,相反,我们在前面放置了一个已知的“这是开始”位:
杰出的!
但是现在我们遇到了另一个问题……没有两个时钟以完全相同的速率走动。对于不起眼的 UART,这是事先商定的——链路的两端都以几乎相同的速度“交谈”……
为了让链接有更好的工作机会,我们引入了一个“停止位”,它实际上只是一个休息......暂停。两个停止位通常用于较旧的硬件,它们需要更长的时间来处理接收到的字节——一个停止位在今天几乎无处不在。
正如@sawdust 好心地提醒我的那样,停止位对于确保我们能够在一帧结束和下一帧开始时成功检测和同步也很重要。如果第一帧以零结束,紧接着第二帧的起始位,这将是困难的。
... 我们终于得到它了!一个很好的框架数据。
奇偶校验是可选的,因为它与确保数据的完整性有关 - 便于检测损坏。世界上没有什么是完美的(有时我很惊讶任何东西都有效),并且知道您刚刚收到的数据是否有效非常有帮助。
不幸的是,规范很旧,奇偶校验位只允许我们检测奇数次的位翻转。如果有偶数个位翻转,则奇偶校验无法检测到这一点。
今天,我们拥有更先进的错误检测、甚至更正技术,它们能够检测(甚至更正)一定数量的损坏。
今天在 UART 上运行的协议通常不使用奇偶校验位,而是更喜欢使用校验和来确保传输数据的完整性。
您还会经常看到用于与设备(串行控制台)连接的 UART。在这种情况下,设备与人类交互,人类不会注意到或不在乎数据已损坏(他们可以重新运行命令)。
最后,今天的 UART 通常用于非常短的链接,具有良好的强大驱动程序 - 在物理(电气)级别上制造噪音和损坏的问题要少得多。
| 归档时间: |
|
| 查看次数: |
1306 次 |
| 最近记录: |