3. 串口通讯

本章主要讲解LubanCat-Hi3403系列板卡的40pin引脚中串口的使用方法。

3.1. UART引脚

../../../_images/40Pin-uart.png

查看LubanCat-Hi3403 40Pin引脚图,可以看到40Pin接口中有两组默认UART。

除了上述的基础引脚功能,还有其他引脚也能被复用为串口引脚,详情可查看 《LubanCat-Hi3403引脚复用表》 。 建议优先使用基础引脚配置,如果接口数量不够使用时可选其他可以配置功能为串口的引脚。

对照40Pin排针引脚功能复用表,整理串口的引脚关系如下表所示

引脚功能

引脚

功能

寄存器地址

UART1_TXD(默认)

8

UART1数据发送

0x102f0064

0x1201

UART1_RXD(默认)

10

UART1数据接收

0x102f0060

0x1201

UART1_RTSN

11

UART1流控引脚

0x102f0068

0x1201

UART1_CTSN

35

UART1流控引脚

0x102f006c

0x1201

UART2_RXD

29

UART2数据接收

0x102f0070

0x1201

UART2_TXD

31

UART2数据发送

0x102f0074

0x1201

UART2_CTSN

32

UART2流控引脚

0x102f007c

0x1201

UART2_RTSN

33

UART2流控引脚

0x102f0078

0x1201

UART3_RXD

11

UART3数据接收

0x102f0068

0x1204

UART3_TXD

19

UART3数据发送

0x102f0130

0x1201

UART3_RXD

24

UART3数据接收

0x102f012c

0x1201

UART3_TXD

35

UART3数据发送

0x102f006c

0x1204

UART4_RXD

21

UART4数据接收

0x102f0134

0x1201

UART4_TXD

23

UART4数据发送

0x102f0138

0x1201

UART4_TXD(默认)

32

UART4数据发送

0x102f007c

0x1204

UART4_RXD(默认)

33

UART4数据接收

0x102f0078

0x1204

UART5_TXD

19

UART5数据发送

0x102f0130

0x1204

UART5_RTSN

21

UART5流控引脚

0x102f0134

0x1204

UART5_CTSN

23

UART5流控引脚

0x102f0138

0x1204

UART5_RXD

24

UART5数据接收

0x102f012c

0x1204

流控引脚中,RTS表示本机准备好接收数据,告诉对方可以发送;CTS表示对方准备好接收数据,告诉本机可以发送。

流控功能为可选功能,不是串口通信必须的。极端情况下,串口也可以配置为单线模式,即仅发送或仅接受的模式,只连接TXD引脚则只能发送数据,只连接RXD引脚则只能接收数据。

除了数据线外,还应该对两个模块的GND进行连接,起到统一参考电位的作用。

3.2. 设置串口引脚复用

Hi3403中所有的串口默认在设备树中都已经打开,但是并未配置引脚, 因此此时能在/dev目录下看到共有6个串口设备ttyAMA0-ttyAMA5,但是无法通过对应的引脚发送和接收数据。

../../../_images/uart-ls.png

在开始通信前还需要对引脚功能进行配置,这里使用bspmm命令配置引脚。

1
2
3
4
5
6
7
8
9
# UART1_TXD
bspmm 0x102f0064 0x1201
# UART1_RXD
bspmm 0x102f0060 0x1201

# UART4_TXD
bspmm 0x102f007c 0x1204
# UART4_RXD
bspmm 0x102f0078 0x1204
../../../_images/bspmm4.png

需要特别注意,当一个串口有多组引脚可供选择时,只能开启一组引脚,如果遇到功能异常,请排查其他组引脚的配置情况。

3.3. 串口通讯实验(Shell)

本次实验使用LubanCat-Hi3403板卡讲解,使用板卡上的串口1进行实验,对应的设备文件为/dev/ttyAMA1。 对tty的设备文件直接读写就可以控制设备通过串口接收或发送数据,下面我们使用板卡配合Windows下的串口调试助手或Linux下的minicom进行测试。

3.3.1. 连接串口

实验前需要使用串口线或USB转串口线把它与板卡与电脑连接起来。

  • 板卡 - 电脑

  • TXD — RXD

  • RXD — TXD

  • GND — GND

如下图

../../../_images/uart-connect.jpg

3.3.2. 查询串口1的通信参数

用stty工具查询其通信参数

