在嵌入式项目中,UART接口的使用频率很高,多种模块(2G通信模组、蓝牙模块,等等)都会通过UART接口与主控MCU相连。本文将梳理UART接口调试流程,为调试工作提供参考,解决调试过程中可能遇到的问题,快速完成UART接口调试,实现模块功能。
配置驱动选项
首先查看原理图确认串口号,比如UART1,同时查看该串口引脚是否有复用功能,比如用作SD卡接口。如果有复用,需要在内核配置中取消复用功能的选项。然后选中串口功能,大致的路径为
Device Drivers > Character devices > Serial drivers
不同厂家提供的BSP有细微差别,具体路径视情况而定。在内核根目录输入make menuconfig打开内核配置界面,选中UART1。以nuc970 为例,配置如下:
$ make menuconfig
产生UART设备节点
编译运行内核,如果UART1驱动加载成功会在/dev目录下产生相应UART设备节点。以高通mdm9x07为例:
系统启动之后在/dev下有两个ttyHSL设备节点:ttyHSL0、ttyHSL1。
$ cat /proc/tty/driver/msm_serial_hsl
输入该命令可以显示设备节点详细信息,其中通过地址(0x078B3000)与data sheet对比即可确认UART1对应的设备节点为/dev/ttyHSL1。
同时通过who命令可查看当前终端tty信息。
$ who
root ttyHSL0 00:00 Jan 6 00:02:00
发现/dev/ttyHSL0为调试串口。
如果UART设备节点未产生,可在其相应驱动程序xx_probe函数中添加打印,查看xx_probe函数是否被调用,进一步查找原因。
软件回环测试
如果成功产生了UART设备节点,可通过软件回环测试确认UART驱动程序功能是否正常。测试步骤:
进入loopback文件所在目录:
$ cd /sys/kernel/debug/msm_serial_hsl
将loopback.1值设置为1,打开UART1回环测试。
$ echo 1 > loopback.1
回环测试程序代码:
#include<stdio.h>