嵌入式Linux下串口调试

时间:2021-09-01 20:17:20

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设置关闭调试串口或者指定另外一个串口作为调试串口。

嵌入式Linux下串口调试

 

b). Colibri Eva Board X25 Top DB9连接器默认为UART2接口,连接到Ubuntu开发主机进行UART2串口测试。另外,通过载板跳线测试也可以将UART3串口路由到X25 bottom DB9连接器上面,具体说明可以参考这里

 

c). User Space下直接操作UART2串口设备进行测试

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

//设置串口bandrate

root@colibri-imx6# stty -F /dev/ttymxc1 115200

//发送数据

root@colibri-imx6# echo Test > /dev/ttymxc1

//接收数据

root@colibri-imx6# 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

 

具体代码请见这里:

uartconfig.h - https://github.com/simonqin09/uarttest/blob/master/uartconfig.h

uartconfig.c - https://github.com/simonqin09/uarttest/blob/master/uartconfig.c

 

./ main主程序,打开并配置串口baud rate 115200,发送数据然后接收数据来测试串口。

具体代码如下:

https://github.com/simonqin09/uarttest/blob/master/uarttest.c

 

./执行情况,可见收发都正常

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

//Colibri iMX6调试串口输出

root@colibri-imx6:~# ./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模块上。

https://github.com/simonqin09/uarttest/blob/master/485.patch

然后可以和上面第三章节完全一样的两种方式操作UART2设备进行测试通信,无需任何改动。

 

./ 利用ioctrl TIOCSRS485 在C程序中使能并通信

//在上面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调试串口输出

root@colibri-imx6:~# ./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相关通信,希望给大家有所帮助。