嵌入式Linux下串口调试

2019-07-12 14:37发布

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 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 ");          return -1; } else          printf("RS485 mode enabled "); -------------------------------- 完整代码同样可以参考上面第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相关通信,希望给大家有所帮助。