使用 /dev/tty* 进行 9 位 uart 仿真

Posted

技术标签:

【中文标题】使用 /dev/tty* 进行 9 位 uart 仿真【英文标题】:9 bits uart emulation with /dev/tty* 【发布时间】:2015-05-31 04:50:24 【问题描述】:

我有一个不常见的协议,它需要 9600 波特、9 位和一个停止位。我找不到任何可以实现这种发送/接收的驱动程序。

我可以向/dev/tty* 发送一些东西来模拟这些查询吗?我应该寄什么?如何模拟 9600 波特率?

【问题讨论】:

这是一种由同时销售硬件的供应商使用的协议。之所以被选中,是因为他们知道您将有一项几乎不可能完成的任务来使其与商品硬件一起使用。它只能由设备驱动程序有效地完成,它需要在传输时重新配置 UART,通常需要禁用 FIFO。使用微控制器很容易,而不是在像 Linux 这样的保护模式操作系统上。抵抗是徒劳的,买硬件吧。 我可以买什么零件? 见***.com/questions/26887468/… 和superuser.com/questions/411386/…。一些 SoC 微处理器和微控制器具有支持 9 位的 USART,例如 Arduino Due 上的 Atmel uC。 【参考方案1】:

您可以使用粘性奇偶校验,也称为 MARK 和 SPACE 奇偶校验。 termios.h 支持这一点。但是,您需要在相应地发送地址或数据字节之前更改奇偶校验设置,并且取决于硬件,这可能会在两种类型的字节之间引入不希望的延迟。使用 FT232RL 和 FT232BL USB 到串行转换器时,我经历了 0.4 毫秒到 10 毫秒的延迟。我不确定,但我怀疑它也会受到主板和您使用的 USB 端口(USB2 或 USB3)的影响。此外,在尝试更改奇偶校验模式之前,您需要确保传输缓冲区为空,因为它还会影响已放置在传输缓冲区中的字节的奇偶校验设置。

【讨论】:

以上是关于使用 /dev/tty* 进行 9 位 uart 仿真的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式 Linux 中 UART 上的 9 位协议

UART工作原理详解

UART工作原理详解

禁止从 /dev/tty 读取

禁止从/ dev / tty读取

STM8--UART2