UARTエラーの処理


8

ほとんどのコントローラーの UART は同様のアーキテクチャーであるため、特定のMCUに集中していません。TxとRxの両方にFIFOがあります。

UARTによって生成される最も一般的なエラーは次のとおりです。-1.フレーミングエラー2.パリティエラー3.オーバーランエラー(Tx / Rx FIFOのオーバーフロー)4.受信ブレークエラー(ストップビットのあるエラー)

通信を適切に維持するには、これらのエラー条件をどのように処理する必要がありますか?

私はそれが漠然とした質問であることを理解していますが、ほとんどの場合、そのようなエラーが発生したときに何をすべきかについて人々は混乱し、最終的にエラービットをクリアすることになります。

回答:


6

あなたの質問に実際に答えるために、私は通常、エラーで受け取ったものはすべて破棄します。エラーの内容とUARTハードウェアの詳細によっては、UARTハードウェアの再初期化が含まれる場合があります。

唯一の例外は、意図的に休憩を受け取りたい場合です。それらはフレーミングエラーとして表示されます。その場合、特別な条件として、より高いレベルまでのフレーミングエラーを渡します。ただし、帯域外情報を上位レベルに渡す必要があるため、UARTレシーバーインターフェイスは、バイトストリームを取得するほど単純なものとは見なされません。ブレークが意図的に使用されていた古いシステムとの互換性が必要だったため、多くのマイクロコントローラープロジェクトでこれを1回だけ実行したと思います。

スティーブンは、より高いレベルでこれについて何をすべきかについていくつかの良いアイデアをあなたに与えました。エラーが実際に発生する可能性があり、データの整合性が重要であると考える場合は、通常、データのチャンクをチェックサム付きのパケットにカプセル化します。受信側は、正しく受信したチェックサムごとにACKを送信します。

ただし、ほとんどの場合、UARTエラーは非常にまれであり、絶対的に重要ではないため、高レベルで無視することができます。UARTハードウェアがキャッチできるエラーの種類は通常、回線ノイズではなく、オペレーターの愚かさによるものです。ほとんどのようなノイズは、UARTが検出しない不良データを引き起こします。したがって、低レベルのUARTドライバーは、UARTエラーに関連するすべてのものをスローしますが、それ以外の場合は、受信したバイトのストリームを次のレベルまで渡し続けます。実際、パケットとチェックサムを使用している場合でも、個々のバイトが受信される場所よりも高いレベルで行われるため、これが行われます。


9

これらのエラーは修正できないため、再送信が必要です。これには、UARTよりも高いレベルのプロトコルが必要です。通常は、データのパケットが正しく受信されたことを確認する必要があります。このパケットは1バイトですが、通信にほとんどエラーがない場合は、より長いパケットを使用することもできます。エラーが発生した場合は、トランスミッタにNACKを送信して、各パケットを確認します。後者の場合、パケットを破棄し、再送信を待ちます。
パケット転送を使用する場合、パリティの代わりにCRCエラーチェックを検討することをお勧めします。これは非常に効率的ではなく(バイトごとに1ビットを追加)、シングルビットエラーのみをキャッチします。


3

受信したUARTデータにフレーミングエラーがある場合、UARTに応じて、データワイヤーの連続する立ち下がりエッジの間に10ビット時間以上、19ビット時間になるまで、後続のすべてのバイトがガベージになる可能性があります連続する間隔、または連続するマーキングの9ビット時間(最後のマーキングはすべてのUARTで機能します)。値0x00または0x80(9ビットモードでは0x100)の正しくフレーム化されたバイトを受信し、トランスミッターが長いブレークを送信しないか、レシーバーがトランスミッターが送信する長いブレークからバイトを解析しようと停止する場合、それが正しく、後続のバイトも正しくなることが保証されます。下位ビットに0〜6の連続する「ゼロ」があり、残りのビットがすべて設定されている値を受け取った場合、

S = START P =前のバイトデータs =停止D =現在のバイト-=アイドル
0111111101000000011111-オンラインの信号
Ps ------ SDDDDDDDDs ---:トランスミッターの意図どおり(0x02)
SPPPPPPPPsSDDDDDDDDs-:受信したとおり(0xC0)

各パケットが0x00で始まり、その後に0xFFが続く場合、1つのパケットのフレーミングエラーは次のパケットに影響しません。レシーバーがフレーミングエラーに気づくと、適切にフレーム化された0x00が見つかるまでデータの破棄を開始できます。これにより、正当なパケットの開始があることがわかります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.