【Raspberry Pi】シリアルの利用注意点(0x0Dが0x0Aに変わる)

UARTを使用したときに、0x0D送信したのに受信側では0x0Aに変わっている時があります。

これは、ttyがターミナルモードになっているためです。

バイナリデータ送信をしたいときは、rawモードの設定が必要です。

以下設定のサンプルです。

 

fd_sci0 = open(”/dev/ttyAMA0”, O_RDWR | O_NOCTTY| O_NDELAY); // | O_NDELAY|O_NONBLOCK);

if (fd_sci0 == -1)

{

perror(“close error”);

return;

}

struct termios options;

 

tcgetattr(fd_sci0, &options);

options.c_cflag = B115200 | CS8 | CLOCAL | CREAD;

options.c_iflag = IGNPAR | ICRNL;

options.c_oflag = 0;

options.c_lflag = 0;

cfmakeraw(&options); // <—-ここが重要

tcflush(fd_sci0, TCIFLUSH);

tcsetattr(fd_sci0, TCSANOW, &options);

printf(“ttyAMA0 opened\n”);

 

good luck,

 

Leave a Reply