1. 程式人生 > >嵌入式Linux下串列埠除錯

嵌入式Linux下串列埠除錯

By Toradex秦海

1). 簡介

UART串列埠是嵌入式裝置最為常用的除錯和通訊介面之一,無論是RS232還是RS422/485都有著非常廣泛的應用,因此本文就基於嵌入式Linux演示在User Space進行串列埠除錯。

本文所演示的平臺來自於Toradex Colibri iMX6DL ARM嵌入式平臺,這是一個基於NXP iMX6DL ARM處理器,支援雙核Cortex-A9。

2. 準備

a).Colibri iMX6DL ARM核心版配合Colibri Eva Board載板,連線除錯串列埠UART1到開發主機方便除錯,同時配置好Ubuntu開發主機開發環境,具體操作方法可以參考

這裡

b).Colibri iMX6DL系統使用Toradex Linux Release V2.6.1,下載和更新方法請參考這裡

3). RS232串列埠通訊測試

a). Colibri iMX6S核心版預設定義提供了三個串列埠,如下所示,其中UART1為預設的除錯串列埠,當然可以通過uboot設定關閉除錯串列埠或者指定另外一個串列埠作為除錯串列埠。


b). Colibri Eva Board X25 Top DB9聯結器預設為UART2介面,連線到Ubuntu開發主機進行UART2串列埠測試。另外,通過載板跳線測試也可以將UART3串列埠路由到X25 bottom DB9聯結器上面,具體說明可以參考

這裡

c). User Space下直接操作UART2串列埠裝置進行測試

---------------------------------

//設定串列埠bandrate

[email protected]# stty -F /dev/ttymxc1 115200

//傳送資料

[email protected]# echo Test > /dev/ttymxc1

//接收資料

[email protected]# cat /dev/ttymxc1

--------------------------------

d). User Space下通過C程式測試UART2串列埠

./ uart相關基本操作標頭檔案和子程式

//開啟和關閉uart裝置

uart_open

uart_close

//配置uart baudrate以及其他引數並生效

uart_config

//利用write函式傳送資料

uart_send

//利用select函式偵測事件發生,然後用read函式讀取資料

uart_read

具體程式碼請見這裡:

./ main主程式,開啟並配置串列埠baud rate 115200,傳送資料然後接收資料來測試串列埠。

具體程式碼如下:

./執行情況,可見收發都正常

--------------------------------

//Colibri iMX6除錯串列埠輸出

[email protected]:~# ./uarttest /dev/ttymxc1                                   

send successflly                                                                

send sucessfully                                                               

test!

//PC主機RS-232介面測試埠輸出,收到message後,鍵盤鍵入”test!”後回車。

Welcome to minicom 2.7

……

this is a test program

--------------------------------

4). RS485串列埠通訊測試

a). Colibri iMX6 UART除了RS232模式,也支援RS422/485模式,這裡還是利用UART2來測試RS485半雙工模式通訊,基於Colibri Eva Board的硬體連線如下:

./ 將Colibri Eva Board聯結器X2 bottom DB9 管腳4(RXD+),管腳5(RXD-)以及管腳1(GND)和PC主機485介面裝置對接

./ 將Colibri Eva Board下面幾個跳線做如下設定:

   JP11 短接 – 讓485介面可以傳送以及接收收據,如果斷開,則只能傳送資料

   JP12,JP14斷開 – 用於插入120ohm終端電阻,針對RS-422模式

   JP13,JP15短接 – 設定為半雙工模式,如果斷開,則為全雙工模式

   JP16短接 – UART2到RS232的功能關閉,切換到RS485功能;斷開則反之。

b). 然後需要使能UART2 RS485功能,有兩種方式,一種是在device tree中使能,另外一種是利用ioctrl TIOCSRS485在User Space中使能。

./ 在device tree中使能

//參考這裡下載Toradex Linux kernel V2.6版本原始碼,根據如下patch檔案修改arch/arm/boot/dts/imx6dl-colibri-eval-v3.dts檔案,並參考這裡編譯新的dtb檔案後部署到Colibri iMX6模組上。

然後可以和上面第三章節完全一樣的兩種方式操作UART2裝置進行測試通訊,無需任何改動。

//在上面uartconfig.h和uartconfig.c檔案中新增485使能函式,同時可以配置RTS在傳送中和傳送後的電平以及時間延遲設定。

uart_485

//在uarttest.c中新增下面485使能,其他和上面RS232都一致。

--------------------------------

if(uart_485(fd) < 0)

{

         printf("failed enable RS485 mode\n");

         return -1;

}

else

         printf("RS485 mode enabled\n");

--------------------------------

完整程式碼同樣可以參考上面第3章節裡面的這三個檔案連結

//程式部署後執行情況,可見收發都正常

--------------------------------

//Colibri iMX6除錯串列埠輸出

[email protected]:~# ./uarttest /dev/ttymxc1                                   

RS485 mode enabled                                                             

send successflly                                                               

send sucessfully                                                                

test!

//PC主機RS485介面測試埠輸出,收到message後,鍵盤鍵入”test!”後回車。

Welcome to minicom 2.7

……

this is a test program

--------------------------------

5). 總結

本文基於NXP iMX6嵌入式平臺在嵌入式linux系統下測試了UART相關通訊,希望給大家有所幫助。