您好,
我正在研究一种使用 UART1 (/dev/ttyS1)在 PSDK 6.3上进行 RS-485通信的 Linux 设计。 当前的实施使用 RTS 和 CTS 引脚(引脚被引脚联为 GPIO)来控制三态 RS-485缓冲区。
出于一些原因,我们希望将总线控制信号从用户空间移出并移入内核空间。 由于我们的总线的性质,控制信号必须与来自 K2G 的发射开始/结束紧密相连。 我一直在做一些阅读,并发现 Linux 内核对 RS485有一定的支持,内核源代码的 Documentation/serial/serial-rs485.txt 中对此进行了引用。
通用8250驱动程序包括一些代码,用于支持使用 RTS 线路的 RS485仿真,但默认情况下不启用此功能。 我对8250_port.c 做了一些调整,以便为 DA830 8250驱动程序(列为兼容的 K2G 驱动程序)添加此驱动程序,但没有成功地使其正常工作。 当调用函数 serial8250_em485_RTS_After 发送时,RTS 线路会出现跳跃,但我从未看到它在等待接收的总线上的空闲时间低于预期。
我看到了支持 RS485的 OMAM_SERIAL 驱动程序,并看到了将该驱动程序与 AM335X 处理器配合使用的建议,但没有看到该驱动程序与 K2G 的兼容性。 除非在线 SDK 文档中有提及,但未明确列出与 K2G 兼容的文档。 我还看到 OMAM_SERIAL 驱动程序已经过时,可能已被8250_OMAS.C 替代 我使用了8250_OMAI.c 的 OMAM_8250_RS485_config 函数来模拟我对8250_port 驱动程序的修改,但 RTS 线路似乎没有按预期切换。 我确实更改了 pinmux 以启用 RTS 引脚,但我确实看到它偶尔会发出信号。
我不确定这是否是最好的解决方案,因为我们有两条单独的线路控制 TX_EN 和 nRX_EN 线路。 除非我们要在传输过程中阻塞 nRX_EN 线路并忽略接收数据,否则我们需要控制两个引脚,并且硬件不支持将 CTS 设置为输出,并且在 RS485模式下,驱动程序也不支持 GPIO RTS。
或者,我可以编写一个线规驱动程序,该驱动程序可以由我们的应用程序安装,并控制两个 GPIO 引脚,在传输之前和之后切换它们。 由于我已经编写了一本使用 UART 获取热数据的文章,这将是非常简单的。
我想知道是否有任何关于在 K2G 上使用 RS485的内核驱动程序的建议,如果有,我可以查看是否有任何示例来了解这应该如何工作。 如果没有一个驱动程序可以满足我的需要,我可能只写一个 ldisc 并完成它,但我希望8250驱动程序能够完成这项工作,甚至可以有用于它的配置选项。
谢谢,
杰夫