この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
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}} | ||
+ | |||
+ | \\ | ||