1

我想使用放在我卡上的 rs485。我正在研究 arm-linux 和 pxa255 处理器。我已经检查了位于 arm-linux 工具链中的“serial.h”,但不幸的是我找不到合适的 rs485 设置结构,尽管它在 cris 等其他环境中受支持。所以现在,我必须编写一个低级驱动程序来启用 rs485 还是有其他更简单的方法来做到这一点?

4

2 回答 2

1

我建议查看有关Linux RS-485 支持的页面。

于 2011-03-19T13:47:54.817 回答
0

关于 Linux 驱动程序上的 RS485 模式支持,串行端口似乎有很多混淆。我想我可能能够回答这个问题。

首先,你应该问自己:我为什么要在我的串口上激活 RS485 支持?我不知道您使用的是什么开发板或硬件,但请注意大多数 UART 仅使用单端 TTL 电平(5V 或 3.3V 电平)。这意味着您将无法直接与 RS485 设备通信,因为它们只处理差分信号。如果您想了解更多详细信息,可以查看此链接:https ://www2.htw-dresden.de/~huhle/ArtScienceRS485.pdf以获得很好的介绍。

因此,您可以编写任意多行的代码和驱动程序,但这无助于您的 TTL UART 与 RS485 通信。即使您的驱动程序支持 RS485 的设备,硬件本身也需要有一个电平转换器 IC(如 MAX485)才能使用它。幸运的是,我们心爱的 Linux 内核开发人员对硬件非常了解,您不必担心这一点(无论如何对于大多数设备而言)。然后,回答您的问题:如果您无法在驱动程序上找到 RS485 设置,则很可能意味着您的硬件不直接提供支持

幸运的是,解决方案非常简单:只需购买一个便宜的 USB 转 RS485 加密狗。您可以在 5-10 美元之间找到它们,并且在大多数情况下它们应该可以开箱即用。以我的经验,FTDI 芯片运行良好。

例如,如果您出于任何原因确实必须使用一个特定的 UART,例如,假设您想在 Raspberry Pi 或任何其他只能访问 TX 和 RX 信号的地方使用 UART. 然后,您将面临一个稍微困难的挑战,您需要更多地研究 RS485 设备的工作原理。这里的关键方面是了解半双工两线链路上的 RS485(有关此内容的更多详细信息,请参见下面的注释)。为了能够在一个或多个设备正在侦听并且在任何时候只有一个正在通话的情况下共享两线总线,您需要在您的 TX 和 RX 之上添加一个额外的控制信号(驱动启用/~读取启用)(请注意,当您使用单端 TTL 时,您有两个使用三根线连接到 GND 的信号,而一根差分总线使用两根线用于 RS485 侧)。你的 RS485 收发器(比如 MAX485)将需要这个 RE/~DE 信号来安排总线上谁在说话和谁在听,即:

在这里,我们了解了您问题的本质:您从哪里可以获得这个额外的信号?嗯,答案是:这取决于你的 UART 芯片。有些芯片不提供任何可使用的功能,那么您可以选择在您的软件应用程序中手动驱动 GPIO 线路或用于 UARTS 的流控制信号(RTS 或 DTR),您可以使用它们。您可以在此处阅读有关 FTDI 芯片特定情况的更多详细信息:RS485: Inappropriate ioctl for device。还参考了一个很好的硬件解决方案,使用神话般的 555 定时器 IC。

注意:比较容易混淆的地方:一、RS485是半双工的,有时会和RS422混在一起,是全双工的,需要四根线;第二:我说两线和四线我应该说三线和五线更好,因为差分电压信号需要一个GND作为返回路径;可悲的是,RS485 的大多数实际实现都是两线制的,它们似乎对大多数人来说都可以可靠地工作,但这本身就是一个巨大的话题,我们可以在其他地方谈论它。

于 2019-05-10T08:34:03.767 回答