Проблема с установкой четности в последовательной связи на Raspberry PI в C - PullRequest
0 голосов
/ 19 декабря 2018

Я отправляю байты из Raspberry PI и получаю их на свой ноутбук через порты последовательной связи, используя терминальную программу.Параметры связи следующие:

Скорость передачи: 9600, Биты данных: 8, Четность: ODD, Стоповый бит: 1, Подтверждение связи: Нет.

После отправки двух байтов {0x10, 0x05} Я получаю на терминале (в моем ноутбуке) {0x10, 0xC1}.Я могу получить правильные байты, только если я изменю четность на терминале на НЕТ.

Как я могу работать с моим контролем четности, установленным на ODD?

См. Мой код ниже:

#include <stdio.h>
#include <unistd.h>
#include <termios.h>
#include <fcntl.h>

int main()
{

    struct termios RSopt;
    char str[3] = { 0x10, 0x05, 0x0};
    int fd;
    fd = open( "/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY );    

    tcgetattr( fd, &RSopt);
    cfmakeraw( &RSopt);
    cfsetspeed ( &RSopt, (speed_t)B9600);
    RSopt.c_cflag &= ~CSIZE;  
    RSopt.c_cflag |= CS8;     
    RSopt.c_cflag |= PARENB;  
    RSopt.c_cflag |= PARODD; 
    RSopt.c_cflag &= ~CSTOPB; 
    tcflush( fd, TCIFLUSH );
    tcsetattr ( fd, TCSANOW, &RSopt); 

    write( fd, str, 2 );
    close( fd );

}

1 Ответ

0 голосов
/ 19 декабря 2018

ttyS0 в системах Raspberry PI - это мини-UART, который не поддерживает бит четности.См .: https://www.raspberrypi.org/documentation/configuration/uart.md

Код, который вы разместили, в целом верен.В настоящий момент у меня нет RPi, но если драйверы реализованы правильно, вы также сможете проверить правильность применения атрибутов, проверив возвращаемое значение tcsetattr (), а также проверив изменения, проверивзначения, установленные с помощью tcgetattr (), так как setattr может указывать на сбой, только если НЕТ атрибутов можно установить.

...