Неправильные данные в серийном порту
От: indee  
Дата: 17.03.16 09:27
Оценка:
Из Raspberry Pi в серийный порт пишу строку "0123456789\r".
Кабель серийного порта подключен к компьютеру где считываю данные.

В основном посланная строка "0123456789\r" считывается правильно:

number char int
0 0 48
1
1 49
2 2
50
3 3 51
4
4 52
5 5
53
6 6 54
7
7 55
8 8
56
9 9 57
10 13

Но иногда вместо ожидаемого набора символов получаю такую последовательность:

number char int
0 ᆰ 86
1 10
2 ᄁ 94
3 j 106
4 ハ 118
5 ᄄ 88
6 8
7 * 42
8 ᅠ 96
9 ( 40
10 8


код:

struct termios PortSettings;


bool OpenPort(){
          
    Port = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY);
    
    if(Port == -1){
        printf("%s", "Error of opening port /dev/ttyUSB0");
        printf("error %d opening %s: %s", errno, "", strerror (errno));
        return false;
    }
    else{
        printf("%s", "\n  ttyUSB0 Opened Successfully\n");        
    }    
    
    
    tcgetattr(Port, &PortSettings);
    
    cfsetispeed(&PortSettings,B9600);
    cfsetospeed(&PortSettings,B9600);
    
    PortSettings.c_cflag |=  PARENB;
    PortSettings.c_cflag &= ~CSTOPB;
    
    PortSettings.c_cflag &= ~CSIZE;
    PortSettings.c_cflag |=  CS8;    
    
    PortSettings.c_cflag |= CREAD | CLOCAL;
    
    PortSettings.c_cc[VMIN]  = 0; 
    PortSettings.c_cc[VTIME] = 20;
    
    PortSettings.c_iflag = 0;
    
    
    PortSettings.c_oflag = 0;
    PortSettings.c_lflag = 0;
    
    tcflush(Port, TCIFLUSH);
    
    tcsetattr(Port,TCSANOW,&PortSettings);    
    
    return true;
}


void WriteToPort(){
            
    tcflush(Port, TCIOFLUSH);
    
    write(Port, "0123456789\r", 11);
        
}


Параметры серийного порта: 9600, 8, evenparity, onestopbit

В чем может быть ошибка?

Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.