こんにちは、NXP チームの皆様、
NXP S32K312 MCUを使い、LPUARTペリフェラルを使っています。通信に必要なUARTボーレートは1Mbpsです。
LPUART 6の機能クロックは30MHzです。
最初にUARTを以下のように設定しました。
この構成では、通信中にフレーミングエラーが発生することを確認しました。
LPUARTのボーレート計算に関して、以下のことが理解できます。
ボーレート = LPUARTクロック÷SBR×OSR
正確に1Mbpsを実現することを目的とした構成も試してみました。
しかし、依然としてフレーミングエラーが見られます。
921600bpsも試してみましたが、このボーレートでもフレーミングエラーが発生しました。
もう少し詳しく教えていただけますか:
必要に応じてLPUART BAUDレジスタ値、RTD設定、ロジックアナライザのキャプチャも提供できます。
推奨される構成と、追加のデバッグ手順についてご教示ください。
ありがとうございます。
こんにちは、 @gayathri123 さん、
誤差がLPUART6_STAT[FE]で報告されているのか、BQ79600が報告しているのか、それともロジックアナライザだけで報告されているのか、確認していただけますか?
2.75ミリ秒のLOWウェイクアップパルスは、UARTフレームよりもはるかに長い。レシーバが有効なままS32K312 RX入力にもLOWレベルが存在する場合、有効な停止ビットが検出されないため、LPUARTは正しくフレーミングエラーを報告することがあります。したがって、このフラグはウェイクアップフェーズで発生し、通常のUART通信が開始された後も設定されたままになる可能性がある。
テストとして、以下をお試しください。
ウェイクアップパルスの前後のLPUART6_STAT値とともに、TXとRXの両方のロジックアナライザによるキャプチャデータを提供してください。STAT[FE]が設定される正確な瞬間を特定することは特に重要です。
よろしくお願いいたします。
パベル
こんにちは
当社では、 LPUART6を1Mbpsに設定したS32K312を使用しています。PTD9はLPUART6のTXピンとして設定されています。
PTD9を一時的にGPIOとして設定し、その後LPUART6 TXに再多重化すると、UART通信中にフレーミングエラーが発生することが確認されています。
手順は以下のとおりです。
こんにちは、 @gayathri123 さん、
詳細な説明をありがとうございました。
まず最初に明確にしておくべき点は、LPUARTのボーレートの計算式です。S32K3 LPUARTの場合、実効ボーレートは次のように計算されます。
したがって、BAUDレジスタにSBR = 2、OSR = 15が格納されている場合、結果として得られるボーレートは次のようになります。
したがって、1Mbpsではありません。このずれは、通信相手が1Mbpsで動作している場合、フレーミングエラーを引き起こすのに十分な大きさである。
30 MHzのLPUART機能クロックの場合、以下の方法で正確な1 Mbpsのボーレートを得ることができます:
一部の設定ツールでは実効オーバーサンプリング比が表示される場合がありますが、BAUDレジスタにはこの値から1を引いた値が格納されていることにご注意ください。そのため、初期化後にLPUART6_BAUDレジスタ全体を読み出し、実際のOSRフィールドとSBRフィールドを確認してください。
S32K312 LPUARTは1 Mbpsの通信をサポートできます。30MHzの動作クロックも、ボーレートを正確に生成できるため適している。正しいクロック、ボーレート設定、フレームフォーマット、ピン構成、レシーバ設定以外に特別な追加設定は通常必要ありません。
よろしくお願いいたします。
パベル