Phytec中国的wiki
support@phytec.cn
热线:0755-61802110-803
核心板中各个串口默认工作在DCE模式,除非在设备树中配置以下配置:
Optional properties: - fsl,dte-mode : Indicate the uart works in DTE mode. The uart works in DCE mode by default.
DCE模式意为着信号在uart模块中不交叉:
UARTn_UFCR[DCEDTE]=0 (DCE mode)
UARTn_UFCR[DCEDTE]=1 (DTE mode)
而配置DTE模式后,uart信号在uart模块中交叉。
注意iomux中,并不能做交叉,在i.MX6ul的设备树配置中,每个uart口的寄存器,都有两个配置:
https://elixir.bootlin.com/linux/latest/source/arch/arm/boot/dts/imx6ul-pinfunc.h
<mux_reg conf_reg input_reg mux_mode input_val>
#define MX6UL_PAD_UART5_TX_DATA__UART5_DCE_TX 0x00bc 0x0348 0x0000 0 0 #define MX6UL_PAD_UART5_TX_DATA__UART5_DTE_RX 0x00bc 0x0348 0x0644 0 4
...#define MX6UL_PAD_UART5_RX_DATA__UART5_DCE_RX 0x00c0 0x034c 0x0644 0 5 #define MX6UL_PAD_UART5_RX_DATA__UART5_DTE_TX 0x00c0 0x034c 0x0000 0 0
这两个的意思并不是要把mux配成tx或rx,他们对于iomux中的 SW_MUX_CTL_PAD_UART5_TX_DATA这个mux寄存器的配置是一样的,都是 ALT0,UART5_TX。
但如果配置了DTE模式,由于uart模块内部进行了交叉,uart_tx变成了rx,那么 UART5_RX_DATA_SELECT_INPUT这个寄存器的配置就必须要修改,否则会导致UART5_RX的输入路径配成了tx引脚,导致可以发送,但无法接收。
也就是说,如果要使用非默认的DTE模式,除了前面说的要在uart设备树节点配置fsl,dte-mode以外,mux也要改过来。而如果使用DCE的mux,就不能加fsl,dte-mode这个配置。
那么这里就总结一下i.MX6ul下的用法。
情况 | 串口模式 | mux设备树配置 |
---|---|---|
正常设计 | DCE模式 | 使用pinfunc.h中的DCE配置 |
硬件设计失误,rx/tx反了 | DTE模式 | 使用pinfunc.h中的DTE配置,增加fsl,dte-mode |
请勿将串口配置中的DCE和mux中的DTE交叉混用。
参考资料:
Overview
Content Tools
Activity
Tasks