有一个问题我一直想不通:就是串口通信的过程中,比如说偶校验:
假设传送的有效数据是7位,后面加上一个偶校验位:11001010,最后一位是偶校验位,'1'的个数总共为4个。
在传送传送的过程中,假设11001010中的其中两位变了10101010,此时接收方收到的数据是10101010,1的个数还是4个,最后一位的偶校验位还是0,请问此时如何判断数据传送错误了呢,如何认定这就是一个无效数据呢?此时1的个数并没有改变啊,还是4个。
------解决方案--------------------
每种校验方法都有校验能力的问题。偶校验的校验能力就是只能校验奇数个错误,偶数个错误查不出来。
------解决方案--------------------
奇偶效验的能力较差,但是因为硬件实现简单,所以还是常用;
通常,还会用软件方式对多字节数据做累加和效验,以及异或和效验。只要发生错误,就要求重发。
------解决方案--------------------
协议里面顶一个教研位,协议解析的时候异或也可以啊,逐字节异或数据对比协议数据中的校验位。
------解决方案--------------------
纠错/检错码的纠检能力一般和增加的冗余度成正比
只增加1bit的检错码,能有多强的纠检能力呢?
------解决方案--------------------
是的,奇偶校验的能力并不是很强,出现你上面提到的情况是完全可能的。
------解决方案--------------------
无法检测到错误
理论上的限制,如果有必要,采用别的效验算法
------解决方案--------------------
用CRC吧
------解决方案--------------------
232奇偶校验位由硬件完成,与软件无关。