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を有効にする方法を教えて頂きたいです。
よろしくお願いします。
at_mizo
2025年7月17日 9時30分
溝渕です。
> /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が有効になっています。上記パッチだけで利用可能になるか不明ですが、試してみる価値はあるかと思います。