This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 66AK2G12:Linux RS485支持

Guru**** 2540720 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1072658/66ak2g12-linux-rs485-support

部件号:66AK2G12

您好,

我正在研究一种使用 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驱动程序能够完成这项工作,甚至可以有用于它的配置选项。

谢谢,

杰夫

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jeff,

    内核8250串行核心和8250_OMAS.c 驱动程序支持使用 RTS 线路(不是 GPIO 模式)控制 RS-485收发器上的 DE 引脚。 我不建议使用 serial_OMAP 驱动程序,它不再被维护。

    为什么需要使用两个针脚来控制 RS-485收发器? 我不确定内核是否支持它。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    简单的回答是,我们生产中的硬件以这种方式连接,但我可以解决这个问题。

    8250_OMAS.c 驱动程序是否与 K2G 兼容?  还是需要使用通用8250驱动程序?

    通用驱动程序中的 RS485仿真似乎需要对驱动程序进行一些修改,因为默认情况下,485功能似乎没有“连接”到端口结构中。  在做了一些更改后,我能够让驱动程序处理 RS485 IOCTL,但我无法获得 RTS 线路(被 mu当作 RTS 线路,而不是 GPIO),从而在接收时切换并降低电压。

    如果需要,我可以修改驱动程序,但我主要想知道 TI 是否有针对 K2G 的 RS485的推荐解决方案,而不管我是否需要切换两个引脚。  如果8250_OMAP 驱动程序将在 K2G 上工作,我将尝试一下。  否则,我将坚持修改通用驱动程序。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jeff,

    很抱歉我说得太快了。 K2G 不使用8250-OMAP 驱动程序,而是8250_of_c.

    从 keyston-k2g.dtsi 看,UART 节点具有与8250驱动器对应的兼容“ti,DA830-UART”。

    通过查看8250_of_c,我认为它不支持 RS-485 DE 控制,驱动程序不会在&port8250.port 结构中定义 RS485_config 回调。

    但在8250_of_c.中添加 RS485支持并不困难 请参阅8250_OMAS.c 中的 OMA_8250_RS485_config(),在 of_platform_serial_prob() in8250_of_c.中为 port8250.up.RS485_config 添加回调 我认为这是8250_of_c.中 RS485 suport 唯一缺少的部件

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jeff,
    我也有类似的情况。 临时解决方案是将 RS485发射器替换为带自动检测功能的 RS485发射器(在我的案例中为 MAX13487)
    但这并没有完全解决我的问题。 如果我理解正确,K2G 将使用8250驱动程序,并且不支持去控制。 是否需要手动添加? 还是可以使用另一个驱动程序?
    您能否分享此问题的解决方案?