【问题标题】:UART programming in C on Linux plateform and parity bitLinux平台上的C语言UART编程和奇偶校验位
【发布时间】:2017-11-22 17:15:16
【问题描述】:

我对 UART 编程还很陌生,并试图理解奇偶校验位的概念,这对我来说仍然不完全清楚。

据我所知:

假设我有 8 位要从 UART 设备 A 传输到 UART 设备 B。每次我想向 deviceB 发送一个字节时,都会发送一个起始位,然后是 8 位,然后是奇偶校验位,然后是停止位。好的,这很清楚。现在,当 deviceA 设置为使用奇校验时,如果字节中 1 的数量为奇数,则奇偶校验位设置为 0。如果 deviceA 设置为偶校验,则相反。好的,我也明白了。

现在,当设备 B 接收到帧时,它会检查发送的字节,奇偶校验位是否与字节中的数字 1 一致,如果不是则存在奇偶校验错误。但是这个设备B,也有奇偶校验模式。

所以我的问题是:

是否应该将 deviceA 和 deviceB 设置为相同的奇偶校验模式(偶数或奇数)以使此控件按预期工作还是我错了?

感谢您为澄清这一点提供的任何帮助。

【问题讨论】:

  • 是的,它们都需要使用相同的奇偶校验。奇偶校验模式不是通过串口传输的东西。
  • 不,你是对的....但是这句话应该是DeviceA和deviceB必须设置为相同的奇偶校验模式...顺便说一句,怎么可能不同?...
  • 发送器和接收器的波特率和字格式必须相同。
  • 我投票结束这个问题,因为这是一个硬件问题,而不是软件问题。
  • @ThingyWotsit:如果 UART 支持 9 位模式或仅使用 7 个数据位并且它支持 8 位模式(曾经很常见),则可以手动生成奇偶校验位。很多 UART 都支持两者。

标签: uart parity


【解决方案1】:

您已经非常清楚地理解了平价的概念。这是一种消除位序列传输过程中可能发生的错误的方法。

所以两个设备都应该知道正在使用哪个奇偶校验,因此1 的数量在发送和接收时应该保持不变。如果您为不同的机器定义不同的奇偶校验,那么两者对位含义的理解会有所不同。

通过此表,您可以了解奇偶校验位如何随同一个数的奇偶校验而变化。 希望这会有所帮助:)

【讨论】:

  • 我说这是一种方式来消除。我没有说它消除了错误。奇偶校验位肯定用于错误检测和再次发送信号
  • @也许我们有不同的字典来定义“消除”。你应该发布你的定义。奇偶校验也不会发回任何东西(实际上没有任何意义)。你可能有正确的想法,但你的工作很混乱。
  • @Olaf 你理解错了,如果检测到奇偶校验错误,则信号将再发送一次。
  • 不,不会。 1) UART 本身不发送任何响应,除了握手。 2)这取决于更高级别的协议。没有自动化,也没有要求,大多数基于 UART 的协议也不是这样工作的。 3)作为旁注:符号奇偶校验在 UART 通信中并不是真正有用的。这是一个时代错误。
  • @sawdust:实际上这是他们这些天能得到的最好的。奇偶校验源自与特殊设备的纯硬件串行通信。很长一段时间没有使用CPU/MCU。直到 70 年代单片微处理器出现之前,这同样有效。由于比特率较慢,这是可以接受的。但即使是 9600b/s,它也变得有问题,在更高的比特率下,即使在 8 位 MCU 上超过 20 年,它也绝对是不可行的。就可靠性开销而言,与例如也是一个简单的 CRC16。
猜你喜欢
  • 2019-01-14
  • 2015-06-29
  • 2013-03-05
  • 2015-12-03
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
  • 2017-03-01
相关资源
最近更新 更多