Инициировать последовательную связь с библиотекой c open () заставляет TX отправлять один бит на RPi

Я пытаюсь настроить последовательную связь между RPI и FPGA. Однако при использовании стандартной библиотеки C open() для инициализации последовательного интерфейса возникает проблема: я использую область для контроля того, что отправлено и получено через линии RX и TX. Призыв к открытию приводит к тому, что TX-линия RPI становится низкой для длины одного бита. Я не вижу этого поведения с другими компьютерами/Linux-ПК. Дело в том, что FPGA предполагает действительную передачу, так как он считает, что это бит начала, но это не так.

Я проверил с minicom, установленным на RPI. То же самое. Запуск minicom приводит к тому, что линия TX отправляет один бит. Как только minicom запущен, связь работает так, как ожидалось, и все байты имеют правильный размер кадра. Есть ли способ подавить линию TX, идущую низко на открытый вызов, чтобы начать последовательную связь? Это ожидаемое поведение?

4
nl ja de

1 ответы

Это супер надуманная догадка, но этот код кажется немного подозрительным, из функции pl011_startup() в PL011 драйвер последовательного порта :

/*
 * Provoke TX FIFO interrupt into asserting.
 */

Кажется, что кажется , как будто он закручивает линию TX при запуске порта, что объясняет пульс, который вы видите. Разумеется, потребуется больше расследований, прежде чем заключить, что это происходит.

Итак, я думаю, мой «ответ» сводится к: это звучит странно, может быть, это что-то с водителем?

Конечно, одним из способов работы с этим является некоторое внимание к концу FPGA, предполагая, что у вас есть больше контроля над ним. «Надлежащее» обрамление позаботится об этом и даст понять, что ложная отправка может быть отброшена.

UPDATE: I meant that if "proper" messages were to be always framed by some sequence of bytes, the FPGA might be able to discard invalid ("unframed") data anyway, and thus become immune to the random pulse. For instance, messages could be defined to always start with SOH (start of header) or SOT (start of text) symbols (bytes with the values 0x01 and 0x02, respectively).

1
добавлено
Спасибо. Посмотрел на код, на который вы намекали. Хотя я не совсем понял, что он делает, это может быть направление, на которое нужно смотреть. На стороне FPGA это непросто, так как время между «всплеском» и реальными данными зависит от C-кода между open() и write (). Будет проверяться с помощью платы fox-g20, использующей debarm.
добавлено автор Norbert, источник
Хорошая идея. Попробуем это как обходной путь. Благодарю.
добавлено автор Norbert, источник
Ваше предложение работает с дополнительным заголовком и некоторыми настройками времени. Добавлено сообщение об ошибке. Благодарю.
добавлено автор Norbert, источник
ru_raspberry
ru_raspberry
1 045 участник(ов)

PI: Raspberry, Orange, Banana. Asus Tinkerboard, Lattepanda, etc... правила: нет политике, оскорблениям и мату.

free_raspberry
free_raspberry
124 участник(ов)

Рулезс: - Без спама и назойливой рекламы - Без наркоты и прочего незаконного говна - Постарайтесь быть няшами и не кидаться говном сверх меры.

embedded.rs
embedded.rs
121 участник(ов)

Rust, микроконтроллеры и кошкодевочки