ユーザ用ツール

サイト用ツール


xg_series_devel:use_serialport:start

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
xg_series_devel:use_serialport:start [2018/03/13 10:20]
admin
xg_series_devel:use_serialport:start [2020/12/10 13:51] (現在)
admin
ライン 1: ライン 1:
 +====== シリアルポートの利用 ======
 +
 +XG-50 には、dmesg で出力されるとおり、シリアルポートが複数実装されています。
 +
 +<​code>​
 +nsh> dmesg
 +[     ​0.000000] stm32l4_rng_initialize:​ Initializing RNG
 +[     ​0.000000] registered UART4 as /​dev/​console.
 +[     ​0.000000] registered UART4 as /dev/ttyS0.
 +[     ​0.000000] registered UART1 as /dev/ttyS1.
 +[     ​0.000000] registered USART2 as /dev/ttyS2.
 +[     ​0.000000] registered USART3 as /dev/ttyS3.
 +[     ​0.001500] Mounting procfs to /proc
 +</​code>​
 +
 +|< 30em 6em 13em 12em >|
 +^  U(S)ART ​ ^  device node  ^  用途 ​ |
 +|  UART4  |  /dev/ttyS0 (/​dev/​console) ​ |  内部コンソール ​ |
 +|  UART1  |  /​dev/​ttyS1 ​ |  BtoB 通信ボード 1  |
 +|  USART2 ​ |  /​dev/​ttyS2 ​ |  D-SUB  RS-232C/​485((RS-485 は XG-50 rev.2のボードで対応)) ​ |
 +|  USART3 ​ |  /​dev/​ttyS3 ​ |  BtoB 通信ボード 2  |
 +
 +
 +BtoB 通信ボード用 UART は、オプションの LTE-M および Wi-SUN 拡張ボードとの通信で利用します。\\
 +ここでは、D-SUB RS-232C/485 での利用方法を記載します。
 +
 +\\
 +
 +===== ハードウェア =====
 +
 +==== モード切替 ====
 +
 +Revison.2 のボードでは、RS-232/​485 をボード上の DIPSW で切り替えることが可能です。
 +
 +{{:​xg_series_devel:​use_serialport:​rev2_rs485_232_select_switch.jpg?​400|}}
 +
 +|<32em 5em 5em 5em 5em 12em>|
 +^  bit1  ^  bit2  ^  bit3  ^  bit4  ^  Mode  |
 +|  **ON** ​ |  OFF  |  -  |  -  |RS-232C|
 +|  OFF  |  **ON** ​ |  -  |  -  |RS-485 (Half Duplex)|
 +|  **ON** ​ |  **ON** ​ |  -  |  -  |RS-422 (Full Duplex)|
 +|  -  |  -  |  OFF  |  -  |RS-485 終端抵抗なし|
 +|  -  |  -  |  **ON** ​ |  -  |RS-485 終端抵抗**あり**|
 +
 +\\
 +
 +==== ピンアサイン ====
 +
 +=== RS-232C ===
 +
 +標準的な全結線の DTE 仕様となっています。
 +
 +|< 20em 2em 3em 3em >|
 +^  Pin No.  ^  信号 ​ ^  方向 ​ ^
 +|  1|  CD  |  IN  |
 +|  2|  RxD  |  IN  |
 +|  3|  TxD  |  OUT  |
 +|  4|  DTR  |  OUT  |
 +|  5|  GND  |  -  |
 +|  6|  DSR  |  IN  |
 +|  7|  RTS  |  OUT  |
 +|  8|  CTS  |  IN  |
 +|  9|  RI  |  IN  |
 +
 +\\
 +
 +=== RS-485 ===
 +
 +|< 20em 2em 3em 3em >|
 +^  Pin No.  ^  信号 ​ ^  方向 ​ ^
 +|  1|  TRX-  |  IN/​OUT ​ |
 +|  2|  TRX+  |  IN/​OUT ​ |
 +|  3|  -  |  -  |
 +|  4|  -  |  -  |
 +|  5|  GND  |  -  |
 +|  6|  -  |  -  |
 +|  7|  -  |  -  |
 +|  8|  -  |  -  |
 +|  9|  -  |  -  |
 +
 +\\
 +
 +===== ソフトウェア =====
 +
 +**/​dev/​ttySx** になっていることから想像できるとおり、[[https://​linuxjm.osdn.jp/​html/​LDP_man-pages/​man3/​termios.3.html|TERMIOS]] のインターフェースで制御を行います((**CONFIG_SERIAL_TERMIOS** を有効にしている前提とします))。
 +
 +\\
 +
 +==== 制御の手順 ====
 +
 +一般的なシリアルポート利用の手順としては、下記のような流れとなります((''​apps/​examples/​usbserial/​host.c''​ から))。
 +
 +  * デバイスを open
 +
 +<​code>​
 +  fd = open(g_ttydev,​ O_RDWR);
 +</​code>​
 +
 +  * シリアルポートの設定を取得
 +
 +<​code>​
 +  ret = tcgetattr(fd,​ &tty);
 +</​code>​
 +
 +  * シリアルポートの設定を変更
 +
 +<​code>​
 +  tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);​
 +  tty.c_oflag &= ~OPOST;
 +  tty.c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);​
 +  tty.c_cflag &= ~(CSIZE|PARENB);​
 +  tty.c_cflag |= CS8;
 +
 +  ret = tcsetattr(fd,​ TCSANOW, &tty);
 +</​code>​
 +
 +  * データを read/write (データ送受信の実行)
 +
 +<​code>​
 +  nbytes = read(fd, g_iobuffer, BUFFER_SIZE-1);​
 +
 +  nbytes = write(fd, g_shortmsg, sizeof(g_shortmsg));​
 +</​code>​
 +
 +  * デバイスを close
 +
 +<​code>​
 +  close(fd);
 +</​code>​
 +
 +\\
 +
 +==== 注意点 ====
 +
 +RTS/CTS のフロー制御は ''​c_cflag''​ の **CRTSCTS**((POSIX にはない、Linux の実装)) ではなく、**make menuconfig** で設定を行います。
 +
 +{{:​xg_series_devel:​use_serialport:​menuconfig_uart_rtscts.png?​600|RTS/​CTS flow control}}
 +
 +\\
  
xg_series_devel/use_serialport/start.1520904039.txt.bz2 · 最終更新: 2018/03/13 10:20 by admin