Я пытаюсь настроить 9-битный протокол на UART во встроенном Linux. В настоящее время я тестирую это на плате am335x_evm. Я планирую сделать это, используя контроль четности. В идеале я надеялся, что мне не нужно будет изменять какой-либо код драйвера omap-serial.c.
Причиной использования 9-битного протокола является поддержка некоторого устаревшего оборудования, которое его использует. Бит четности должен быть равен 1 для адресной части сообщения, 0 для части данных, затем снова 1 для завершающего байта.
Я планировал запустить процесс в пользовательском пространстве, который будет взаимодействовать с UART через стандартные системные вызовы (open, write, read, ioctl, tcsetattr и т. д.). Я бы настроил UART, чтобы включить четность и установить четность флешки. Затем я установил бы четность на даже и вызвал бы write() для отправки данных моего адреса. Затем я бы установил четность на 0 и отправил данные. Меня беспокоит, если я изменю четность с 1 на 0, когда это повлияет? Если UART не отправляет все адресные данные, будет ли изменение четности применяться ко всем неотправленным данным?
line discipline
драйвер. Это не самая легкая вещь в мире, но и не самая сложная. Это позволяет вам отправлять сообщения в/из пользовательского пространства через ioctl (и, возможно, чтение/запись) по одному сообщению за раз, в отличие от потока байтов. Тогда у драйвера дисциплины будет больше доступа из пространства ядра. Этот подход также поможет вам в получении сообщений. - person Dima Tisnek   schedule 12.11.2014