[Armadillo:05446] Re: DMA転送を有効にした場合のシリアル通信プログラムについて

nakai email@hidden
2010年 7月 15日 (木) 18:12:06 JST


nakaiです。

たぶん確認済みだとは思いますが、
>>>       newtio.c_lflag = ICANON;
カノニカルモードを指定しているので、PC側からは改行コードを含む
文字列を転送していますよね?
そうでない場合は、改行が入らなければReadはできないので確認してみてください。

参考:  http://www.linux.or.jp/JM/html/LDP_man-pages/man3/termios.3.html


あとは、
・ポートの場所
	ttymxc2は、基板の内側の方(1,3,5,7,9ピン)で、
	ttymxc4は、基板の外側の方(2,4,6,8,10ピン)となります。
・5pinシリアル変換ケーブルの接続
などの確認をお願いします。

また、
stty -F /dev/ttymxc2 38400
echo "Test" > /dev/ttymxc2
と実行した場合、PC側にメッセージ"TEST"が表示されるでしょうか?
PC側は、TeraTermなどで受信させてみてください。





(2010/07/15 14:53), Myoukan Kiyohito wrote:
> 明官です。
> 
>>> 確認したところ、read関数でエラー(-1)が返ってくることがわかりました。
>> -1で返ってきたときのerrnoは何に設定されているのでしょうか?
> →「read関数でエラー(-1)が返ってくる」と書きましたが誤りがありました。
>  read関数がエラーになったのは、シリアルインターフェースが間違っていたからでし
> た。
>  ("/dev/ttyS0"にしていたため、「Bad file descriptor」というエラーが出ていまし
> た)
>  
>  シリアルインターフェースを"/dev/ttymxc2"とし、再度確認したところ
>  「read関数で受信できていない」ということがわかりました。
>  read関数で止まったまま、PCからデータを送信しても反応しません。
>  (エラーも発生せず、受信待ちのままになっています)
> 
>> また、open時にエラーチェックされていないためわかりかねますが、
>> ある程度文字列が表示されてから、
>> readがエラーとなるのでしょうか?
>> それとも、1発目のreadでエラーになりますか?
> →全く表示しません。1発目のread関数で止まったままです。
> 
> 以上です。よろしくお願いいたします。
> 
>> -----Original Message-----
>> From: email@hidden
>> [mailto:email@hidden] On Behalf Of nakai
>> Sent: Thursday, July 15, 2010 12:20 PM
>> To: Armadillo series general discussion list
>> Subject: [Armadillo:05439] Re: DMA転送を有効にした場合のシリアル通信プログラム
>> について
>>
>> nakaiです。
>>
>> 実機で確認できていないのですが、、
>>> 確認したところ、read関数でエラー(-1)が返ってくることがわかりました。
>> -1で返ってきたときのerrnoは何に設定されているのでしょうか?
>>
>> また、open時にエラーチェックされていないためわかりかねますが、
>> ある程度文字列が表示されてから、
>> readがエラーとなるのでしょうか?
>> それとも、1発目のreadでエラーになりますか?
>>
>>
>> DMA有効時のシリアル転送には、まだバグがある可能性があります。
>>
>>
>>
>>
>> (2010/07/13 9:38), Myoukan Kiyohito wrote:
>>> 明官と申します。
>>>
>>> C言語のプログラムはある程度かけますが、
>>> Linux,Armadilloに関しては初心者です。
>>>
>>> Armadillo420でDMA転送を有効にしてシリアル通信のテストを行ったところ
>>> うまく動作しませんでした。
>>> 確認したところ、read関数でエラー(-1)が返ってくることがわかりました。
>>>
>>> DMA転送を使用した場合は、単純にread関数で受信することはできないのでしょう
>> か?
>>> 参考になる情報がありましたら、ご教授お願いいたします。
>>>
>>> <テスト>
>>> ・接続は、PCとArmadillo420をシリアルクロスで接続。
>>> ・PCから送信した文字をArmadillo420で受信し表示するプログラムを使用。
>>> ・シリアルインターフェース2を使用。
>>> ・転送速度は38400bps。
>>> ・DMA転送の設定は、linux2.6.x/arch/arm/mach-mx25/serial.h の
>>>  UART3_DMA_ENABLE=1
>>>  とすることで、有効にしました。
>>>
>>> <テストプログラム>
>>> #include<stdio.h>
>>> #include<sys/types.h>
>>> #include<sys/stat.h>
>>> #include<fcntl.h>
>>> #include<termios.h>
>>>
>>> #define SERIAL_PORT "/dev/ttymxc2"
>>> #define FALSE 0
>>> #define TRUE 1
>>> volatile int STOP=FALSE;
>>>
>>> int main()
>>> {
>>>       char buf[255];                    /* バッファ */
>>>       int fd=0;                           /* ファイルディスクリプタ */
>>>       struct termios oldtio, newtio;    /* シリアル通信設定 */
>>>       int res;
>>>
>>>       fd = open(SERIAL_PORT, O_RDWR | O_NOCTTY);   /* デバイスをオープンする
> */
>>>       tcgetattr(fd,&oldtio); /* 現在のシリアルポートの設定を待避させる*/
>>>       bzero(&newtio, sizeof(newtio)); /* 新しいポートの設定の構造体をクリアす
>> る */
>>>
>>>       newtio = oldtio;                  /* ポートの設定をコピー */
>>>       newtio.c_cflag = B38400 | CS8 | CLOCAL | CREAD;
>>>       newtio.c_iflag = IGNPAR ;
>>>       newtio.c_oflag = 0;
>>>       newtio.c_lflag = ICANON;
>>>
>>>       tcflush(fd, TCIFLUSH);
>>>       tcsetattr(fd,TCSANOW,&newtio);
>>>
>>>       while (STOP==FALSE) {     /* 終了条件が満たされるまでループ */
>>>          if((res = read(fd,buf,255)) == -1){
>>>              printf("read error\n");
>>>              continue;
>>>          }
>>>          write(fd,buf,res);
>>>          buf[res]=0;             /* printf で使うため,文字列の終端をセットす
>> る */
>>>          printf(":%s:%d\n", buf, res);
>>>          if (buf[0]=='z') STOP=TRUE;
>>>       }
>>>       /* ポートの設定をプログラム開始時のものに戻す */
>>>       sleep(1);
>>>       tcsetattr(fd,TCSANOW,&oldtio);
>>>       close(fd);
>>>       return 0;
>>> }
>>>
>>> 以上、よろしくお願いいたします。
>>>
>>> _______________________________________________
>>> armadillo mailing list
>>> email@hidden
>>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>>>
>>
>> _______________________________________________
>> armadillo mailing list
>> email@hidden
>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
> 
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
> 




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