嵌入式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相關通訊,希望給大家有所幫助。