Armadilloフォーラム

imx21-uart.1: Rx FIFO overrun

tamuki

2025年7月16日 17時15分

タヌキです。

以下についてご教授ください。

armadillo-420を使用しております。
開発環境、Linuxカーネル環境は以下の通りです。

・S/N:097438
・開発環境:atde5-amd64-20191016.tar.gz
・Atmark-Dist:atmark-dist-20191216.tar.gz
・Linuxカーネル:linux-3.14-at13.tar.gz

armadillo-420上で動作する以下プログラムを作成しています。
①CAN通信:相手機器から40msでステータス(8byte/回)を受信する。
 ※CAN通信には別売りのATB-A400CANを使用しております。
②RS-232C通信:相手機器から40msでステータス(44byte/回)を受信する。

①、②をそれぞれ単独で動作する事を確認しております。
しかし、①の後に②の機器を接続すると、①のCAN通信が止まってしまいます。

/var/log/messegesを見ると以下のログが大量に記録されていました。
>(none) user.err kernel: imx-uart imx21-uart.1: Rx FIFO overrun

原因としてはバッファーがオーバーフローしたものと推測しています。
そこで、バッファーサイズを増やそうと考えましたが、以下マニュアルの9.3.3UARTに記載の「関連するソースコード」の、どのファイルを修正して良いのかわかりません。何を修正すべきでしょうか?
 「Armadillo-400シリーズ
  ソフトウェアマニュアル
  Version2.2.2、2022/09/28」

または、DMAを有効にする方法を教えて頂きたいです。

よろしくお願いします。

コメント

溝渕です。

> /var/log/messegesを見ると以下のログが大量に記録されていました。
> >(none) user.err kernel: imx-uart imx21-uart.1: Rx FIFO overrun
>
> 原因としてはバッファーがオーバーフローしたものと推測しています。

いえ。オーバーフローしたのは、SoC(i.MX257)のUARTコアのFIFOです。(アプリケーションやLinuxカーネルで実装可能な)ソフトウェアバッファーではありません。

> そこで、バッファーサイズを増やそうと考えましたが、以下マニュアルの9.3.3UARTに記載の「関連するソースコード」の、どのファイルを修正して良いのかわかりません。何を修正すべきでしょうか?

SoCのFIFOサイズは固定です。その為増やす事はできません。

> または、DMAを有効にする方法を教えて頂きたいです。

linux-3.14-at時点では、i.MX257のUARTでDMAは無効になっています。現在では以下が適用されており、

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/comm…

i.MXシリーズは全てDMAが有効になっています。上記パッチだけで利用可能になるか不明ですが、試してみる価値はあるかと思います。