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.

[参考译文] AM6442:Linux 中的 AM6442 RS485通信

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1519835/am6442-am6442-rs485-communication-in-linux

器件型号:AM6442

工具/软件:

尊敬的 TI 支持团队:

我目前正在的上进行 RS485通信 AM64x  使用的网关平台 在 RS485模式下 UART6 。 我已经使用 CTS 和 RTS 引脚配置了 UART、请找到下面的 dts 代码片段、我已经在器件树中启用了 RS485绑定并使用映射的 GPIO 配置了方向控制rts-gpios。 但是、我遇到了 RS485总线上一致通信的问题。

密钥配置:

  • SoC: AM6442

  • 内核版本: 6.6.58-rt45-ti-rt-01780-gc79d7ef3a56f-dirty

  • UART 驱动程序: 8250_OMAP

  • 方向控制: 使用配置 GPIO 引脚 rts-gpios as well as UART RTS

  •  配置了 CTS 和 RTS 的 UART 的 DTS 代码片段、此处 RTS 引脚将用作 RS485的方向控制:

    main_uart6_pins_default:main-uart6-pins-default{

           全部引导;

           pinctrl-single、pins =<

               AM64X_IOPAD (0x0074、PIN_INPUT、2)/*(Y21) GPMC0_AD14.UART6_RXD *

               AM64X_IOPAD (0x0078、PIN_OUTPUT、2)/*(Y20) GPMC0_AD15.UART6_TXD *

               AM64X_IOPAD (0x006c、PIN_INPUT、2)  /*(W21) GPMC0_AD12.UART6_CTSn */

               AM64X_IOPAD (0x0090、PIN_OUTPUT、2) /*(P17) GPMC0_BE0n_CLE。UART6_RTSn */

           >;

    &MAIN_uart6{

       状态="正常";

       pinctrl-names ="default";

       pinctrl-0 =<&MAIN_uart6_pins_default>;

    };

  • RS485 DTS 绑定、此处 RTS 引脚配置为 GPIO、RS485绑定属性已在 DTS 中定义、请浏览以下代码片段。        

    main_uart6_pins_default:main-uart6-pins-default{

           全部引导;

           pinctrl-single、pins =<

               AM64X_IOPAD (0x0074、PIN_INPUT、2)/*(Y21) GPMC0_AD14.UART6_RXD *

               AM64X_IOPAD (0x0078、PIN_OUTPUT、2)/*(Y20) GPMC0_AD15.UART6_TXD *

           >;

       };

     

      /* RS485方向控制引脚*/

           RS485_driver_receiver_enable_pin:RS485-de-re-pin-default{

               pinctrl-single、pins =<

                   AM64X_IOPAD (0x0090、PIN_OUTPUT、7) /*(P17) GPMC0_BE0n_CLE。UART6_RTSn 作为 GPIO

               >;

           };

      &MAIN_uart6{

       状态="正常";

       pinctrl-names ="default";

       pinctrl-0 =<&MAIN_uart6_pins_default &RS485_driver_receiver_enable_pin>;

     

       linux、RS485-enabled-at-boot-time;

       RS485-RTS-ACTIVE 高电平;

       RS485-Rx-dur-TX 期间;

       RTS-GPIOs =<&MAIN_GPIO0 35 GPIO_ACTIVE_LOW>;

    };

问题描述:

  • 用于方向控制的 GPIO 在 TX/RX 周期内未按预期切换。

  • 当使用具有TIOCSRS485 ioctl 的用户空间应用程序时、方向似乎保持不变。

  • 尝试的环回和外部器件测试间歇性失败。

请求:

  • 请确认8250_omaprts-gpios AM64x 上是否完全支持 RS485。

  • 为了使方向控制与 GPIO 可靠运行、是否需要已知限制或补丁?

  • 此 SoC 上是否有 RS485双工的示例或建议的配置?

期待您的指导或您可以分享的任何参考资料。

此致、

Saranbabu 公里

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

    大家好、我将在接下来的两周内离职。 请期待响应延迟。

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

    尊敬的 Saranbabu:

    AM64x 支持 RS 通过 RS 引脚实现硬件控制的 AM64x 去控制、有关详细信息、请参阅 TRM 12.1.5.2.2"AM64x -485功能接口"。

    在 Linux 中、请将 RTS Pinmux 设置为本机 RTS 模式、而不是 GPIO 模式、并从器件树的 UART 节点中删除 RTS-GPIO 属性。

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

    尊敬的 Bin Liu:

    感谢您的答复。

    我将 RTS 引脚配置为 RTS 模式、但由于我无法通过 RS485全双工和半双工模式发送和接收数据、所以正向工作。  根据我的 RS485收发器、RTS 引脚应在数据发送期间变为高电平、反之亦然、以便进行数据接收。  我已经从社区阅读了您的一篇文章、因为 RTS 引脚属于 RTSn 或反相引脚、因此根据引脚的性质、功能保持不变。  在这里、我的问题是如何更改 RS485收发器 IC 所需的 RTS 功能?是否需要修改驱动程序?如果没有、如何在 DTS 文件中执行该操作。

    连接保持不变、如 TRM 12.1.5.2.2中所述

    我期待您的答复以便进一步处理、请尽快答复。

    此致

    Saranbabu 公里

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

    尊敬的 Saranbabu:

    DE 极性应由寄存器 MDR3位3控制。

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

    尊敬的 Bin Liu:

    感谢您的快速答复。

    要更改 RTS 引脚的极性、是否需要在 Linux 内核中进行驱动程序级修改?  是否可以通过任何方法在 DTS 文件中配置 RTS 的极性?  请告诉我。

    此致

    Saranbabu 公里

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

    UART 驱动程序不支持该功能、因此需要修改驱动程序。

    如果您需要修改方面的帮助、请等到下周。 我本周不在办公室。