sirakawa
2025年7月24日 20時38分
==========
製品型番:Armadillo-420
Debian/ABOSバージョン:atmark-dist v1.55.1
カーネルバージョン:Linux 3.14.36-at13
3G/LTE モジュール情報 (Debianのみ):
その他:
==========
いつもお世話になっております。
【構成】
[Armadillo-420] - [USBハブ] - [対向機]
このような構成でUSBシリアル通信をしています。
動作確認用に、同じサイズ(3600バイト)・同じデータ(連番データ)を対向機から毎秒受信しています。
対向機に対してデータ送信指示を送って、データ受信を行っています。
Armadillo-420側ではデバイスファイルをopen/send/read/closeするプログラムを使用しています。
【通信設定】 ※仕様で決まっているため、変更不可。
ボーレート:921600
パリティ:なし
フロー制御:なし
【事象】
以下の事象が起きています。
(a)受信サイズが想定値未満になるときがある。サイズは不定。データの末尾が欠落するのではなく、中盤のデータが欠落する。
(b)受信データの間に0x00が間に挟まるときがある。挟まる場所は不定。
今のところ、(a)(b)は同時に発生します。発生時間も不定です。
期待値:・・・,0xa1,0xa2,0xa3,0xa4,・・・,0xd1,0xd2,0xd3,・・・,0xf6,0xf7,0xf8,・・・
受信値:・・・,0xa1,0xa2,0x00,0xa3,0xa4,・・・,0xd1,0xf7,0xf8,・・・
→事象(a):0xd2~0xf6が欠落している
事象(b):0xa2の後に想定外の0x00が入っている
【お聞きしたい内容】
(a)について
フロー制御を使用していないUSBシリアル通信であるため、データの欠落は回避しようがないでしょうか?
(b)について
(a)はまだ理解できるのですが、こちらが理解できません。
どのような時にこれが起こり得るか、心当たりのある方いらっしゃいませんでしょうか?
事象について、問題箇所の切り分け(アプリケーション/カーネル/対向機/その他)ができておりません。
例えばreadでの読み出しサイズが1200のとき、0x00も含めて1200バイトとなっているため、現状はアプリケーションが原因ではないという想定をしています。また、対向機の送信データがどうなっているかを確認しようとしています。
このような状況で申し訳ございませんが、ご回答いただけますと幸いです。よろしくお願いいたします。
解析の方法の参考情報などでも構いません。
at_mizo
2025年7月25日 8時53分
溝渕です。
> (a)について
> フロー制御を使用していないUSBシリアル通信であるため、データの欠落は回避しようがないでしょうか?
そうですね。一般論ですが、フロー制御はこのようなデータ欠落を防止する為に存在します。フロー制御無効の場合は(特に非リアルタイムOSであるLinuxの場合は)データが欠落する可能性があります。
データの欠落を防止するには、フロー制御を有効にすうか、ユーザーランドで(zmodemのような)プロトコル実装をするのが良いかと思います。
> (b)について
> (a)はまだ理解できるのですが、こちらが理解できません。
> どのような時にこれが起こり得るか、心当たりのある方いらっしゃいませんでしょうか?
心当たりはありませんが、切り分け方法だけ。
以下2つが考えられます。
- 実際に0x00が送信されている(だからArmadilloが受信する)
- 実際には0x00が送信されていない(だけどArmadilloが受信する)
> [Armadillo-420] - [USBハブ] - [対向機]
Armadillo-420-USBハブ間であれば、USBアナライザ、
USBハブ-対向機間であれば、プロトコルアナライザやオシロスコープ
で確認可能かと思います。
他には、Armadillo-420のtty設定で充填文字(sttyコマンドでいうところのofill)が設定されていないか等、プログラムの確認をする事も有益かと思います。