如何将Linux gpio子系统与PySerial一起用于RS485 DE信号RTS

问题描述

我正在使用PySerial通过RS485多点通信与某些设备通信。我在发送数据包并最终释放它之前对DE信号进行位冲击以启用传输。

问题在于发布的时间各不相同,尤其是在处理器负载下,并且设备的响应变得混乱(不被接收)。

我知道PySerial具有RS485支持,但是从我读到的有关嵌入式SBC(NXP iMX6 Dual)的所有内容来看,GPIO连接器上没有RTS信号。我只是可以使用任意的GPIO。

是否可以将任意的GPIO信号映射到RTS功能,以便Linux tty驱动程序可以断言/撤消我想要的GPIO引脚?

以下声明给了我一些希望(https://www.kernel.org/doc/html/v4.17/driver-api/gpio/drivers-on-gpio.html

“”“ ...子系统中有特殊的GPIO驱动程序,例如TTY串行子系统,它通过使用两条GPIO线来模拟MCTRL(调制解调器控制)信号CTS / RTS。 “”“

/ dev / ttyimxN设备的tty驱动程序似乎对它有某种支持。

https://github.com/torvalds/linux/blob/v4.14/drivers/tty/serial/serial_mctrl_gpio.h https://github.com/torvalds/linux/blob/v4.14/drivers/tty/serial/imx.c

    unsigned int        have_rtsgpio:1;

但是如何使用PySerial进行设置?

如何指定要使用的GPIO端口(如果有的话)?

感谢您的帮助!

编辑

我在与主板上的内核相匹配的内核源代码中找到了信息。这说明了如何为调制解调器控制仿真(软件控制,而不是硬件控制)指定gpio。

https://github.com/ADVANTECH-Corp/linux-imx/blob/adv_4.14.98_2.0.0_ga/Documentation/devicetree/bindings/serial/serial.txt

因此似乎可以通过更改设备树源并为系统创建新的设备树blob来实现。

这都应该独立于pyserial。

我不确定是否可以在运行时使用ioctl设置/覆盖它,这会很方便(而不是不得不处理内核源代码和构建设备树blob等)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)