3. 串口通讯¶
本章主要讲解LubanCat-Hi3403系列板卡的40pin引脚中串口的使用方法。
3.1. UART引脚¶
查看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,但是无法通过对应的引脚发送和接收数据。
在开始通信前还需要对引脚功能进行配置,这里使用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
|
需要特别注意,当一个串口有多组引脚可供选择时,只能开启一组引脚,如果遇到功能异常,请排查其他组引脚的配置情况。
3.3. 串口通讯实验(Shell)¶
本次实验使用LubanCat-Hi3403板卡讲解,使用板卡上的串口1进行实验,对应的设备文件为/dev/ttyAMA1。 对tty的设备文件直接读写就可以控制设备通过串口接收或发送数据,下面我们使用板卡配合Windows下的串口调试助手或Linux下的minicom进行测试。
3.3.3. 修改串口波特率¶
1 2 | #设置通讯速率,其中ispeed为输入速率,ospeed为输出速率
stty -F /dev/ttyAMA1 ispeed 115200 ospeed 115200
|
如下图:
3.4. 与Windows主机通讯¶
配置好串口调试助手后,尝试使用如下命令测试发送数据:
1 2 3 4 5 | #在板卡上的终端执行如下指令
#使用echo命令向终端设备文件写入字符串"Hello!"、"I'm lubancat"
echo Hello! > /dev/ttyAMA1
echo "I'm lubancat" > /dev/ttyAMA1
#Windows上的串口调试助手会接收到内容
|
如下图:
可以看到,往/dev/ttyAMA1设备文件写入的内容会直接通过串口线发送至Windows的主机。
而读取设备文件则可接收Windows主机发往板卡的内容,可以使用cat命令来读取:
1 2 3 4 5 6 7 | #在板卡上的终端执行如下指令
#使用cat命令读取终端设备文件
cat /dev/ttyAMA1
#cat命令会等待
#使用串口调试助手发送字符串
#字符串最后必须加回车!
#板卡的终端会输出接收到的内容
|
如下图:
Hello lubancat!
3.5. minicom通讯¶
1 2 3 4 5 | #Ubuntu安装minicom软件包,Buildroot已经预先安装了
apt install minicom
#设置串口
minicom -s
|
选择Serial port setup,按Enter键进入
进入设置后,按键盘上的字母进入对应的子设置项,修改完成后按Enter键完成当前子设置项的修改。 主要是修改选择的串口设备、设置波特率。
所有要修改的子配置项都设置完成后,按Enter键确认修改并退出到主页面。
选择Save setp as dfl,然后按Enter键保存修改到配置文件,以后就不用每次打开文件都要进行配置了。
然后选择Exit进入minicom的终端
如果你输入字母,屏幕上没反应,可以通过打开回显来显示, 先按“ctrl + A” 再按’z’键进入菜单
按下’e’,回显就打开成功了(左下角会有提示,打开或者关闭),可以按下按键测试一下,观察是否有回显。
我们还可以先按“ctrl + A” 再按’z’键进入设置菜单,再按’c’键来清除屏幕。
将板卡和电脑用串口线连起来,同时设置为115200,在板卡上,输入”Hello! i’m lubancat!’’
我们可以发现,每当我们在minicom中输入一个字符,串口调试助手中就收到一个字符, 这是因为在minicom是以单个字符的方式发送的,所以使用minicom时,不能使用退格键把输入的内容删掉,
我们可以在pc端串口助手总发送字符,在minicom中接收
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操作指南
