[Armadillo:02072] シリアル受信でデータ取りこぼし

Hiroki Nakamura email@hidden
2007年 9月 22日 (土) 23:31:46 JST


お世話になります。
nakamuraと申します。

Armadillo-9を使用しております。

現在、シリアル送受信でデータを取りこぼす現象が出ております。
考えられる原因等あれば、教えて下さい。
(プログラムの話になってしまいますが、環境がArmadilloの場合だけ、
 出ておりますので、参考までに質問させて頂きます。)

試験内容)
・PC側からシリアルt通信にて、Armadillo-9に対してデータ送信。
 (データ数は、618byte)

環境)
・シリアル送受信を行うプログラムをPC <-> Armadillo-9両方に配置
・シリアルフレームは、下記構造としています。
 データレングス(2byte)/ダミー(2byte)/データ(可変)/CRC(2byte)
・送信処理は、write関数で行い、戻り値をみて、送信データ数を
 カウントして送信する処理としている。
・受信処理ではread関数で行い、戻り値をみて、データレングス分、
 受信する処理とする。

現象)
・Armadilo-9が、受信データを10〜20byte取りこぼす。
・read関数の後で、受信したサイズ及び受信データをプリントで表示
 させた所、あるタイミングで、データ(10〜20byte)を取りこぼしている。
 (↑後述のシリアルモニタで確認した内容と比較した結果)

確認した内容)
・PCを受信側にした場合、現象が発生しない。
 (Armadilo-9が受信側の時のみ現象発生)
・受信処理では、select関数を使用しているが、エラーは出ていない。
・read関数でエラーは出ていない。
・シリアルモニターで確認した所、送信側から送信したデータが
 シリアル線に流れている事は確認済み。(送信側に問題はない。)
・データ数が120byte以下の場合は、現象が出ない。
 (データが少ない時は正常に送受信する。)
・シリアルオープン時の設定は以下としています。(一部、抜粋)
 #define BAUDRATE B19200

  struct termios newtio;

  newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
  newtio.c_iflag = IGNPAR;
  newtio.c_oflag = 0;
  newtio.c_lflag = 0; /* 非カノニカル */
・Armadillo-9では、主なプロセスとして
  Mysql
  Apache2
  PHP
 を起動しています。
 
以上、
よろしくお願いします。




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