iMX6Q UART1 set to DTE mode will be hang on.

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

iMX6Q UART1 set to DTE mode will be hang on.

ソリューションへジャンプ
3,650件の閲覧回数
seanchen
Contributor III

Dear All,

We are using RS232 DTE mode full function of UART1 on iMX6Q.

Could anyone tell me how to enable DTE mode full function on UART1?

We now is set DTE mode via register "2020090" But system will hang on.

We tried to disconnect DCD pin, the hang on status will be solved,

I think isn't where setting is wrong?


Please give me suggestion.

Thank a lot.

1 解決策
2,729件の閲覧回数
XiaoPong
NXP Employee
NXP Employee

Hi, ZL,

                In DTE mode, DCD pin is an input pin. If hangup issue happens only when MAX3242CPW connected, I would suggest consult its FAE to get help.

Best Regards,

Wilson

元の投稿で解決策を見る

0 件の賞賛
返信
11 返答(返信)
2,729件の閲覧回数
YixingKong
Senior Contributor IV

Sean

After Fushi's reply, do you still have further question? If not please, keep exchanging email with him, otherwise please click Corret Answer/Helpful Answer. We would like to close the discussion if no activity in 3 days.

Thanks,

Yixing


0 件の賞賛
返信
2,729件の閲覧回数
karina_valencia
NXP Apps Support
NXP Apps Support

XiaoPong  can you continue with the follow up?

0 件の賞賛
返信
2,729件の閲覧回数
fushi_peng
NXP Employee
NXP Employee

Hi ,

Please reference the board file of iMX6Q arm2. 

static const struct imxuart_platform_data mx6_arm2_uart1_data __initconst = {

        .flags      = IMXUART_HAVE_RTSCTS | IMXUART_USE_DCEDTE | IMXUART_SDMA, /*this line enable DTE*/

        .dma_req_rx = MX6Q_DMA_REQ_UART2_RX,

        .dma_req_tx = MX6Q_DMA_REQ_UART2_TX,

};

But the arm2 board only use RTS CTS RXD TXD pins, seems you use DB9 connector , right ?

Please configure your IOMUX  carefully , check  iMX6 RM section 64.4.3 , such as :

64.4.3.6 DCD_B - Data Carrier Detect

This signal is an output in DCE mode and an input in DTE mode. If used, the DCE

device uses this signal to inform the DTE it has detected the carrier signal and the

connection will be set up. This signal remains active while the connection remains

established.

In DTE mode this input can trigger an interrupt on changing state. This is achieved by

setting to '1' the interrupt enable bit (DCD, UCR3[9]). The change state is reflected in

DCDDELT (USR2[6]). Also, the state of the Data Carrier Detect input is mirrored in the

status register DCDIN (USR2[5]).

2,729件の閲覧回数
XiaoPong
NXP Employee
NXP Employee

Hi, Fushi and Sean,

     This afternoon, I changed board-mx6q_sabresd.h and board-mx6q_sabresd.c in order to add other 6 pins (except for ground pin), then follow SabreAI settings by adding imxuart_platform_data and modifying mx6q_sabresd_init_uart. Then, system does not start up completely for login via telnet.

     Remarked DCD, DTR, DSR, and RI from board-mx6q_sabresd.h, and leave all changes in board-mx6q_sabresd.c, then, I am able to telnet system and memtool -32 0x2020090 1 shows 0xb41 (which stands for DTE mode). Use telnet, because console does not response in DTE mode.


     Added DTR, DSR and DCD into board-mx6q_sabresd.h, I am able to telnet into system and memtool -32 0x2020090 1 shows 0xb41. Post telnet log below:

$ telnet 192.168.106.101
Trying 192.168.106.101...
Connected to 192.168.106.101.
Escape character is '^]'.


        Welcome to Freescale Semiconductor Embedded Linux Environment


freescale login: root
root@freescale ~$ /unit_tests/memtool -32 0x2020090 1
E
Reading 0x1 count starting at address 0x02020090

0x02020090:  00000B41

    Please note, if enable RI on i.MX6Q SabreSD, I cannot telnet into system. Possible reason is that i.MX6Q SabreSD uses EB3 as boot mode selector and I did not rework hardware for this verification. On customer site, RI works fine, so I ignore RI error at this moment.


Append modified board-mx6q_sabresd.h and board-mx6q_sabresd.c for your reference.    

2,729件の閲覧回数
zlhuang
Contributor I

Dear Hung,

     I wonder if the UART1 DCD pin (EIM_D23) of your board is pulled-high, pulled-low, or floating.

     Thanks.

BRs,

ZL

0 件の賞賛
返信
2,729件の閲覧回数
XiaoPong
NXP Employee
NXP Employee

Hi, ZL,

                The EIM_D23 is pulled-high.

BRs,

Wilson

0 件の賞賛
返信
2,728件の閲覧回数
zlhuang
Contributor I

Dear Wilson,

     Our board with pull-high EIM_D23 works.

     However, it's just for debug.

     Our application utilizes this pin by connecting it to MAX3243CPW (RS-232 receiver) and it hangs the system.

     Could you test this again with similar hardware layout or give some advice?

     Thanks.

 

BRs,

ZL

0 件の賞賛
返信
2,730件の閲覧回数
XiaoPong
NXP Employee
NXP Employee

Hi, ZL,

                In DTE mode, DCD pin is an input pin. If hangup issue happens only when MAX3242CPW connected, I would suggest consult its FAE to get help.

Best Regards,

Wilson

0 件の賞賛
返信
2,729件の閲覧回数
seanchen
Contributor III

We have written 1 to clear DTRD bit of UART1_USR1 in interrupt routine(imx_int(int irq, void *dev_id), drivers/tty/serial/imx.c ).

However, the interrupts still happen continuously. and now UART1_USR1=0x2040.

0 件の賞賛
返信
2,729件の閲覧回数
seanchen
Contributor III

Dear Fushi Peng,

We tried to debug in driver source(kernel_imx/drivers/tty/serial/imx.c) and add some message in interrupt routines.

        When device is DCE mode, the interrupts happen one or two times for each read/write command.

When device is DTE mode, the interrupts happen continuously, and UART1_USR1=0x20C0

        Therefore, I think the hang-up is caused by abnormal interrupts in DTE mode.

How do we to fix this issue?

Please help!!!!!

0 件の賞賛
返信
2,729件の閲覧回数
seanchen
Contributor III

Dear Fushi Peng,

Thanks for your help.

We tried to config UART1 IOMUX but system still hang on when config to DTE mode.

Could you have any suggestion for us?

The following code is our UART1 config.

static const struct imxuart_platform_data mx6_uart_pdata __initconst = {

.flags      = IMXUART_HAVE_RTSCTS | IMXUART_USE_DCEDTE ,

};

  imx6q_add_imx_uart(0, &mx6_uart_pdata);

Thank you so much.

0 件の賞賛
返信