IMX6ULL开发板UART2配置RS-485 GPIO使能引脚异常求助
IMX6ULL(Tart 2开发板)RS-485 GPIO使能引脚始终高电平问题
在Tart 2开发板(IMX6ULL芯片)上配置RS-485,使用GPIO作为收发使能引脚,但配置完成后该GPIO始终处于高电平,无法随收发过程自动切换。以下是已做的设备树配置修改:
配置代码片段
第一个UART2节点配置
&uart2 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart2>; rts-gpios = <&gpio4 25 GPIO_ACTIVE_HIGH>; rs485-rts-delay = <0 0>; status = "okay"; fsl,dte-mode; };
Pinctrl配置
pinctrl_uart2: uart2grp { fsl,pins = < MX6UL_PAD_UART2_TX_DATA__UART2_DTE_RX 0x1b0b1 /* SODIMM 36 */ MX6UL_PAD_UART2_RX_DATA__UART2_DTE_TX 0x1b0b1 /* SODIMM 38 */ MX6UL_PAD_CSI_DATA04__GPIO4_IO25 0x10b0 >; };
第二个UART2节点配置
&uart2 { status = "okay"; rs485-rts-active-high; linux,rs485-enabled-at-boot-time; };
排查与解决建议
- 合并重复的UART2节点:设备树中重复定义
&uart2会导致后一个节点覆盖前一个,前一个的rts-gpios、pinctrl等关键配置会失效。需将所有属性合并到同一个&uart2节点中,示例:&uart2 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart2>; rts-gpios = <&gpio4 25 GPIO_ACTIVE_HIGH>; rs485-rts-delay = <0 0>; rs485-rts-active-high; linux,rs485-enabled-at-boot-time; status = "okay"; fsl,dte-mode; }; - 修正GPIO引脚配置参数:
MX6UL_PAD_CSI_DATA04__GPIO4_IO25的配置值0x10b0仅设置了基础属性,建议改为0x1b0b1(与UART收发引脚配置一致,包含上拉、高速驱动、推挽输出),确保引脚驱动能力符合RS-485模块需求。 - 匹配RS-485模块使能逻辑:
rs485-rts-active-high表示高电平使能发送,低电平切换为接收。如果你的RS-485模块是低电平使能发送,需删除该属性或改为rs485-rts-active-low。 - 验证内核RS485支持:确认内核已开启
CONFIG_SERIAL_RS485编译选项,若未开启需重新编译内核并烧录。 - 硬件引脚功能验证:通过sysfs手动控制GPIO,确认引脚硬件功能正常:
- 导出GPIO:
echo 153 > /sys/class/gpio/export(GPIO4_25编号计算:4*32+25=153) - 设置为输出模式:
echo out > /sys/class/gpio/gpio153/direction - 切换电平:
echo 0 > /sys/class/gpio/gpio153/value和echo 1 > /sys/class/gpio/gpio153/value,用万用表或逻辑分析仪检测引脚电平变化,排除硬件故障。
- 导出GPIO:
内容的提问来源于stack exchange,提问作者prial joshi
相关产品推荐
相关产品推荐

