1331325_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

1331325_ja-JP

1331325_ja-JP

i.MX6のUARTを使用するときに0xFFを連続して受信する問題に関するヒント

この記事では、i.MX6シリーズで発生することがある問題について、1つのヒントを示します。RXラインがずっとハイのときに、UARTが継続的にRX割り込みを生成し、0xFFを受信するという問題です。

以下に、imx6DLを用いて説明いたします。一部の設定は、再現を容易にするためのものです。

BSP バージョン:L5.4.70-2.3.0

ボードHW:MCIMX6DL-SDB

問題が発生する状況

  1. i.MX6DL UART3をシリアル・ポートとして設定し、1200ボー、8-N-1形式を使用します。
  2. RXラインを高く保ってください。
  3. RXラインをローにして、その状態を短時間(360~370マイクロ秒)維持します。

この状態では、RX ラインをハイに戻しても、UART は継続的に RX 割り込みを生成し、0xFF を受信していることが表示されます。

問題が発生する原因

このローの時間は正常な範囲内になく、当社の仕様から外れています。

i.MX6DLのAECのドキュメントには、次のような「UARTレシーバ」というセクションがあります。

hongting_dong_0-1630284809892.png

1200ボーを使用する場合、有効な1ビットの時間は833マイクロ秒です。そして仕様には、「各ビットで1/(16 x Fbaud_rate)の許容誤差を認める」との規定があります。つまり1200ボーの場合には、有効な1ビットの範囲は781~885マイクロ秒です。しかし、問題を再現するときのロー・レベルの時間は360マイクロ秒です。この範囲外の時間によって、UARTのステート・マシンが混乱します。

解決方法

実際には、当社の仕様に従っていただくのが最善の方法です。お客様の環境でこのような未知の状況が発生する場合には、お客様が直面する問題を解決するためのヒントとして、次のような方法が考えられます。

割り込みハンドラは USR1[AWAKE] を確認します。

2    AWAKEがアサートされている場合は、それをクリアして、通常どおり処理を進めます(有効なデータがあると想定します)。それ以外の場合は、USR1[AGTIM] がアサートされているかどうかを確認します。

3    AGTIMがアサートされている場合は、それをクリアして、通常どおり処理を進めます。それ以外の場合は、ソフトウェア・リセットを実行します(データが無効であるものと想定します)。

AGTIMをチェックするのは、RX FIFOにいくつかの文字(RXTL未満)があるものの、それ以上のデータが入ってこないときの競合状態に対処するためです。

この手順に従うと、ブロック割り込みが発生したときにUARTはソフトウェア・リセットを実行します。

注:お客様の報告によると、RXラインで有効なスタート・ビットが検出された場合には、エラーがクリアされる可能性があります。これはお客様自身で確認していただく必要があります。

テストコードは添付ファイルに含まれています。


Besst Regards

i.MX6 全て
タグ(1)
評価なし
バージョン履歴
最終更新日:
‎01-04-2026 11:56 PM
更新者: