1978233_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

1978233_ja-JP

1978233_ja-JP

UART3 オーバーラン エラーが RT1020 で発生

Hi,

RT1020のuart3割り込みを使用していますが、rs-485通信にはuart3を使用しており、その速度は3MBpsです。

また、他の通信にはLPSPI4 CMSISドライバーハンドラーを使用しています。

uart3 個々は正常に動作しますが、spi ハンドラを追加すると、オーバーランが発生し始めます。

まだオーバーランフラグをクリアしていますが、なぜこのフラグが設定されているのですか。

また、このフラグが設定されている場合の1つのクエリは、この場合、すべてのデータを受け取るか、または失われます

Uart_status register.PNGUart_status register.PNG

?

i.MXRT 102倍Re:UART3オーバーランエラーがRT1020で発生

Hi @hanmant 

お返事ありがとうございます。

NXPのポリシーにより、ソースコードを直接お送りすることはできません。

私の確認コードはMIMXRT1020-EVKおよびMIMXER1064-EVKボードに基づいていますが、私の確認コードはカスタマイズされたボードに適しているとは思いません

また、あなたの質問に関する重要なコードのスクリーンショットをお送りしました。

次の3つのプロジェクトを検証プロジェクトに統合します。

MIMXRT1020-EVKボードの場合:

1: evkmimxrt1020_pit

2:evkmimxrt1020_lpi2c_edma_b2b_transfer_master

3:evkmimxrt1020_lpuart_edma_transfer

MIMXRT1064-EVKボードの場合:

1:evkmimxrt1064_lpi2c_edma_b2b_transfer_slave

それでもI2Cプログラムが正しく機能しない場合は、I2Cプログラムに問題がある可能性があります。他の機能を無効にして、I2Cだけをテストして、正常に動作するかどうかを確認することをお勧めします。

私は現在の問題を解決したと思います。このケースを閉じるように私に言ってください。

それでも問題が解決しない場合は、新しいケースを作成してください、ありがとう。


BR

mayliu

Re:UART3オーバーランエラーがRT1020で発生こんにちは @mayliu
貴重なご提案をいただき、ありがとうございます。
あなたのコードを私と共有していただけませんか。
Re:UART3オーバーランエラーがRT1020で発生

Hi @hanmant ,

edma_b2b_transfer_masterとしてMIMXRT1020-EVKボードを使用し、edma_b2b_transfer_slaveとしてMIMXRT1064-EVKボードを使用します。

mayliu1_4-1732184845065.jpegmayliu1_4-1732184845065.jpeg


MIMXRT1020-EVKボードをベースにプロジェクトを作成し、このボードをI2Cマスターとして設定し、UART TX、UART RXを追加し、完全に4つのDMAチャネルを使用します。MIMXRT1020-EVKプロジェクトとMIMXRT1064-EVKプロジェクトの両方のコードを一部修正します。

その結果、両方のプロジェクトが正常に実行されます。

mayliu1_5-1732184992668.pngmayliu1_5-1732184992668.png

だから、あなたのコードを確認してください、私があなたに示した重要なコードは以下です。

mayliu1_0-1732184067449.pngmayliu1_0-1732184067449.png

mayliu1_1-1732184078401.pngmayliu1_1-1732184078401.png

mayliu1_2-1732184103892.pngmayliu1_2-1732184103892.png

mayliu1_3-1732184133614.pngmayliu1_3-1732184133614.png

試してみて、このケースを閉じるように私に言ってください。

それでも疑問がある場合は、新しいケースを作成してください。


BR

mayliu

Re:UART3オーバーランエラーがRT1020で発生こんにちは @mayliu
返信ありがとうございます。
freeRTOSではなく、裸のmatelを使用しています。
裸のボードプロジェクトを確認して下さい。
Re:UART3オーバーランエラーがRT1020で発生

Hi @hanmant ,


あなたの返信をありがとう、私は私の側でそれをやってみます。

プロジェクトがFreeRTOSオペレーティングシステムを使用しているか、ベアボードを使用しているかを教えてください。私はあなたが行うようにプロジェクトを作成し、検証しようとします、それは非常に重要です。

どうかご辛抱ください、ありがとう。

BR

mayliu

