安全なUART / USB通信プロトコルを作成する方法を考えていました。マイコンとパソコンの通信に必要です。私は〜10個のコマンドを使用しており、それぞれに10個の個別の確認応答コマンドを使用すると思いました。
交換は次のようになります。
- PCがUARTを介してウェイクアップコマンドを送信する
- µCはPCが接続されていることを認識し、そのコマンドをPCに送信します。
0x01
- PCは要求された処理(一部のハードウェア関連)を実行し、
~0x01
完了時に応答します(2つの数の間に大きな「距離」を作成するために数を無視します)。 - µ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を介して送信できます)に拡張します。シングルビットエラーを修正するか、任意の2ビットが誤って受信されたかどうかを検出できます。
—
Neil_UK 2015年
1)7ビット+パリティビットは1つの方法で、簡単です。起こり得るすべてのエラーをキャッチするわけではありませんが、多くのエラーをキャッチします。2)より堅牢な方法は、2バイトを送信することです。最初は実際のコマンドで、2番目は最初のコマンドの「not」で送信します。3)「コマンド着信」バイトを送信し、その後にコマンドを送信し、その後にコマンドの賛辞を送信し、その後に「コマンド終了バイト」を送信することをお勧めします。「コマンドが来る」と「コマンドの終わり」のバイトは、コマンドと補完コマンドのバイトのいずれとも重ならないように選択する必要があります
—
user3629249
10個のコマンドだけが必要な場合は、各バイトに2つのコピー(冗長性のため)とパリティビットを含めることができます。または、256シンボルのシンボルスペースがあり、必要なのは10シンボルだけなので、最大で異なるシンボル(すべてのシンボルが複数のビットで異なる)を選択するか、1と0の偶数のシンボルのみを選択できます。シングルビットエラーを心配する必要はありません。
—
mkeith 2015年