主题中讨论的其他器件:AM6442、 THVD1424
工具与软件:
对 AM6442使用 SDK 10.00.07.04
我在 DTB 中配置了 UART1、如下所示
main_uart1_pins_default: main-uart1-default-pins { pinctrl-single,pins = < AM64X_IOPAD(0x0248, PIN_INPUT, 0) /* (D16) UART1_CTSn */ AM64X_IOPAD(0x024c, PIN_OUTPUT, 0) /* (E16) UART1_RTSn */ AM64X_IOPAD(0x0240, PIN_INPUT, 0) /* (E15) UART1_RXD */ AM64X_IOPAD(0x0244, PIN_OUTPUT, 0) /* (E14) UART1_TXD */ >; }; &main_uart1 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&main_uart1_pins_default>; rs485-rts-active-high; rs485-rts-delay = <0 0>; linux,rs485-enabled-at-boot-time; current-speed = <115200>; };
并已根据检查 UART_MDR3寄存器值
devmem2 0x02810080
该引脚似乎设置为0x10 (DIR_EN = 1、DIR_POL = 0、因此发送时 RTS 为0)并且作用域 RTS 线路通常为高电平、在 TX 传输时下降、这与我的要求相反。 我已尝试将0x18放入 UART_MDR3寄存器、这将提供 RS485-RTS-ACTIVE-HIGH 的预期行为。
根据 https://www.kernel.org/doc/Documentation/devicetree/bindings/serial/rs485.yaml、 默认情况下 RTS 为高电平有效、但 AM64x 驱动器在配置为高电平有效时似乎正在低电平有效运行!
我们正在使用 THVD1424收发器、该收发器的高电平有效、因此需要反转 RTS、根据 TRM、这应该可以在软件中实现、但6.6.32内核的串行驱动程序似乎不能像我所期望的那样正常工作。
这是一个已知问题、我是否误配置了 DTB、驱动程序是否支持此标志、是否有权变措施(除了安装硬件逆变器!) ????
谢谢!
Jon