歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 在IMX6Q板子上調試UART接收端只能接收自己發送端的信息

在IMX6Q板子上調試UART接收端只能接收自己發送端的信息

日期:2017/3/3 11:31:16   编辑:Linux技術

在IMX6Q板子上調試UART接收端只能接收自己發送端的信息

今天調試了一天的串口,遇到一個問題始終無法解決,暫時記錄在這裡,如果有遇到過這個問題的前輩,還望留言指點,感激不盡。 2016-7-11

背景

板卡1 : IMX6Q開發板; PC: WIN10 64

協議:UART,TTL電平

遇到的問題

現在卡死的問題是,IMX6Q上運行著UART通信的程序,當IMX6Q與PC(USB-TTL)通信時,遇到一個問題,IMX6Q發送端發送到PC上正常顯示,但PC發送到IMX6Q上的信息無法接收,另外,如果將IMX6Q上的收發端相連,可以正常接收到自己發送的信息。

問題的過程

首先將正常的程序運行在IMX6Q上,發現與PC通信時不正常,PC發送的信息在IMX6Q上無法接收。於是懷疑是通信電路的問題,但IMX6Q發送到PC的信息顯示正常。排除硬件線路的問題。

其次,懷疑軟件的問題,將軟件重新進行配置,問題依然存在,後將軟件下載到另外一個ARM9的板卡上,與PC機通信正常,排除是軟件的問題。

然後,將IMX6Q的接收端與發送端相連,發現接收正常。排除是接收端根本無法接收信息的情況,同時排除IMX6Q開發板接收端硬件設計和制造上的問題、接線的問題、軟件驅動端口選擇的問題,這些都是正常的。

使用示波器查看波形,發送端波形正常,將IMX6Q與PC相連後,檢查IMX6Q接收端,有正常波形,可以排除PC的問題,IMX6Q串口IO上是有波形的。

更換其他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,則串口需要改用其他串口。

Copyright © Linux教程網 All Rights Reserved