嵌入式Linux下串口调试

供稿:韬睿(上海)计算机科技有限公司

  • 关键词:Linux,ARM,,UART
  • 摘要:UART串口是嵌入式设备最为常用的调试和通讯接口之一,无论是RS232还是RS422/485都有着非常广泛的应用,因此本文就基于嵌入式Linux演示在User Space进行串口调试。

1). 简介

UART串口是嵌入式设备最为常用的调试和通讯接口之一,无论是RS232还是RS422/485都有着非常广泛的应用,因此本文就基于嵌入式Linux演示在User Space进行串口调试。


本文所演示的平台来自于Toradex Colibri iMX6DL ARM嵌入式平台,这是一个基于NXP iMX6DL ARM处理器,支持双核Cortex-A9。


2. 准备

a).ColibriiMX6DL ARM核心版配合ColibriEva 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

root@colibri-imx6# stty -F /dev/ttymxc1115200

//发送数据

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主程序,打开并配置串口baudrate 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中使能,另外一种是利用ioctrlTIOCSRS485在User Space中使能。

./ 在device tree中使能

//参考这里下载Toradex Linuxkernel 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设备进行测试通信,无需任何改动。


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

//在上面uartconfig.h和uartconfig.c文件中添加485使能函数,同时可以配置RTS在发送中和发送后的电平以及时间延迟设置。

uart_485

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

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

if(uart_485(fd)< 0)

{

        printf("failedenable RS485 mode\n");

        return -1;

}

else

        printf("RS485mode 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相关通信,希望给大家有所帮助。

发布时间:2017年4月6日 15:45  人气:   审核编辑(王静 )
相关链接

我有需求