LINUX.ORG.RU

ioctl управление RTS

 ,


0

1

Здравствуйте,

для того, чтобы отправлять/получать данные с серийного порта, приходится управлять RTS линией посредством ioctl

int rts=TIOCM_RTS;

ioctl(fd,TIOCMBIS,&rts); // когда хотим писать(write) в порт

ioctl(fd,TIOCMBIC,&rts); // когда хотим читать (read) с порта

Все работает, однако к каждой посылке при приеме и передаче добавляется лишних один или два нулевых байта (0x00). Пробовали разными тестами и утилитами проверять - результат одинаков - всегда один или два нулевых байта в конце.

Кто-нибудь может помочь уяснить что за природа «левых» байт в конце сообщений и как их убрать?


для того, чтобы отправлять/получать данные с серийного порта, приходится управлять RTS линией посредством ioctl

что за порт у тебя ? Очень многие полудуплекс поддерживают из коробки, остальные в драйвере софтовую поддержку пишут - по окончании передачи автоматом переключают на прием. API для всех одинаковый

https://elixir.bootlin.com/linux/latest/source/Documentation/driver-api/serial/serial-rs485.rst

как у тебя переключение в юзерспейс никогда не будет работать правильно.

anonymous ()

Не могу так сходу по фотографии диагностику сделать. А ECHO и все его варианты отключили? Это options.c_lflag, то есть RAW режим. Ну и посмотри на опции аппаратного управления потоком. Я так понимаю, что вы сами им управляете.

Ну и дальше - у вас родной COM-порт или какой-то преобразователь USB-COM? С этими преобразователями чудеса бывают.

UPD. Ах, там тег RS485. Мог бы и в теме написать. А что за железка тогда? Там, может быть что автоматически все переключается и дергать ничего не надо.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 2)

Да, просто после передачи, когда переключается трансивер. Там может уровень на TX переключатся из-за чего приемная часть его идентифицирует как стоп бит. И дорисовывает лишний нулевой байт. Так обычно в тупых железках бывает, которые на всякий случай после передачи удерживают линию на передачу ещё один байт по длительности.

yax123 ★★★★ ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей