Need of checksum in serial communication(串口通信中对校验和的需求)
问题描述
我目前正在做一个项目,涉及从PC(USB到C#编码的串口应用程序)到嵌入式平台(STM32F4)的串口COM。 我发现在某些情况下,在通信帧中必须有一个校验和。 通信配置:
波特率=115200,
无奇偶校验位
One StopBit
无握手
帧长度:16字节
是否值得在我的应用程序中添加校验和?我应该(不)拥有此校验和的原因是什么?
感谢您的答复。
推荐答案
是,您必须有校验和。唯一可接受的非业余人士解决方案是基于CRC的适当校验和。最常用的行业标准是"CRC-16-CCITT"(多项式0x1021)。这将捕获任何单比特错误、大多数双比特错误和一些突发错误。
即使您只在办公环境中使用RS-232(?),但由劣质消费电子产品引起的任何EMI都可能导致故障和错误数据。这种劣质电子产品随处可见:例如,你个人电脑中的电子产品EMC性能差的情况并不少见。尤其是,有无数的USB转串口适配器,其质量简直糟糕透顶。
UART硬件本身没有值得一提的错误检测:它是20世纪60年代的古老技术。在硬件层面上,它只根据起始位和停止位检查数据完整性,并将忽略两者之间的任何错误。(奇偶校验同样很差)。
或者,您也可以改为使用USB转RS-485适配器,并使用RS-485,因为它有差分信号,所以更加坚固。但这需要你在目标端也有RS-485收发机。
这篇关于串口通信中对校验和的需求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:串口通信中对校验和的需求
- 使用 rss + c# 2022-01-01
- 是否可以在 .Net 3.5 中进行通用控件? 2022-01-01
- 在 C# 中异步处理项目队列 2022-01-01
- C# 通过连接字符串检索正确的 DbConnection 对象 2022-01-01
- 带问号的 nvarchar 列结果 2022-01-01
- Azure Active Directory 与 MVC,客户端和资源标识同一 2022-01-01
- Windows 喜欢在 LINUX 中使用 MONO 进行服务开发? 2022-01-01
- 为什么 C# 中的堆栈大小正好是 1 MB? 2022-01-01
- CanBeNull和ReSharper-将其用于异步任务? 2022-01-01
- 在 LINQ to SQL 中使用 contains() 2022-01-01