私はチェックサムに非常に慣れておらず、プログラミングにもかなり慣れていません。私はArduinoボードに転送しているかなり単純なC++プログラム(psiの測定)を持っています。crc16 で問題ないでしょうか、それとも crc32 を使用する必要がありますか、それともやり過ぎでしょうか?
2 に答える
チェックサムは、信頼できない通信チャネルのコンテキストで発生します。通信チャネルは抽象化です。ビットは一方の端に入り、もう一方の端から出てきます。信頼性の低いチャネルとは、単純に、出てくるビットが入ったビットと同じではないことを意味します。
明らかに、最も信頼性の低いチャネルでは、ランダムなビットが出てきます。これでは使えないので、入力と出力が相関しているチャネルに注目します。
それでも、さまざまな汚職モデルがあります。一般的なモデルの 1 つは、各ビットが失敗する可能性が P% であるというものです。別の一般的なモデルでは、ビット エラーは通常バーストで発生すると考えられています。各ビットは、長さ N のエラーのバーストを開始する可能性が P% あり、各ビットが間違っている可能性は 50% です。問題に応じて、さらに多くのモデルが存在します。より高度なモデルでは、ビットが完全に失われる可能性も考慮されます。
正しいチェックサムは、モデルによって予測されたタイプのエラーを検出する可能性が非常に高くなりますが、他のタイプのエラーにはうまく機能しない可能性があります。
たとえば、インターネット IP レイヤーで最も一般的なエラーは、IP パケット全体が失われることだと思います。そのため、TCP はシーケンス番号を使用してこの特定のエラーを検出します。