Question:
What exactly does the DTE/DCE interface in the i.MX6's UART module do and how are RTS and CTS affected by the UARTxUFCR[DTEDCE] bit?
In i.MX6 RM, revision 1:
Sections 64.2.1.2.1 (CTS) and 64.2.1.2.2 (RTS) both state that CTS and RTS change direction between DCE and DTE modes. However, sections 64.4.3.1 (RTS_B) and 64.4.3.8 (CTS_B) state they do not change functions. Is this a documentation error, or is there a difference between CTS/RTS and CTS_B/RTS_B?
It appears that some of this is covered in the IOMUX daisy chain by switching which pins are connected to CTS and RTS.
Answer:
Example 1: UART1 in DTE mode. RTS is an output from the UART IP block so it must be routed to a CTS pin.
Therefore, the SELECT_INPUT register could only use settings 00 or 10.
Example 2: UART1 in DCE mode. RTS is an input to the UART IP block so it must be routed to an RTS pin.
Therefore, the SELECT_INPUT register could only be set to 01 or 11.
At this point, we have assumed that the internal signals connected to the UART block do not change direction. We believe that DCEDTE from the UART block connects into the IOMUX logic and controls the direction of the PAD. Then, the IOMUX INPUT_SELECT mux is used to choose one of four pads to connect to the UART inputs while the IMOUX MUX_CTRL connects the output path. Further, we assume it is an error to connect the UART input to a pad configured as an output or a UART output to a pad configured as an input.
The attached shows our assumptions
For the Uart IP, the CTS_B is always an output and RTS_B always an input. But the RTS_B &CTS_B IO will be swapped when UART operates in different DTE or DCE mode.
IO port | DTE mode | DCE mode |
direction | Uart IP port(internal) | direction | Uart IP port(internal) |
UART_CTS_B | O | CTS_B | I | RTS_B |
UART_RTS_B | I | RTS_B | O | CTS_B |
UART_TXD | O | TXD | I | RXD |
UART_RXD | I | RXD | O | TXD |
Regarding how to configure the IOMUX, please see the attached PDF.