USB-устройства влияют на STYT (UART)

Я пишу программу, которая связывается с MCU через UART (stty). Используемая мной платформа - Acmesystems Acqua A5 (SAMA5D31) с Debian. Протокол между MCU и ПК следующий: адрес MCU, данные, CRC. Если все в порядке, MCU генерирует ответ на запрос ядра. Проблема в том, что когда я набираю что-то на USB-клавиатуре или подключаю флешку, связь замирает. Итак, я думаю, что USB странно влияет на STTY. Я обнаружил, что если я отключаю IGNBRK, то нет никаких зависаний, но много ошибок во время связи (это правда, мне не нужны никакие специальные символы) Вот инициализация COM-порта:

struct termios options;

tcgetattr (fd, &options);

cfsetispeed (&options, B115200);
cfsetospeed (&options, B115200);

options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~(PARENB | CSTOPB | CSIZE);
options.c_cflag |= CS8;

options.c_lflag &= ~(ICANON | ISIG | IEXTEN | ECHO | ECHOE | ECHOK | ECHOKE | ECHONL | ECHOCTL | ECHOPRT);
options.c_lflag |= NOFLSH;

options.c_iflag &= ~(INPCK | INLCR | IXON | IXOFF | IXANY | IGNCR | ICRNL | IUCLC);
options.c_iflag |= (IGNBRK | IGNPAR);

options.c_oflag &= ~(OPOST | OFILL);

options.c_cc[VINTR]    = 0;
options.c_cc[VQUIT]    = 0;
options.c_cc[VERASE]   = 0;
options.c_cc[VKILL]    = 0;
options.c_cc[VEOF]     = 0;
options.c_cc[VTIME]    = 0;
options.c_cc[VMIN]     = 1;
options.c_cc[VSWTC]    = 0;
options.c_cc[VSTART]   = 0;
options.c_cc[VSTOP]    = 0;
options.c_cc[VSUSP]    = 0;
options.c_cc[VEOL]     = 0;
options.c_cc[VREPRINT] = 0;
options.c_cc[VDISCARD] = 0;
options.c_cc[VWERASE]  = 0;
options.c_cc[VLNEXT]   = 0;
options.c_cc[VEOL2]    = 0;

tcsetattr (fd, TCSANOW, &options);

fcntl (fd, F_SETFL, FNDELAY);

0 ответов

Другие вопросы по тегам