Re:UART3オーバーランエラーがRT1020で発生こんにちは @mayliu
返信ありがとうございます。
2つのDMAを追加するだけで、これらのことをシミュレートできますか:1つはUART、もう1つはI2Cで、優先度が競合するかどうかを確認できます
Re:UART3オーバーランエラーがRT1020で発生

Hi @hanmant ,


返信ありがとうございます。

よろしければ、現在のケースリストの項目が多すぎるため、新規にケースを作成してください。

モジュールを DMA で適切に動作させる場合、特に一部のモジュールをタイムリーに処理する必要がある場合は、使用するすべての DMA チャネルの優先順位付けを検討する必要があります。

あなたのプロジェクトとDMAの優先設定がわかりません。ですから、都合が良ければコードを送ってください。

不便な場合は、この2つの機能を検討し、パラメータを再確認することをお勧めします。

void EDMA_SetChannelPreemptionConfig(DMA_Type *base, uint32_t channel, const edma_channel_Preemption_config_t *config)
NVIC_SetPriority

それがあなたの助けになることを願っています。
それでもご不明な点がございましたら、お気軽にお知らせください。


BR 

mayliu

Re:UART3オーバーランエラーがRT1020で発生こんにちは @mayliu
返信ありがとうございます。
この問題を解決する方法を教えてください。
それでも、私はこのDMAの優先課題に直面しています。
Re:UART3オーバーランエラーがRT1020で発生

Hi @hanmant ,


更新していただきありがとうございます。

私はあなたの返信を再確認しました、私はあなたが正しいと思います。おそらく、I2C DMAとUART DMAの優先順位が競合しているためです。


それがあなたの助けになることを願っています。
それでもご不明な点がございましたら、お気軽にお知らせください。


よろしくお願いいたします。

mayliu


Re:UART3オーバーランエラーがRT1020で発生こんにちは @mayliu
更新していただきありがとうございます、
私のカスタムボードRT1020はi2cマスターで、スレーブDACに接続されており、正常に動作します。
しかし、私の問題は、チャネルの優先度(EDMA_SetChannelPreemptionConfig)構成コードを追加しようとすると、コードがi2c dmaに固執することです。
Re:UART3オーバーランエラーがRT1020で発生

Hi @hanmant ,


更新していただきありがとうございます。

アプリケーションがスタックする理由は、開発ボードのI2CマスターノードをI2Cスレーブノードに接続する必要があるためです。

開発ボードで確認しましたが、I2Cスレーブノードに接続しないと、あなたと同じようにエラーが発生します。2つの開発ボードを使用する場合、1つは「lpi2c_edma_b2b_transfer_master」、もう1つは「lpi2c_edma_b2b_transfer_slave」です。2つのボードを正しく接続すると、プログラムは正常に動作します。

"lpi2c_edma_b2b_transfer_master" プロジェクトを作成でき、検証する他のコードを追加しないでください。


よろしくお願いいたします。

mayliu

Re:UART3オーバーランエラーがRT1020で発生こんにちは @mayliu
これは「lpi2c_edma_b2b_transfer_master」であり、この名前の下に、uart、dma、spi、i2c、dmaなどのすべてのモジュールを追加しました。
優先度関連を削除したとき、アプリケーションは正常に動作します
Re:UART3オーバーランエラーがRT1020で発生

Hi @hanmant ,

この問題は、現在のケーステーマ「UART3オーバーランエラーがRT1020で発生する」とは関係ないと思います。

私はあなたと同じようにSDKデモをインポートします、私はこのデモ「lpi2c_edma_b2b_transfer_master」がスレーブとして他のボード上のlpi2cインスタンスを必要とすることを発見しました。

mayliu1_0-1731493594740.pngmayliu1_0-1731493594740.png

I2Cスレーブがないため、lpi2c_master_callbackを呼び出すことができず、アプリケーションがスタックしました。

mayliu1_1-1731493614957.pngmayliu1_1-1731493614957.png


BR

mayliu


Re:UART3オーバーランエラーがRT1020で発生

Hi @mayliu1 

更新していただきありがとうございます。

I2c DMA に引っかかっています。

ここで1つの質問があります:I2C DMAとUART DMAの間で優先順位が競合していますか

