我想知道如何创建安全的UART / USB通信协议。我需要它来实现微控制器和PC之间的通信。我有大约10个命令,并认为我将为每个命令使用10个单独的确认命令。
交换应该像这样:
- PC通过UART发送唤醒命令
- µC识别出PC已连接,并将其命令发送到PC,例如。
0x01
- PC会执行要求的操作(一些硬件任务),并
~0x01
在完成后做出响应(我将数字取反以在两个数字之间创建更大的“距离”) - µC知道它已发送
0x01
并且期望~0x01
PC 发出请求。如果除了~0x01
返回以外的内容,µC会知道出了点问题,并会发送新的请求或错误消息
µC发送的情况下,0x01
PC可以理解0x02
并发送~0x02
回去,但是~0x01
由于某些噪声而导致µC读取会非常糟糕。
就传输而言,这有多安全?或者我怎样才能使其更加安全?
1
您可能想复习一下我的相关问题及其很好的答案。
—
尤金(Eugene Sh)。
“更安全”是指您更不容易发生传输错误,不添加加密货币等以防止窃听,反之亦然。即使那是一个非常广阔的领域:en.wikipedia.org/wiki/Error_detection_and_correction
—
Fizz
您可能需要查找汉明编码。它将占用多达16个命令(4位),并以系统的方式将其扩展为7位(可以通过标准UART传输)。您可以选择更正任何一位错误,或检测是否接收了任何两位错误。
—
Neil_UK,2015年
1)7位+奇偶校验位是一种方法,它很简单。它不会捕获所有可能的错误,但是会捕获许多错误。2)一种更健壮的方法是发送两个字节,第一个字节与实际命令一起发送,第二个字节与第一个命令的“非”发送。3)更好的方法是发送“命令来临”字节,后跟命令,接着是命令的补全,然后是“命令末尾”。应该选择“命令即将到来”和“命令结束”字节,以使其不覆盖任何命令和补充命令字节
—
user3629249 2015年
如果只需要10个命令,则每个字节可容纳两个副本(以确保冗余),再加上奇偶校验位。或者,由于您拥有256个符号的符号空间,并且只需要10个符号,因此您可以简单地选择最大不同的符号(所有符号相差多个位),或者仅选择偶数个零和零的符号。您当然不必担心单位错误。
—
mkeith 2015年