Dear all,
We use UART of i.MX6 as DTE mode.
We understand that the CTS_B can be set in HIGH or LOW by setting CTSC bit and the CTS bit of the UCR2 register.
However, when RXEN bit was set to 0, a value of CTS_B seemed to become HIGH forcibly regardless of these register setting.
Is the CTS_B signal affected by other register setting (except the CTS bit)?
Best Regards,
Yuuki
Is it your board (UART) now working properly with RTS/CTS signals?
From the linux kernel point of view, are these registers set through DeviceTree settings, or you needed to modify any .C code (imx.c)?
And finally, would you mind to share your DeviceTree excerpt in order to clearly understand what did you do to solve this issue?
Thank you
Hello,
The behavior that is expected from the CTS_B pin should be observed on the RTS_B pin of the UART IO port in DTE mode.
So, additional IOMUX settings that needs to be made are :
1. IOMUXC_SW_MUX_CTL_PAD_EIM_DATA29:0x4 (UART2 RTS_B)
2. IOMUXC_SW_MUX_CTL_PAD_EIM_DATA31:0x4 (UART3 RTS_B)
After this, changing the CTSC bit and the CTS bit in UCR2 should affect the RTS_B pin of UART IO i.e.(IOMUXC_SW_MUX_CTL_PAD_EIM_DATA29).
Also, The RTS_B pin of UART IP port is an active low pin. So, Ideally it should remain high when the UART is enabled which is probably why the CTS_B of UART IO port is getting high.
But the change of CTS_B (UART IO) on clearing RXEN is a bit unusual. You could check if TXEN or UARTEN bits affect the value of CTS_B (UART IO) or not.
As per my understanding the only difference in the DTE/DCE mode is the signal routing. Making the external UART connection according to the new routed signals should make it work.
Thanks,
Shubham
Hello,
In DTE mode signals are implemented as shown on figure of section 64.2 (External Signals)
of the i.MX6 S/DL RM. The CTS is mapped to RTS.
Have a great day,
Yuri
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
Dear Yuri-san,
Thank you for your quick response.
I referred to the following URL.
https://community.freescale.com/docs/DOC-97509
In this URL,
for DTE mode, UART_CTS_B is connected to Output CTS_B.
Is this a mistake?
Best Regrds,
Yuuki
I agree with comment of martin-schad
(in i.MX6: What does the DTE/DCE in i.MX6's UART do and how are RTS and CTS affected by the UARTxUFCR[DT... ) :
"But it seems that there is a typo in your table. In my opinion, DCE/DTE text in your table must be swapped."
Regards,
Yuri.
Dear Yuri-san,
Thank you for your support.
I'm sorry. I overlooked it.
However, there is a question more.
In DTE Mode, RTS_B of UART IP port(inside of iMX6) is connected to UART_CTS_B of IO port.
And, Direction of RTS_B of UART IP port is Input.
I do not know why does UART CTS_B of IO port become High when RXEN bit is set to 0.
May I have advice?
Best Regards,
Yuuki
Hello,
What is IOMUX configuration for UART functionality ?
In particular is IOMUXC_UART1_UART_RTS_B_SELECT_INPUT (for UART1)
is selected correctly ?
Is SION bit set ? (say in IOMUXC_SW_MUX_CTL_PAD_EIM_DATA20 for UART1) ?
Regards,
Yuri.
Hello,
In Your configuration internal CTS (output) signal is routed to external pin
UART1_UART_RTS_B (mux-ed with EIM_DATA20).
Please check if this pin is properly connected. Also, please check if all internal UART
module clocks are active.
Regards,
Yuri.
Dear Yuri-san,
Thank you for your support.
I'm sorry for the delay in my response.
We have a problem about UART2 and UART3 not UART1.
[UART2] EIM_D28(pin G23) is used as CTS_B(ALT4)
- IOMUXC_UART2_UART_RTS_B_SELECT_INPUT:0x0
- IOMUXC_SW_MUX_CTL_PAD_EIM_DATA28:0x4
[UART3] EIM_D30(pin J20) is used as CTS_B(ALT4)
- IOMUXC_UART3_UART_RTS_B_SELECT_INPUT:0x1
- IOMUXC_SW_MUX_CTL_PAD_EIM_DATA30:0x4
When the RXEN bit of the UCR2 register is set to 0, CTS_B become HIGH.
Why is CTS_B driven to High by RXEN=0?
Because it is DTE mode, RTS_B of UART IP port is connected to IO port of UART_CTS_B.
We understand that it does not drive the IO port, because RTS_B of UART IP is Input.
Best Regards,
Yuuki