しかし、I2C DMAでは、優先度を設定していません。

Re:UART3オーバーランエラーがRT1020で発生

親愛なる@hanmant


更新していただきありがとうございます。

関数を追加すると、アプリケーション全体がスタックすると言いました。

アプリケーション全体が行き詰まったときの詳細情報を教えてください。

1:アプリケーションが行き詰まった場所、どの機能か教えてください。

2:アプリケーションが動かなくなった場合は、RT1020レジスタ、障害、周辺機器のステータスを読み取り、何か異常がないか確認してください。

次の図は、問題を確認するためのデモにすぎません。

mayliu1_0-1731480630949.pngmayliu1_0-1731480630949.png

それがあなたを助けることを願っています!

よろしくお願いいたします。

mayliu

Re:UART3オーバーランエラーがRT1020で発生こんにちは @mayliu

このコードが機能していないのは、この行のコードをコードに追加すると、アプリケーション全体が動かなくなったことを意味します
定数 edma_channel_Preemption_config_t Channel_preemption_config = {
.enableChannelPreemption= false、
.enablePreemptAbility= trueの場合、
.channelPriority(英語)= 15ユー
};
定数 edma_channel_Preemption_config_t Channel14_preemption_config = {
.enableChannelPreemption= false、
.enablePreemptAbility= trueの場合、
.channelPriority(英語)= 14U
};

EDMA_SetChannelPreemptionConfig(EXAMPLE_LPUART_DMA_BASEADDR,LPUART_TX_DMA_CHANNEL,&Channel_preemption_config);
EDMA_SetChannelPreemptionConfig(EXAMPLE_LPUART_DMA_BASEADDR、LPUART_RX_DMA_CHANNEL、&Channel14_preemption_config);

注:このuart DMAには別のi2c DMAもありますが、i2c DMAの優先度は設定していません
Re:UART3オーバーランエラーがRT1020で発生

親愛なる@hanmant


私はあなたの成功を願っています、そしてまた私は少しアドバイスがあります。

LPUART_TransferCreateHandleEDMA機能の後にNVIC_SetPriority機能を置く方が良いでしょう。

あなたの良いニュースを待っています。

mayliu1_0-1730453159868.pngmayliu1_0-1730453159868.png

よろしくお願いいたします。

mayliu

Re:UART3オーバーランエラーがRT1020で発生こんにちは @mayliu
返信ありがとうございます
lpuart_config_t lpuartConfig;

lpuart_transfer_t sendXfer;
lpuart_transfer_tはXferを受け取ります。
edma_config_t userConfig = {0};
uint32_t uiCnt = 0;



/* LPUART を初期化します。*/
/*
※lpuartConfig.baudRate_Bps= 115200U;
* lpuartConfig.parityMode = kLPUART_ParityDisabled;
* lpuartConfig.stopBitCount= kLPUART_OneStopBit;
* lpuartConfig.txFifoWatermark= 0;
* lpuartConfig.rxFifoWatermark= 0;
* lpuartConfig.enableTx = false;
* lpuartConfig.enableRx = false;
*/
LPUART_GetDefaultConfig(&lpuartConfig);
lpuartConfig.baudRate_Bps= UART3_BAUDRATE;
lpuartConfig.enableTx = true;
lpuartConfig.enableRx = true;

LPUART_Init(DEMO_LPUART, &lpuartConfig, DEMO_LPUART_CLK_FREQ);


DMA 割り込みの NVIC 優先度を最高優先度に設定します
NVIC_SetPriority(DMA0_DMA16_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0, 0));DMA0割り込みの優先度が最も高い
DMA1_DMA17_IRQn

