XG-50 には、dmesg で出力されるとおり、シリアルポートが複数実装されています。
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
U(S)ART | device node | 用途 |
---|---|---|
UART4 | /dev/ttyS0 (/dev/console) | 内部コンソール |
UART1 | /dev/ttyS1 | BtoB 通信ボード 1 |
USART2 | /dev/ttyS2 | D-SUB RS-232C/4851) |
USART3 | /dev/ttyS3 | BtoB 通信ボード 2 |
BtoB 通信ボード用 UART は、オプションの LTE-M および Wi-SUN 拡張ボードとの通信で利用します。
ここでは、D-SUB RS-232C/485 での利用方法を記載します。
Revison.2 のボードでは、RS-232/485 をボード上の DIPSW で切り替えることが可能です。
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 終端抵抗あり |
標準的な全結線の DTE 仕様となっています。
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 |
Pin No. | 信号 | 方向 |
---|---|---|
1 | TRX- | IN/OUT |
2 | TRX+ | IN/OUT |
3 | - | - |
4 | - | - |
5 | GND | - |
6 | - | - |
7 | - | - |
8 | - | - |
9 | - | - |
一般的なシリアルポート利用の手順としては、下記のような流れとなります3)。
fd = open(g_ttydev, O_RDWR);
ret = tcgetattr(fd, &tty);
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);
nbytes = read(fd, g_iobuffer, BUFFER_SIZE-1); nbytes = write(fd, g_shortmsg, sizeof(g_shortmsg));
close(fd);