networking - 串行通信波特率、奇偶校验和停止位。使用哪些选项以及何时使用?

标签 networking serial-communication baud-rate parity

我正在尝试为我即将开始的新工作获取一些串行通信。我已经阅读了一些内容,这对您有很大帮助,但是,很多阅读内容告诉您有关串行通信的规范以及一切是什么,但没有告诉您何时最好使用特定选项。

到目前为止,我对这些信息的搜索似乎只涉及规范;也许作为一个新手,我正在寻找错误的术语。

那么我的问题!

波特率 - 我读过这是每秒的信号变化,并且经常被错误地标记为每秒位数。如果异步,这本质上是每秒位数,包括帧数据,如果同步,则实际上是每秒位数?

奇偶校验 - 偶数/奇数..两者之间有什么区别吗?我正在考虑效率或类似的问题。这仅仅是为了兼容性而存在吗?

停止位 - 到目前为止我已经读到你可以有 1 或 2 个停止位。在 C# 中似乎也有 1.5 的选项。我找不到任何关于为什么您想要/需要超过 1 个的信息。

如果有人可以就这些观点提出建议,或者向我推荐一些推荐的阅读 Material ,我将非常感激。

感谢您的阅读。

编辑:拼写错误

最佳答案

您很少有选择,您必须使其与设备使用的设置兼容。如果您不知道,那么您需要查看手册或拿起电话。请记住,使用真正的串行端口设备(使用 UART 的设备)的情况越来越少。最常见的是,您实际上与由 USB 或蓝牙设备驱动程序实现的模拟串行端口进行通信。在这种情况下,您使用的设置并不重要,因为实际信号是由底层总线实现的。

如果您可以配置设备,则基本准则是:

  • 波特率与电缆长度和存在的电气干扰量直接相关。当出现位错误时,您必须放慢速度。 RS-232 规范仅允许在 9600 波特率下最大传输距离 50 英尺。
  • 当您不使用纠错协议(protocol)时,应该使用奇偶校验。选择奇数或偶数并不重要。奇怪的人选择奇怪的,这是他们的特权。
  • 停止位通常为 1。选择 1.5 或 2 有助于缓解因数据丢失而检测到的中断响应时间很差的设备的压力。
  • Databits 几乎始终为 8,如果设备仅处理 ASCII 代码,有时为 7。
  • 握手是一个重要的设置,它永远不会停止造成麻烦,因为许多程序员只是忽略了它。现代计算机几乎总是足够快,不需要它,但对于设备来说不一定如此。最基本的避免故障配置是在打开端口时打开 DTR,并告诉设备驱动程序处理 RTS/CTS 握手。有时会使用 Xon/Xoff 握手,具体取决于设备。

90% 的战斗是通过实现可靠的错误检查来赢得的。它几乎总是被吝啬,坏主意。对于串行端口设备非常重要,因为它们本身没有纠错能力并且错误检测非常弱。始终确保您可以检测并正确报告溢出、奇偶校验和帧错误。并通过故意错误设置来测试它们。

关于networking - 串行通信波特率、奇偶校验和停止位。使用哪些选项以及何时使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25048289/

相关文章:

c# - 缓冲来自套接字的字符串流

java - 如何读取通过蓝牙发送的传入值?

raspberry-pi - 使用 C++ 在 RPi 和 Arduino 之间进行串行通信

c - Raspberry Pi 的 C 语言串行通信

c# - 连接到 RFID 阅读器时出错 : The maximum baud rate for the device is 8190

linux - 如何为套接字或 epoll 事件分配上下文

python - 在Python中打包和解包浮点值

linux - 如何在 Perl 中找到每个接口(interface)的 IP 地址?

.net - 为比特率限制计算 Thread.Sleep()

c++ - 如何在 Linux 上将波特率设置为 307,200?