Armadilloフォーラム

シリアル通信時の送信バイト間隔について

saigusa

2020年10月2日 9時50分

お世話になります。
三枝です。

Armadillo-X1に自社製モジュールを接続し、
UART1を使用してシリアル通信をしております。
接続先製品の通信仕様の都合で、1バイト目と2バイト目以降のパリティを変更して通信しなくてはいけないのですが、
1バイト目と2バイト目の間隔が最大で30[ms]程度空いてしまいます。
バイト間隔を10[ms]以内に収めたいのですが、何らかの方法がございましたら、ご教授していただけませんでしょうか。
Linuxカーネルは、v4.9-x1-at12 を使用しており、こちらを使用して製品にする予定です。
送信処理は、添付資料「シリアル送信処理.jpg」のような記述をしております。(pythonで記述しております。)
製品の量産時期が迫っておりまして、大変恐縮ですが、お早めにご回答いただければ幸いです。
よろしくお願い致します。

ファイル ファイルの説明
シリアル送信処理.jpg
コメント

at_akihito.irie

2020年10月2日 18時29分

入江です。

LinuxのRT-Preemptパッチは試されましたでしょうか?

添付の.tar.gzアーカイブを展開し出てきた3つのパッチをカーネルに適用して
いただき、x1_defconfig適用の上お使いください。
お客様の方でconfigを変更されている場合は、手動でPREEMPT_RT_FULLを有効
にした上でビルドしてください。

当方で linux-4.9-at12 でビルド、起動確認済みです。

ファイル ファイルの説明
patches.tar.gz

三枝です。

ご回答ありがとうございます。
添付いただいた3つのパッチをカーネルに適用し、
PREEMPT_RT_FULLを有効にした状態でビルドを実施し、
生成物のuImageとarmadillo_x1.dtbを使用しましたが、
結果は変わりませんでした。

その他に、何らかの方法が有りましたら、ご教授していただけますでしょうか。

なお、関係しているかは分かりませんが、
こちらの環境では、
下記フォーラムに記載されているドライバソース(imx.c)のRXTL_UARTのdefine値を「16」から「1」に変更しております。
https://armadillo.atmark-techno.com/forum/armadillo/3892

at_akihito.irie

2020年10月5日 16時46分

入江です。

いくつか確認させてください。

1. 1バイト目と2バイト目の間隔はいつもほぼ一定でしょうか。10[ms]より短
くなることもありますでしょうか。
2. シリアル通信を行っているpythonスクリプトの実行時のnice値を変えた場
合にも同様に30[ms]程度の間隔が空きますでしょうか?(以下実行例)

[armadillo]# nice -n -20 python3 [pythonスクリプト名]

以上、ご確認ください。よろしくお願いいたします。

三枝です。

1点目については、10[ms]より短くなることはありません。
2点目については、nice値を変えた場合も同様に30[ms]程度の間隔があいております。

試しにですが、
出力先をttyUSB0に変更して、同様に波形を測定したところ、
1バイト目と2バイト目の間隔が10[ms]以内に収まっておりました。
(1byte目のストップビット送信完了から、2byte目のスタートビット送信開始までの時間です。)
ttymxc0でも同様に送信できるようにしたいと考えております。

以上 よろしくお願い致します。

at_akihito.irie

2020年10月8日 11時24分

入江です。

drivers/tty/serial/imx.c の、

#define TXTL_DMA 8 /* DMA burst setting */

#define TXTL_DMA 2 /* DMA burst setting */

に変更した場合に送信間隔は短くなりますでしょうか。
ご確認よろしくお願いいたします。

三枝です。

入江様、ご回答ありがとうございます。
試してみましたが、結果は変わりませんでした。
その他に、何か方法が有りましたら、ご教授いただけますと幸いです。
よろしくお願い致します。

溝渕です。

pySerialをそのまま利用した場合も、同様の挙動となるか確認していただけますか。