不增加校验字,分别用两个字节表示0和1,用哪两个数字最好?
本帖最后由 wochai 于 2019-12-14 08:09 编辑如题.
串口通讯中,我想用两个字符表示0和1,用哪两个最不容易受到干扰出错。
比如:A对应1,B对应2
传输给对方后,可以由于干扰变成C,但是不要出现A和B交换的情况。
编辑原因:“用两个字节表示0和1”改为 “用两个字符表示0和1” 0,255^_^ 0x55,0xAA #在这里快速回复#0x55,0xAA 两个数字要正交,55 AA,3C C3都可以 我一般用A5 5A yyts 发表于 2019-12-13 12:05
0,255^_^
0000 0000
1111 1111
这种全满全空的数值,在波特率错误的时候特别容易出现,好像不太合适。 xiaojian 发表于 2019-12-13 12:09
0x55,0xAA
0101 0101
1010 1010
这个通讯时错了一位,不就恰好交换了?! 10101001
01010110 FA2C 这种呢 两个字节,为什么不是1个字节表示协议,另一个字节作校验呢? laujc 发表于 2019-12-13 14:34
两个字节,为什么不是1个字节表示协议,另一个字节作校验呢?
Sorry!描述错误!
不是“用两个字节表示0和1” ,而是 “用两个字符表示0和1”。 大于10的表示1 小于5的表示0 wochai 发表于 2019-12-13 13:41
0101 0101
1010 1010
这个通讯时错了一位,不就恰好交换了?!
但是还有一位停止位 wochai 发表于 2019-12-13 13:38
0000 0000
1111 1111
这种全满全空的数值,在波特率错误的时候特别容易出现,好像不太合适。 ...
楼主的这个问题,我在 1995 年时也遇到了,但不是 0 与 1 状态的传递,而是使用了 RS-485 且传递了几个 Byte 后,在工业应用上要能对抗致命的极严重干扰!大致上是变成了 C 后还可完整的还原其原来的那几个 Byte 资料不出错,
但最终完成了这个任务,它不是 CRC!而其中所的方式谅我在此不便公布,因我这两年内在退休前已较有空要来将当年的这方法给申请专利给我所在的公私单位,因为这是于敲码时所构想的,所以使用的权力是在公司而不是我自己。
言归正传,个人感觉就二楼的方法是较靠普的,或是说也可以用 0x0F & 0xF0 的类似连续的 0 或是 1。我以我个人的浅见来说说为何是要选这个方式,因为 Baudrate 不变的状况下,要干扰一个 Bit 的资料由 0 变 1 或是将 0 变 1 是很容易的。
这又要来说到这干扰突波的发生与特性,刚说到同 Baudrate 在不变的状况下,外界要产生改变一个 Bit 所需的突波能量会较小就易达成,但是要能干扰到连续的一组 Bit 那得要多大的能量啊?!这点请楼主评估看看,或其他坛友来补述也行。
最后再来说到若是...这帖内所有坛友给出的建议都无法达成的话,那表示这些资料的组合或是这 UART 串口硬件层是根本无法可靠的来传递资料了,也建议楼主考虑其他的如 RS-485 实体层或是如 USB 内的 NRZI 编码等啥的再试一试吧!
本帖最后由 canspider 于 2019-12-14 10:21 编辑
核心思路就是过采样,用更多的信息来表达一位数据
再往深了研究就是深空通讯技术了 参考纠错码原理和方法,数据量大时还可以少了太浪费资源了不如CRC不对就扔了。 xyz543 发表于 2019-12-14 10:16
楼主的这个问题,我在 1995 年时也遇到了,但不是 0 与 1 状态的传递,而是使用了 RS-485 且传递了几个 B ...
我的系统倒是没有这么严格的要求。
看来的确在波特率不变的情况下,多个1或0连续的情况抗干扰能力比较强些。 说白了这就是扩频技术,无线传输里的干扰比这多的多。 随便整两随机数,越随机越好 fct8591 发表于 2019-12-14 10:37
参考纠错码原理和方法,数据量大时还可以少了太浪费资源了不如CRC不对就扔了。 ...
看了下“纠错码原理和方法”,的确有所收获。
页:
[1]