我开始为以全双工模式传入和传出数据的设备编写代码,因此我将使用硬件握手并在出现问题时设置中断条件。但当涉及到错误检测时,最好的方法是什么就不太清楚了。
RS232 具有我可以使用的内置奇偶校验检查。据我了解,如果我使用 8 个数据位、1 个奇偶校验位和 1 个停止位,那么线路上的数据包将是 10 位。这意味着对于我发送的每 1024 字节,我还会发送与其交错的 128 字节验证信息。
由于奇偶校验对于每个字节来说是 50/50 的事情,因此持续时间少于一个字节的短噪声突发不太可能导致与奇偶校验位仍然一致的损坏。所以这似乎不是一个可靠的测试。
如果我在每个 1024 字节的末尾使用校验和(在 115200 波特率下仍然只有 80 毫秒),即使我使用 64 位校验和,我的验证开销也会从 12% 下降到不到 1%。而且更难忽视腐败。
奇偶校验只是一种在低于 100 波特率连接的时代有用的技术,而且早已过时了,我应该使用块校验和,还是我遗漏了一些东西?
奇偶校验是一种非常粗糙、老式的错误检测方法。它给你的传输增加了很多开销:实际上它增加的延迟比校验和要多得多。对于以 115200 波特率发送的 1024 字节,奇偶校验会导致 8.88ms 的额外延迟。因此,最好忘记您曾经听说过奇偶校验,并将其视为过时的功能。
至于使用哪种校验和算法,CRC 被广泛认为是最佳选择。然而,具有 64 位多项式的 CRC 将需要相当长的时间来计算。
考虑将大数据块分割成较小的数据包,每个数据包具有较小的校验和,例如 CRC-8 或 CRC-16。