#if 定義(FSL_FEATURE_SOC_DMAMUX_COUNT) & FSL_FEATURE_SOC_DMAMUX_COUNT
/* DMAMAX を初期化する */
DMAMUX_Init(EXAMPLE_LPUART_DMAMUX_BASEADDR);
/* LPUARTのチャンネルを設定 */
DMAMUX_SetSource(EXAMPLE_LPUART_DMAMUX_BASEADDR、LPUART_TX_DMA_CHANNEL、LPUART_TX_DMA_REQUEST);
DMAMUX_SetSource(EXAMPLE_LPUART_DMAMUX_BASEADDR、LPUART_RX_DMA_CHANNEL、LPUART_RX_DMA_REQUEST);
DMAMUX_EnableChannel(EXAMPLE_LPUART_DMAMUX_BASEADDR、LPUART_TX_DMA_CHANNEL);
DMAMUX_EnableChannel(EXAMPLE_LPUART_DMAMUX_BASEADDR、LPUART_RX_DMA_CHANNEL);
#endif
/* EDMAモジュールを初期化します */
EDMA_GetDefaultConfig(&userConfig);
#if 定義(BOARD_GetEDMAConfig)
BOARD_GetEDMAConfig(userConfig);
#endif
EDMA_Init(EXAMPLE_LPUART_DMA_BASEADDR, &userConfig);
EDMA_CreateHandle(&g_lpuartTxEdmaHandle, EXAMPLE_LPUART_DMA_BASEADDR, LPUART_TX_DMA_CHANNEL);
EDMA_CreateHandle(&g_lpuartRxEdmaHandle, EXAMPLE_LPUART_DMA_BASEADDR, LPUART_RX_DMA_CHANNEL);
#if 定義(FSL_FEATURE_EDMA_HAS_CHANNEL_MUX) && FSL_FEATURE_EDMA_HAS_CHANNEL_MUX
EDMA_SetChannelMux(EXAMPLE_LPUART_DMA_BASEADDR、LPUART_TX_DMA_CHANNEL、DEMO_LPUART_TX_EDMA_CHANNEL);
EDMA_SetChannelMux(EXAMPLE_LPUART_DMA_BASEADDR、LPUART_RX_DMA_CHANNEL、DEMO_LPUART_RX_EDMA_CHANNEL);
#endif
DMAチャネルの優先順位を設定
EXAMPLE_LPUART_DMA_BASEADDR->DCHPRI[LPUART_TX_DMA_CHANNEL] = (EXAMPLE_LPUART_DMA_BASEADDR->DCHPRI[LPUART_TX_DMA_CHANNEL] & ~DMA_DCHPRI_CHPRI_MASK) |DMA_DCHPRI_CHPRI(15);
EXAMPLE_LPUART_DMA_BASEADDR->DCHPRI[LPUART_RX_DMA_CHANNEL] = (EXAMPLE_LPUART_DMA_BASEADDR->DCHPRI[LPUART_RX_DMA_CHANNEL] & ~DMA_DCHPRI_CHPRI_MASK) |DMA_DCHPRI_CHPRI(15);


EXAMPLE_LPUART_DMA_BASEADDR->DCHPRI0
定数 edma_channel_Preemption_config_t Channel_preemption_config = {
.enableChannelPreemption= false、
.enablePreemptAbility= trueの場合、
.channelPriority(英語)= 14U
};
定数 edma_channel_Preemption_config_t Channel14_preemption_config = {
.enableChannelPreemption= false、
.enablePreemptAbility= trueの場合、
.channelPriority(英語)= 15ユー
};

EDMA_SetChannelPreemptionConfig(EXAMPLE_LPUART_DMA_BASEADDR,LPUART_TX_DMA_CHANNEL,&Channel_preemption_config);
EDMA_SetChannelPreemptionConfig(EXAMPLE_LPUART_DMA_BASEADDR、LPUART_RX_DMA_CHANNEL、&Channel14_preemption_config);
/* LPUART DMA ハンドルを作成します。*/
LPUART_TransferCreateHandleEDMA(DEMO_LPUART, &g_lpuartEdmaHandle, LPUART_UserCallback, NULL , &g_lpuartTxEdmaHandle,
&g_lpuartRxEdmaHandle);
私はこの方法を使うことを考えています。
Re:UART3オーバーランエラーがRT1020で発生

Hi @hanmant ,

以下の定義の違いを確認し、必要に応じて使用してください。

EDMA_SetChannelPreemptionConfig:主にDMAチャネルのプリエンプション優先度を設定するために使用され、複数のDMAタスクが同時に発生した場合に、最も重要なタスクを最初に処理できるようにします。

NVIC_SetPriority:割り込みの優先度を設定するために使用され、複数の割り込みが同時に発生した場合に、優先度の高い割り込みにCPUが最初に応答して処理できるようにします。

