このエントリーをはてなブックマークに追加

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

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;
	}

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

よろしくお願いします。

製品: 

  • Armadillo-420

- linux-3.14であれば、cat /proc

- 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