g-shinya
2022年5月9日 13時27分
<Armadillo-G3Lの状態>
imx.cを添付いたします。
uname:Linux armadillo 4.9.133-at16 #2 (担当営業者様より、at22での検証もいたしましたが、同じ結果となりました。)
SMP PREEMPT Fri May 21 18:01:52 JST 2021 armv7l GNU/Linux
dpkg -l | grep "atmark":
ii atmark-x1-base 2.5.2-1 armhf Atmark Techno X1 platform base software
ii libmm-glib0:armhf 1.6.4-1atmark8 armhf D-Bus service for managing modems - shared libraries
ii modemmanager 1.6.4-1atmark8 armhf D-Bus service for managing modems
・DMA無効
・RXTL_UART=1
参考フォーラム
https://armadillo.atmark-techno.com/forum/armadillo/8523
<症状>
ArmadilloG3LのRS485通信ポートで使用している
通信ライブラリ(Pyserial)が正常に動作しなくなる。
<詳細>
in_waiting()の受信数分をread()で取り出してもin_waiting()の
受信数が「0:受信データなし」にならない。
受信数がゼロにならず、返信データが途切れない状態が続くため
受信が終了しない(できない)。
フローチャート参照お願いいたします。
<症状再現方法>
RS485の信号線を短い間隔で短絡/開放させる。
(RS485通信線にノイズを入れる)
<質問>
上記動作になる原因と回避方法、また復旧方法を教えてください。
ファイル | ファイルの説明 |
---|---|
imx.c | |
フローチャート.png |
コメント
g-shinya
>> <症状再現方法>
>> RS485の信号線を短い間隔で短絡/開放させる。
>> (RS485通信線にノイズを入れる)
>ノイズを入れない場合は、受信数が「0:受信データなし」になり、受信が終了しますか?
(1)正常に動作している状態
受信データを通信ライブラリから取得すると受信数はゼロになります。
→受信が正常終了。
(2)ノイズによって受信数がゼロにならない状態
ノイズを停止しても受信数はゼロになりません。
→受信が終了しません。
>> 受信数がゼロにならず、返信データが途切れない状態が続くため
>> 受信が終了しない(できない)。
>このとき、何が読めますか?
読みだしたデータは全て0xffでした。
受信数は時間が経過すると変化(増加)していました。
> また、この(受信が終了しない)状態に陥った際に、対向機器から文字を送信した場合、その文字を受信することはできますか?
こちらについては再度確認し連絡いたします。
g-shinya
受信数がゼロにならない状態(通信ライブラリpyserialのAPIが受信し続けている状態)で
下記試験を行いました。
【試験内容】
試験1:485通信ラインを短絡/開放
試験2:485通信ラインにPCからデータを送信
【試験結果】
試験1:
受信数がゼロにならない状態を継続した。
試験2:
1byte目以外のデータは正常に受信できた。
また、通信ライブラリの受信バッファ内にある受信数がゼロになり、正常復帰した。
(1byte目は下記太字データ)
・送信データ: 0x00~0x0Aまでの10byteを送信
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A
・受信データ:
(FFデータが続く)~0xFF,0xFF,0x03,0x01,0x02,0x03,0x04,0x05,
0x06,0x07,0x08,0x09,0x0A
以上よろしくお願いいたします。
at_mizo
溝渕です。
ご確認ありがとうございます。
現在までの調査結果より、次のようになると思います。
* 485通信ラインにノイズが入らない限りは問題は発生しない
* 問題が発生すると(対向機器からデータ送信が無いのに)0xffを受信し続ける
* 問題が発生した状態で対向機器からデータ送信されると復帰する
問題の原因がデバイスドライバかアプリケーションかを切り分けたいと思います。次のようにpythonを使わない場合でも同様の挙動となりますか。
[g3l]# stty -F /dev/ttymxc1 raw speed 115200 [g3l]# od -x /dev/ttymxc1
上記コマンド例では、ボーレート等のシリアル設定は適当に設定しています。構成に合った設定に適宜読み変えてください。
また、RS485の通信設定(全二重/半二重等)はどのようになっていますか。もしU-Bootの保守モードから設定している場合は、そのコマンドを教えてください。
https://manual.atmark-techno.com/armadillo-iot-g3l/armadillo-iotg-g3l_p…
at_mizo
2022年5月18日 13時36分
溝渕です。
すみません。いくつか質問させてください。
> <症状再現方法>
> RS485の信号線を短い間隔で短絡/開放させる。
> (RS485通信線にノイズを入れる)
ノイズを入れない場合は、受信数が「0:受信データなし」になり、受信が終了しますか?
> 受信数がゼロにならず、返信データが途切れない状態が続くため
> 受信が終了しない(できない)。
このとき、何が読めますか?
また、この(受信が終了しない)状態に陥った際に、対向機器から文字を送信した場合、その文字を受信することはできますか?