よろしくお願いいたします。

mayliu

Re:UART3オーバーランエラーがRT1020で発生こんにちは @mayliu
私はこのように追加することを考えています、
定数 edma_channel_Preemption_config_t Channel_preemption_config = {
.enableChannelPreemption= false、
.enablePreemptAbility= trueの場合、
.channelPriority(英語)= 14U
};
定数 edma_channel_Preemption_config_t Channel14_preemption_config = {
.enableChannelPreemption= false、
.enablePreemptAbility= trueの場合、
.channelPriority(英語)= 15ユー
};

EDMA_SetChannelPreemptionConfig(EXAMPLE_LPUART_DMA_BASEADDR,LPUART_TX_DMA_CHANNEL,&Channel_preemption_config);
EDMA_SetChannelPreemptionConfig(EXAMPLE_LPUART_DMA_BASEADDR、LPUART_RX_DMA_CHANNEL、&Channel14_preemption_config);
それは正しいですか、そうではありません。
ご確認ください
Re:UART3オーバーランエラーがRT1020で発生

Hi @hanmant ,


更新情報ありがとうございます。

私はあなたがNVIC_SetPriority(IRQn_Type IRQn、uint32_t優先度)機能を使用できることをお勧めします。

1: 最初のパラメータはIRQn_Typeです。

