Ошибка чтения / открытия последовательного порта в C, Linux

У меня проблемы с выбором правильных настроек для открываемого последовательного порта.
У меня есть следующая информация:

  • Синхронизация: асинхронный метод
  • Способ связи: полнодуплексная передача
  • Скорость связи: 9600 бит / с (бит в секунду)
  • Код передачи: 8-битные данные
  • Конфигурация данных: стартовый бит 1, данные 8 бит + четность 1, стоповый бит 1
  • Контроль ошибок: горизонтальная (CRC) и вертикальная (четное число) четности
  • 1 байтовая конфигурация
    ПК не должен использовать контрольный сигнал (DTR, DSR, RTS и CTS) во время этого соединения.

Что у меня есть что-то вроде:

bool configurePort(void)   {
struct termios port_settings;
bzero(&port_settings, sizeof(port_settings));

tcgetattr(fd, &port_settings);

cfsetispeed(&port_settings, B9600);
cfsetospeed(&port_settings, B9600);

port_settings.c_cflag &= ~CSIZE;
port_settings.c_cflag |= CS8;

// parity bit
//port_settings.c_cflag &= ~PARENB;
//port_settings.c_cflag &= ~PARODD;
// hardware flow
port_settings.c_cflag &= ~CRTSCTS;
// stop bit
//port_settings.c_cflag &= ~CSTOPB;

port_settings.c_iflag = IGNBRK;
port_settings.c_iflag &= ~(IXON | IXOFF | IXANY);
port_settings.c_lflag = 0;
port_settings.c_oflag = 0;

port_settings.c_cc[VMIN] = 1;
port_settings.c_cc[VTIME] = 0;
port_settings.c_cc[VEOF] = 4;

tcsetattr(fd, TCSANOW, &port_settings);return true;
}

Пробовал различные модификации, но, похоже, ничего не работает.

Устройство подключено через USB-порт (ttyUSB0) и у меня есть разрешения.
Он открывает устройство, отправляет (?) Данные, но никогда ничего не возвращает …

Может кто-нибудь указать мне, что должно быть сделано?

-1

Решение

Попробуйте с этим:

bool configurePort(void)   {
struct termios port_settings;
bzero(&port_settings, sizeof(port_settings));

if(tcgetattr(fd, &port_settings) < 0) {
perror("tcgetattr");
return false;
}

cfmakeraw(&port_settings);

cfsetispeed(&port_settings, B9600);
cfsetospeed(&port_settings, B9600);

//input
port_settings.c_iflag &= ~(IXON | IXOFF | IXANY); //disable flow control

//local
port_settings.c_lflag = 0;  // No local flags

//output
port_settings.c_oflag |= ONLRET;
port_settings.c_oflag |= ONOCR;
port_settings.c_oflag &= ~OPOST;port_settings.c_cflag &= ~CRTSCTS; // Disable RTS/CTS
port_settings.c_cflag |= CREAD; // Enable receiver
port_settings.c_cflag &= ~CSTOPB;tcflush(fd, TCIFLUSH);if(tcsetattr(fd, TCSANOW, &port_settings) < 0) {
perror("tcsetattr");
return false;
}

int iflags = TIOCM_DTR;
ioctl(fd, TIOCMBIC, &iflags); // turn off DTR

return true;
} //configure port
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]