在IMX6Q板子上调试UART接收端只能接收自己发送端的信息

2019-07-12 17:24发布

在IMX6Q板子上调试UART接收端只能接收自己发送端的信息

今天调试了一天的串口,遇到一个问题始终无法解决,暂时记录在这里,如果有遇到过这个问题的前辈,还望留言指点,感激不尽。
2016-7-11

背景

板卡1 : IMX6Q开发板;
PC: WIN10 64
协议:UART,TTL电平

遇到的问题

现在卡死的问题是,IMX6Q上运行着UART通信的程序,当IMX6Q与PC(USB-TTL)通信时,遇到一个问题,IMX6Q发送端发送到PC上正常显示,但PC发送到IMX6Q上的信息无法接收,另外,如果将IMX6Q上的收发端相连,可以正常接收到自己发送的信息。

问题的过程

  1. 首先将正常的程序运行在IMX6Q上,发现与PC通信时不正常,PC发送的信息在IMX6Q上无法接收。于是怀疑是通信电路的问题,但IMX6Q发送到PC的信息显示正常。排除硬件线路的问题。
  2. 其次,怀疑软件的问题,将软件重新进行配置,问题依然存在,后将软件下载到另外一个ARM9的板卡上,与PC机通信正常,排除是软件的问题。
  3. 然后,将IMX6Q的接收端与发送端相连,发现接收正常。排除是接收端根本无法接收信息的情况,同时排除IMX6Q开发板接收端硬件设计和制造上的问题、接线的问题、软件驱动端口选择的问题,这些都是正常的。
  4. 使用示波器查看波形,发送端波形正常,将IMX6Q与PC相连后,检查IMX6Q接收端,有正常波形,可以排除PC的问题,IMX6Q串口IO上是有波形的。
  5. 更换其他2个UART端口,发现无法发送与接收信息,没有深究。
现在可以确定,PC端完全没有问题,硬件接线完全没有问题,IMX6Q串口软件完全没有问题,IMX6Q串口端口完全没有问题,串口协议完全没有问题,同时检查了IMX6Q接收端不受其他硬件的干扰。
最关键的问题是,即使不排除这些问题,如何能解释串口只能接收自己发送出来的信息,收发缓存都在必要的时候进行清零。

做出的假设

问题是否会出现在IMX6Q串口的驱动配置上,驱动是使用的厂商配的,没有自己配置。如果驱动中有控制“接收端只能接收自己发送端的信息不能接收其他的信息”这样一个配置项,这个问题就能解决。

问题已经解决

晚上接着干,问题发现了。是硬件上的问题。
我的IMX6Q开发板上,ARM出来UART2_RX和和UART2_TX 引脚除了直接引出到UART2端子,同时还通过0欧姆电阻接到485芯片上,也就是UART2同时复用于外接串口和485通信,因为板子不是我画的,也没看那么多,从而导致上边的问题。 仔细分析硬件原理图,是因为我的程序是始终循环发送一个字符,而发送的信息通过TX到达了485芯片上,485通过接收到TX后,控制RE和DE打开隔离芯片,从而使RX和485隔离后边的保护电路接通,改变了UART2外部的电路阻抗,将串口接收到的信息电平拉高,导致单片机接收不到RX上的信息。 解决办法,将0欧姆电阻去掉就可以使用串口。如果需要使用485,则串口需要改用其他串口。