デザインによって異なりますが、UART3 が DMA チャネル 0(#define LPUART_TX_DMA_CHANNEL 0U) を使用している場合、最初のパラメーターは DMA0_DMA16_IRQn です。


2:2番目のパラメータは優先度で、値が小さいほど、対応する割り込みの優先度が高くなります。


よろしくお願いいたします。

mayliu

Re:UART3オーバーランエラーがRT1020で発生こんにちは @mayliu

CPUよりもDMAコントローラーにHighest the Priorityを設定する方法を教えてください。
また、DMAでは、SPIよりもUART受信とTXに最高の優先度を設定したいと思います。
プロセスとAPIまたは例を教えてください。
Re:UART3オーバーランエラーがRT1020で発生

Hi @hanmant 


遅延機能を追加するだけです、私はあなたに示しました。

SDK_DelayAtLeastUs(100000, CLOCK_GetFreq(kCLOCK_CpuClk));

1:さらに、UARTの送受信のデータ形式が一貫しているかどうかを確認することをお勧めします。

2:NXP開発ボードとTI開発ボードが共通の基盤を共有しているかどうかを確認してください。

3:UARTの送信と受信の接続が安全かどうか確認してください。



BR 

mayliu

Re:UART3オーバーランエラーがRT1020で発生返信ありがとうございます。
ソースコードファイルを共有していただけませんか。
Re:UART3オーバーランエラーがRT1020で発生

Hi @hanmant 


問題の原因はわかっていると思います。

プログラム内での継続的なデータ伝送により、TiボードUARTレシーバーがオーバーランし、異常なデータ転送が発生する可能性があります。

52バイトのUARTデータを送信した後、遅延を追加することをお勧めしますので、ぜひお試しください。

私はこれを私の側で100回テストおよび検証しましたが、データの送受信は一貫しています。

mayliu1_1-1729667293341.pngmayliu1_1-1729667293341.png


それがあなたの助けになることを願っています。
それでもご不明な点がございましたら、お気軽にお知らせください。

Re:UART3オーバーランエラーがRT1020で発生

Hi @mayliu1 ,

返信ありがとうございます。
今のところ、私はuartレシーバーを使用していません。
私が共有したものは UART 送信のみ (サイズ 52 バッファー) ですが、DMA を使用して Ti ボードで正しいデータを受信しません。

Re:UART3オーバーランエラーがRT1020で発生

Hi @hanmant 


更新情報ありがとうございます。

おっしゃるように、UARTデータのみを送信する場合、なぜUARTオーバーランエラーが発生しましたか?

UART オーバーラン エラーは、UART 受信に関連しています。

そして、UARTデータを送信したい場合は、 それは非常に簡単で、LPUART_SendEDMAを呼び出すだけです

mayliu1_0-1729663958271.pngmayliu1_0-1729663958271.png

BR

mayliu

Re:UART3オーバーランエラーがRT1020で発生返信ありがとうございます。
このプロジェクトでは、DMA uartを使用してデータを送信するだけです。
つまり、私のレシーバーはTiプロセッサデバイスです。
この例ではDMA Uartのみが実行されているため、この例では優先度は重要ではないと思います。
2バイトのデータを送信しようとしましたが、それでも同じ問題があります。
この単純なuart DMA伝送のため、これを機能させるための確固たる解決策を教えてください。
Re:UART3オーバーランエラーがRT1020で発生

Hi @hanmant 

更新情報ありがとうございます。

DMA UART 受信機能インターフェースをいつ、どこで呼び出すのか教えてください。

「ソースファイル内(lpuart_edma_transfer.c)あなたが送信した、DMA UARTデータ受信インターフェースへの呼び出しは見当たりませんでした。

以下の手順で確認をお試しください。
1:DMA_UART割り込みの優先度を他のモジュールよりも高く設定します。
2:ピンポンバッファを使用してUARTデータを受信します。

それがあなたの助けになることを願っています。
それでもご不明な点がございましたら、お気軽にお知らせください。

よろしくお願いいたします。

mayliu

Re:UART3オーバーランエラーがRT1020で発生

Hi @mayliu1 ,

あなたの提案に従って、私はDMAでuartを設定しましたが、それでも損失が見られます。

レシーバー側で明確な損失が見られます(私のレシーバーは別のデバイスコンポートです)。

Re:UART3オーバーランエラーがRT1020で発生

Hi @hanmant 


特にUARTのボーレートが特に高い場合は、DMA UARTを使用することを強くお勧めします。


BR

mayliu

Re:UART3オーバーランエラーがRT1020で発生それで、私はDMA uartを実装する必要がありますか?Re:UART3オーバーランエラーがRT1020で発生

Hi @hanmant 


質問: このオーバーランの問題は、spi cmsis ハンドラが含まれた後に発生します。

回答:spi cmsisハンドラの追加により、UART割り込みのエントリが遅延し、UARTデータを時間内に受信できなくなります。


BR

mayliu

Re:UART3オーバーランエラーがRT1020で発生返信ありがとうございます。
このオーバーランの問題は、spi cmsis ハンドラを組み込んだ後に発生します。
Re:UART3オーバーランエラーがRT1020で発生

Hi @hanmant 

更新情報をいただきありがとうございます。

UART割り込みを使用してUARTデータを送受信すると、UARTバイトごとにUART割り込みがトリガーされます。

UARTのボーレートが非常に高く(3MBps)、頻繁にUART割り込みが発生しますが、これは不合理です。

UARTのボーレートが非常に高い場合にUART割り込みを使用することはお勧めしません。


よろしくお願いいたします。

mayliu

Re:UART3オーバーランエラーがRT1020で発生こんにちは @mayliu1



注意:現在、DMA uartを使用していません。uart割り込みを使用しています。

Re:UART3オーバーランエラーがRT1020で発生

Hi @mayliu1 ,

返信ありがとうございます。

現在、DMA uartを使用しています。uart割り込みを使用しています。

以下のコードスニペットを参照してください。

Re:UART3オーバーランエラーがRT1020で発生

Hi @hanmant 

私たちの製品に興味を持ち、コミュニティをご利用いただき、誠にありがとうございます。

通常、UARTのオーバーランエラーには様々な原因があり、データ処理速度や割り込み処理など、さまざまな側面を考慮する必要があります。


問題を解決するために、以下の質問に回答してください。
まず、UARTデータを受信するためにどのDMA_UARTインターフェース機能を呼び出すか教えてください
次に、インターフェース機能をいつどこで呼び出すか教えてくださいDMA_UART。

私はあなたにいくつかの提案があります。
1:DMA_UART割り込みの優先度を他のモジュールよりも高く設定します。
2:ピンポンバッファを使用してUARTデータを受信します。

それがあなたの助けになることを願っています。
それでもご不明な点がございましたら、お気軽にお知らせください。

良い一日をお過ごしください!

 

よろしくお願いいたします。

mayliu

Tags (1)
No ratings
Version history
Last update:
‎01-06-2026 01:05 AM
Updated by: