[Armadillo:08628] シリアル受信読出が途中で止まる

風間 email@hidden
2013年 2月 25日 (月) 13:29:18 JST


お世話になります、
風間と申します。

短く纏められず、長文となってしまいました、
すみません。

アルマジロのアプリ開発は数年やっているのですが
今まで経験したことのない現象がでて解決できずに
います。
もし同じような現象を経験した事がある方が
いましたらと思い投稿しました。

今までアルマジロ9で制御していた装置を
アルマジロ460へ置き換えするという作業をしています。
シリアル通信ポートの先にrs485の変換器が接続されており
そこに繋がっているモジュールと通信するという装置で
アルマジロ側からコマンドを送り、その応答を受信する
という形のものです。

現象というのは、この応答がアルマジロまで届いて
取り込まれているのに受信データの一部(応答の終わり部分)
がアプリまで上がってこないと思われるものです。

例えば、コマンドを2回送った時に
1回目のコマンドでその応答の途中までが
読み出され、続けて2回目のコマンドを
送ると、1回目の応答の残りの部分から読出しされる
という動きになります。
コマンドを1回しか送らない場合は、応答の読出しは
途中で終わったままとなります。

どこで止まっているのかを知りたかったので
ドライバに printk を追加して受信データを出力するように
してみました。
n_tty.c の n_tty_receive_buf で通信データと思われる
引数 cp の内容を出力するようにした場合は
アプリ上で見られた状況と同じでした。

uart からデータ読出ししていると思われる
mxc_uart.c の mxcuart_rx_chars で読出しデータを出力
するようにしたところ応答が全て読出しされました。
しかもその時にはアプリでも応答が全て読出しされ、
状況がかわります。
mxcuart_rx_chars を元に戻すとアプリの動作も元に戻ります。

なにが違うのかという事で mxcuart_rx_chars に printk を
追加した箇所を udelay で 500usのディレイとしたところ
その場合もアプリでデータの読み出しができました。
これを 100us にすると応答が途中でとまる現象に戻ります。

このような現象になった方いらっしゃらないでしょうか?
また、こうなる原因で考えられる事は何でしょうか?

宜しく、お願いします。






armadillo メーリングリストの案内