先月、画面上にランダムなゴミが表示され続ける UART ディスプレイのデバッグに 3 日間を費やしました。ボーレートはわずか 0.5% ずれていたことがわかりました。そのわずかな違いがすべてを台無しにするのに十分だった。
これはあなたが思っている以上に重要です。 UART ディスプレイは単純に見えます - 3 本の配線だけで完了です。しかし、信頼性の高い通信を実現するには、それらの信号で実際に何が起こっているのかを理解する必要があります。
UART ディスプレイ通信が見た目より難しい理由
UART ディスプレイは、ユニバーサル非同期レシーバ-トランスミッタ プロトコルを使用します。セットアップは最小限で、通常は TX、RX、および GND だけです。-。そのため、UART 表示モジュールは組み込みプロジェクトのあらゆる場所に使用されます。
問題はその「非同期」の部分です。マイクロコントローラーと UART ディスプレイの間に共有クロックはありません。どちらのデバイスも独自のタイミングで実行されるため、構成を通じて厳密に調整する必要があります。設定を 1 つ間違えると、UART ディスプレイがまったく動作しなくなるか、さらに悪いことに - 時々動作することもありますが、ランダムに失敗します。
ボーレート: この数値がそれほど重要な理由
ボーレートは、データが UART ディスプレイに転送される速度です。一般的な速度は 9600、19200、38400、57600、および 115200 ビット/秒です。信頼性が高く、長いケーブルでも動作するため、ほとんどの人は 9600 から始めます。
最初に私を混乱させたのは次の点です。- UART ディスプレイを 9600 ボーに設定しても、実際には 1 秒あたり 9600 ビットの有用なデータが転送されるわけではありません。標準の「9600 8N1」構成 (9600 ボー、8 データ ビット、パリティなし、1 ストップ ビット) では、実データの 8 ビットごとに 10 ビットを送信します。 1 つのスタート ビット、8 つのデータ ビット、1 つのストップ ビット。したがって、実際のスループットは 1 秒あたりわずか 960 バイトです。
これは、UART 表示を迅速に更新しようとする場合に重要です。 20x4 の文字表示を 1 秒あたり 5 回更新する場合、文字だけで 1 秒あたり 400 バイトになります。コマンドのオーバーヘッドを追加すると、4000 ボーを超えるヘッドルームが必要になります。したがって、9600 は問題なく動作しますが、4800 では限界に近づきます。
適切な速度を選択する
ケーブルの長さは、UART ディスプレイで動作するボーレートに影響します。 3 メートルのケーブルでは 115200 ボーでは完全に失敗しましたが、15 メートルでは 9600 ボーで完全に動作しました。高速化するには、より優れた信号品質が必要です。
温度も重要です。多くのマイクロコントローラーは、温度によってドリフトする内部発振器を使用しています。私がこのことを知ったのは、屋外設置の UART ディスプレイ ユニットが断続的に故障し始めたときでした。夏の暑さにより、115200 ボーでの通信が中断されるほどのクロック ドリフトが発生しました。 57600に下げると修正されました。
重要な場合には、内部 RC 発振器の代わりに水晶発振器を使用してください。または、タイミング許容範囲がより良い場合は、単に低速で実行します。
ボーレート許容誤差の背後にある数学
標準の UART ディスプレイ通信は、8 ビット フレームのボー レートの不一致を最大 3.75% 処理できます。たくさんあるように思えますが、そうではありません。マイクロコントローラーのクロックが 2% ずれていて、UART ディスプレイ発振器が逆方向に 2% ずれている場合、合計誤差はすでに 4% に達しています。通信が失敗します。
データシートに連携するように記載されているにもかかわらず、安価なコンポーネントが連携しない場合があるのはこのためです。
UART ディスプレイ システムでのパリティ チェック
パリティは、UART ディスプレイへの送信エラーを捕捉するのに役立つ追加ビットです。次の 3 つのオプションがあります。
偶数パリティ- パリティ ビットにより、フレーム内の 1 の合計数が偶数になります。文字「S」(バイナリ 01010011) を送信すると、すでに 4 つの 1 があるため、パリティ ビットは 0 になります。
奇数パリティ- 1 の合計数を奇数にします。同じ「S」文字にはパリティ ビット 1 が与えられます。
パリティなし- パリティ ビットを完全にスキップします。これは、ほとんどの uart ディスプレイ プロジェクトで使用される「9600 8N1」の「N」です。
パリティが実際に役立つ場合
パリティチェックは、モーターやその他の電気ノイズ源の近くに UART ディスプレイを設置する場合に意味があります。産業環境は過酷であり、- リレー コイル、周波数ドライブ、溶接機はすべて、ビットを反転させる可能性のある干渉を生成します。
長いケーブル配線のパリティも有効にします。 UART ディスプレイへのケーブルが長ければ長いほど、問題が発生する可能性が高くなります。クリーンなオフィス環境であっても、10 メートルのケーブルは、時折バイトを破損するほどのノイズを拾います。
ただし、- パリティは単一ビット エラーのみを検出するという点があります。- 1 つのフレーム内で 2 つのビットが反転すると (まれですが可能性があります)、パリティがそれを見逃します。本当に重要な UART 表示データの場合は、パリティだけでなくプロトコル レベルでのエラー チェックを強化する必要があります。
パリティについての正直な真実
通常の環境におけるほとんどの短距離 UART ディスプレイ プロジェクトにはパリティは必要ありません。-私はパリティなしの 9600 8N1 を使用して数百台のユニットを出荷しましたが、屋内で 2 メートル未満のケーブルを使用した場合、エラー率は基本的にゼロです。
つまり、開発中はオンにしてください。テストの結果、必要がないことが判明した場合は、後で無効にすることができます。しかし、エラーを早期に発見できれば、出荷後の不可解な失敗を防ぐことができます。
UART 表示フレームの実際の動作方法
UART ディスプレイに送信されるすべてのバイトは、特定の形式で送信されます。
スタートビット- 通常、ラインは高い位置にあります。スタートビットはそれをローにして「データが来ている」ことを知らせます。これにより、UART ディスプレイにサンプリングを開始するように指示されます。
データビット- 通常は 8 ビットで、最下位ビットが最初に送信されます。これが実際のペイロードです。
パリティビット- オプションのエラーチェックビット。
ストップビット- ハイに戻り、フレームを終了します。通常は 1 ビットですが、古いシステムでは 2 ビットが使用されていました。
UART ディスプレイは開始ビットを待ってから、ボー レートでラインをサンプリングして各データ ビットを読み取ります。各ビット周期の中心でサンプリングするため、タイミング エラーに対する最大の許容範囲が得られます。これが、フレームの終わりまでにタイミングが大きくずれていない限り、ボーレートの小さな不一致が時々機能する理由です -。UART ディスプレイはそれを正しくデコードできます。
UART ディスプレイ通信のエラーへの対処
エラーが発生します。電源の不具合、コネクタの緩み、電気ノイズ - などのさまざまな要因により、UART の表示データが台無しになる可能性があります。問題はそれをどう扱うかです。
一般的なエラーの種類
フレーミングエラー- UART ディスプレイには、ストップ ビットがあるはずの場所にストップ ビットが表示されません。通常は、タイミングがずれているか、送信中に 1 台のデバイスがリセットされたことを意味します。-このような場合は、そのバイトを捨ててください。
パリティエラー- 受信したデータはパリティ ビットと一致しません。何かが原因でデータが破損したため、データを破棄してください。
オーバーランエラー- ソフトウェアが前のバイトを読み取る前に、新しいデータが UART ディスプレイに到着しました。コードが追いついていません。割り込みまたは DMA を使用するか、ボー レートを遅くしてください。
バッファオーバーフロー- アプリケーションが UART 表示データを十分な速度で処理していないため、受信バッファがいっぱいになりました。より大きなバッファまたはより高速な処理が必要です。
実践的なエラー処理
実際の UART 表示プロジェクトで実際に動作するものは次のとおりです。
ハードウェアレベル- 各バイトの後にエラー フラグをチェックします。エラー フラグが設定されている場合は、そのバイトを破棄し、フラグをクリアします。 UART ディスプレイで破損したデータを使用しないでください。
プロトコルレベル- 基本的な UART ディスプレイ通信の上に単純なパケット構造を構築します。
パケットの開始をマークするヘッダー バイト
長さフィールド
実際のデータ
チェックサム (基本的な XOR チェックサムでも役立ちます)
UART ディスプレイが不正なチェックサムを持つパケットを受信すると、再送信を要求することがあります。
タイムアウト- UART ディスプレイが 100 ~ 200 ミリ秒以内に応答しない場合は、コマンドを再試行してください。これにより、多くの失敗例が検出されます。
バッファサイジング- 受信バッファを最大パケット サイズの 4 倍以上にします。循環バッファを使用して、受信する UART 表示データを効率的に管理します。
実際の例: バースト干渉
私はかつて UART ディスプレイをデバッグしたことがありますが、数秒間文字化けしたテキストが表示され、その後回復しました。数日間のテストの結果、近くのモーターコントローラーが始動時にバーストノイズを発生していることがわかりました。これらのバーストにより、複数のエラーが連続して発生しました。
修正はバースト検出ロジックを追加することでした。 UART ディスプレイが 100 ミリ秒以内に 3 件を超えるエラーを検出すると、受信バッファをフラッシュし、50 ミリ秒の間データを無視し、パケット ヘッダーを待って再同期します。これにより、UART ディスプレイはバースト干渉に対して堅牢になり、同時に迅速に回復するようになりました。
UART ディスプレイ通信の高速化
UART ディスプレイが確実に動作するようになったら、パフォーマンスを向上させる方法があります。
DMA の使用
DMA (ダイレクト メモリ アクセス) は、バイトごとに CPU に煩わされることなく、メモリと UART ディスプレイ周辺機器の間でデータを移動します。 UART ディスプレイ アプリケーションで割り込み駆動から DMA 転送に切り替えることにより、CPU 使用率が 40% から 5% 未満に低下するのを確認しました。-
フロー制御
ハードウェア フロー制御は、RTS 信号と CTS 信号を使用してバッファ オーバーランを防ぎます。 UART ディスプレイは、バッファがいっぱいになると CTS を Low にし、送信機に一時停止するように指示します。これにより、UART ディスプレイ CPU が画面の更新で忙しい場合でも、データの損失が防止されます。
XON/XOFF 文字を使用したソフトウェア フロー制御は、追加のピンがない場合に機能しますが、信頼性が低く、実際の UART 表示データに送られる可能性のある帯域幅を使用します。
一般的な問題のデバッグ
実際の UART ディスプレイ プロジェクトから得たいくつかのトラブルシューティングのヒント:
何も表示されない
まず次の基本を確認してください。
- TX と RX は正しく交差しましたか? (TX は UART ディスプレイ RX に移動します)
- 機器間のアースは接続されていますか?
- 両側で同じボーレートですか?
- 電圧レベルは互換性がありますか? (3.3V と 5V のデバイスは一緒に動作しない場合があります)
クイック テスト: UART ディスプレイ TX を独自の RX (ループバック) に接続します。データを送信して戻ってくるかどうかを確認します。 「はい」の場合、UART ディスプレイ ハードウェアは機能しており、問題は接続または他のデバイスにあります。
文字化け
通常は、ボーレートの不一致か、間違ったフレーム形式です。再確認してください:
- 両側でまったく同じボーレート
- 同じデータビット、パリティ、ストップビット
- オシロスコープをお持ちの場合は、実際のボーレートを測定します
「文字化け」は、間違ったデータ形式を送信していることを意味する場合があります。有効な ASCII または UART ディスプレイが期待するものを送信していることを確認してください。
断続的な問題
これらは最悪です。以下を確認してください:
- はんだ付け不良またはコネクタの緩み
- ノイズ源の近くにケーブルを配線する
- 不安定な電源
- 割り込みハンドラーの競合状態
ここではロジック アナライザーが非常に役立ちます。エラーが発生したときに UART 表示信号をキャプチャし、実際のビット タイミングを確認します。
動作してから停止する
通常は、バッファ オーバーフローまたはエラー フラグがクリアされないことが原因です。 UART 表示は最初は機能しますが、バッファーがいっぱいになるかエラーが発生すると停止します。
チェック:
- UART ディスプレイ受信バッファからの読み取りは十分に高速ですか?
- 検出後にエラーフラグをクリアしますか?
- メモリリークによりRAMがゆっくり消費されていますか?
知っておく価値のある高度なテクニック
- マルチドロップ ネットワーク-- RS-485 を使用して 1 つのバス上に複数の UART ディスプレイが表示されます。アドレス指定と衝突検出が必要です。
- ファームウェアのアップデート- UART ディスプレイ シリアル接続を使用して、新しいファームウェアをアップロードします。保存には別のプログラミング インターフェイスが必要です。
- 電源管理- バッテリー駆動の UART ディスプレイ システムの場合、-ブレーク検出を使用してスリープから復帰するか、アクティビティが低いときにボーレートを下げてより深いスリープ状態を許可します。
本番環境で機能するもの
実際の UART ディスプレイ製品の出荷から重要なことは次のとおりです。
テストポイント- UART ディスプレイ PCB にアクセス可能な TX、RX、および地上テスト ポイントを追加します。これらは現場でのトラブルシューティングに必要になります。
ESD保護- 個の UART ディスプレイ コネクタがタッチされ、ザッピングされます。 UART ラインに ESD ダイオードを追加します。
ケーブルに関する考慮事項- 取り外し可能なケーブルを使用する場合は、直列抵抗を追加し、場合によっては RC フィルターを追加して反射を低減します。
ドキュメント- UART 表示 UART 設定 (ボー、データ ビット、パリティ、ストップ ビット) を回路図、コード コメント、およびユーザー マニュアルに書き留めます。将来、あなたはそれを高く評価するでしょう。
組み込みの診断機能-- UART 表示通信統計、エラー数、バッファ ステータスを報告する診断モードを追加します。インストールの問題に非常に役立ちます。
まとめ
UART ディスプレイ通信を正しく行うには、細部にまで注意を払う必要があります。小さなタイミング エラーや構成の不一致が、信頼性の高い UART ディスプレイと何時間ものイライラを生むことになる可能性があります。
重要なポイント:
1.クロック精度を考慮してボーレートを慎重に一致させます
2.騒音の多い環境ではパリティを使用する
3.ハードウェアおよびプロトコルレベルでエラーを処理する
4.バッファのサイズを適切に設定し、高スループットのために DMA を考慮する
5.さまざまな温度範囲で現実的な干渉を伴うテスト
控えめな設定から始めます - 9600 8N1 は、ほとんどの UART ディスプレイ プロジェクトで依然として最適に機能します。最適化する前に、すべてを体系的に検証してください。
Minghua UART ディスプレイ ソリューション
明華テクノロジーは、産業用、商業用、組み込みシステム向けの UART ディスプレイ モジュールとシリアル ディスプレイ ソリューションを提供します。当社の uart ディスプレイ製品には次のものが含まれます。
- 9600 ~ 115200 bps をサポートする事前設定済みの UART インターフェース-
- パリティ チェックと CRC 検証による組み込みエラー処理-
- -40 度から +85 度まで定格の工業用-グレードのコンポーネント
- 2.4 インチから 15.6 インチの UART ディスプレイ パネルのサイズ
- 完全なドキュメントとサンプルコード
- エンジニアリングサポートチーム
当社は、医療機器、自動化システム、IoT アプリケーション向けの UART ディスプレイ モジュールを世界中に供給しています。
明華に連絡するUART ディスプレイの要件について話し合い、評価サンプルをリクエストしてください。
