Armadilloフォーラム

Armadillo420のUART5の受信ポートが動作しない

huehara

2017年4月3日 23時10分

Armadillo420でUART5を使用したいのですが、受信ポートのみだけが動作しません。
送信は正常に動作しております。

カーネルの設定では下記の通りで、UART5以外は未実装にしてます。

  │ │     [ ] Enable UART3 at CON9                                         │ │  
  │ │     [ ]   Enable UART3 at CON11                                      │ │  
  │ │     [ ] Enable UART4 at CON11                                        │ │  
  │ │     [*] Enable UART5 at CON9                                         │ │  

特に、UART5のRXDがGPIOに使用されている感じでもなく困っております。
受信データ自体はピンまできているようでハードに問題はないとのことなのです。

下記、抜粋ですがselectで待ち受けているのですが受信しないのです。

    tm.tv_sec = 1;
    tm.tv_usec = 0;
    FD_ZERO(&fds);                      /*  fd_set初期化                */
    FD_SET(fd,&fds);                    /*  fd設定                      */
    rtn = select(fd + 1,&fds,NULL,NULL,&tm); /*  データ受信待ち              */
    if( rtn < 0 ){
        DPRINTF("select error=%d\n",errno);
        return -1;
    }else if( rtn==0 ){
        return 0;
    }

ご教示いただければと思います。

よろしくお願いします。

コメント

at_kojiro.yamada

2017年4月19日 13時59分

- linux-3.14-atであれば、cat /proc/tty/driver/IMX-uart で、kernelが送受信
した文字数等を確認できます

4: uart:... 行の rx が 1 以上になっていれば、何かしら文字を受信しています。

以下の場合は、UART5は文字を送受信していない、ということになります。

[root@armadillo420-0 (ttymxc1) ~]# cat /proc/tty/driver/IMX-uart                
serinfo:1.0 driver revision:                                                    
1: uart:IMX mmio:0x43F94000 irq:48 tx:3035 rx:42 RTS|CTS|DTR|DSR                
4: uart:IMX mmio:0x5002C000 irq:56 tx:0 rx:0 DSR|CD|RI

- カノニカルモードになっているのではないでしょうか?

struct termios の c_lflag に ICANON フラグが立ってないか確認してみて
ください。

カノニカルモードでは入力は行単位に行われるので、
たとえ何文字か受信した状態であっても行区切り文字を受信するまでは
read()やselect()でデータ受信待ちになります。
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/termios.3.html

huehara

2017年4月30日 1時17分

> - linux-3.14-atであれば、cat /proc/tty/driver/IMX-uart で、kernelが送受信
> した文字数等を確認できます
>
> 4: uart:... 行の rx が 1 以上になっていれば、何かしら文字を受信しています。
>
> 以下の場合は、UART5は文字を送受信していない、ということになります。
>

> [root@armadillo420-0 (ttymxc1) ~]# cat /proc/tty/driver/IMX-uart                
> serinfo:1.0 driver revision:                                                    
> 1: uart:IMX mmio:0x43F94000 irq:48 tx:3035 rx:42 RTS|CTS|DTR|DSR                
> 4: uart:IMX mmio:0x5002C000 irq:56 tx:0 rx:0 DSR|CD|RI
> 

>
>
> - カノニカルモードになっているのではないでしょうか?
>
> struct termios の c_lflag に ICANON フラグが立ってないか確認してみて
> ください。
>
> カノニカルモードでは入力は行単位に行われるので、
> たとえ何文字か受信した状態であっても行区切り文字を受信するまでは
> read()やselect()でデータ受信待ちになります。
> https://linuxjm.osdn.jp/html/LDP_man-pages/man3/termios.3.html
>
at_kojiro.yamada様

返事が遅くなって申し訳ございません。

カノニカルモードにはなっていなかったのですが、受信許可フラグの設定ミスでした。

c_cflagを受信可にしてませんでした。

ありがとうございました。