1
2
#在板卡的终端执行如下命令
stty -F /dev/ttyAMA1

如下图:

../../../_images/uart-show_baud.png

3.3.3. 修改串口波特率

1
2
#设置通讯速率,其中ispeed为输入速率,ospeed为输出速率
stty -F /dev/ttyAMA1 ispeed 115200 ospeed 115200

如下图:

../../../_images/uart-show-115200.png

3.3.4. 关闭回显

默认串口是开启回显的 可以使用以下命令关闭回显

1
stty -F /dev/ttyAMA1 -echo

3.4. 与Windows主机通讯

配置好串口调试助手后,尝试使用如下命令测试发送数据:

1
2
3
4
5
#在板卡上的终端执行如下指令
#使用echo命令向终端设备文件写入字符串"Hello!"、"I'm lubancat"
echo Hello! > /dev/ttyAMA1
echo "I'm lubancat" > /dev/ttyAMA1
#Windows上的串口调试助手会接收到内容

如下图:

../../../_images/uart-smsg.png

可以看到,往/dev/ttyAMA1设备文件写入的内容会直接通过串口线发送至Windows的主机。

而读取设备文件则可接收Windows主机发往板卡的内容,可以使用cat命令来读取:

1
2
3
4
5
6
7
#在板卡上的终端执行如下指令
#使用cat命令读取终端设备文件
cat /dev/ttyAMA1
#cat命令会等待
#使用串口调试助手发送字符串
#字符串最后必须加回车!
#板卡的终端会输出接收到的内容

如下图:

../../../_images/uart-rmsg.png

Hello lubancat!

3.5. minicom通讯

1
2
3
4
5
#Ubuntu安装minicom软件包,Buildroot已经预先安装了
apt install minicom

#设置串口
minicom -s
../../../_images/uart-minicom-set.png

选择Serial port setup,按Enter键进入

../../../_images/uart-minicom-set-baud.png

进入设置后,按键盘上的字母进入对应的子设置项,修改完成后按Enter键完成当前子设置项的修改。 主要是修改选择的串口设备、设置波特率。

所有要修改的子配置项都设置完成后,按Enter键确认修改并退出到主页面。

../../../_images/uart-save-minicom.png

选择Save setp as dfl,然后按Enter键保存修改到配置文件,以后就不用每次打开文件都要进行配置了。

../../../_images/uart-minicom-exit.png

然后选择Exit进入minicom的终端

如果你输入字母,屏幕上没反应,可以通过打开回显来显示, 先按“ctrl + A” 再按’z’键进入菜单

../../../_images/uart-minicom-menu.png

按下’e’,回显就打开成功了(左下角会有提示,打开或者关闭),可以按下按键测试一下,观察是否有回显。

../../../_images/echo-on.png

我们还可以先按“ctrl + A” 再按’z’键进入设置菜单,再按’c’键来清除屏幕。

将板卡和电脑用串口线连起来,同时设置为115200,在板卡上,输入”Hello! i’m lubancat!’’

../../../_images/uart-minicom-rsv.png

我们可以发现,每当我们在minicom中输入一个字符,串口调试助手中就收到一个字符, 这是因为在minicom是以单个字符的方式发送的,所以使用minicom时,不能使用退格键把输入的内容删掉,

我们可以在pc端串口助手总发送字符,在minicom中接收

../../../_images/uart-minicom-send.png
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
minicom的菜单有很多功能,
s ---- 发送文件
p ---- 设置通讯参数,包括一些预设的波特率,数据格式,数据位等
l ---- 就可以将log信息保存到一个文件中了,方便查看
t ---- 设置终端参数,以及键位设置
w ---- 超出一行的数据后自动换行
r ---- 接收文件
a ---- 换行发送时会增加时间戳
n ---- 增加时间戳
c ---- 清除屏幕
o ---- 设置minicom,相当于minicom -s
j ---- 休眠状态
x ---- 退出的同时复位
q ---- 退出

你也可以不用通过按 "ctrl + a" + 'z' + '?'的方式设置
而是直接使用"ctrl + a"  + '?'

3.6. 更多

更多关于uart驱动及操作方式可以查看官方文档《外围设备驱动 操作指南.pdf》 1.7 UART操作指南

3.7. 参考资料

本文档主要提供有一定经验的使用者快速入门使用,对于初学者可查看以下文档:

《imx6ull : 串口通讯与终端设备》

《stty工具命令》