介绍:
前段时间购买了野火科技的鲁班猫lubancat1去学习linux,在学习过程中,编写几篇博客作为记录学习路径以及复习的基地。
再次感谢野火始终如一的开源精神!本人从stm32到linux、FPGA都是学习野火科技的教程!
硬:
鲁班猫CAT1
软件:
[野火]《快速使用手册—基于LubanCat-RK3566/RK3568系列板卡》(鲁班猫0/1/2系列)
USART介绍
USART是通用异步收发传输器(UniversalAsynchronousReceiver/Transmitter),通常称作UART,是一种异步收发传输器,是设备间进行异步通信的关键模块。UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;通信双方只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用两根信号线(Rx和Tx)就可以完成通信过程,因此也称为异步串行通信。
准备工具
首先是上位机:我们需要在电脑上下载串口调试助手,我这里以sscom5131为例进行演示。
硬件准备则需要USB转TTL进行电平转换:
按照串口通讯的接法,我们需要在测试前提前把USB转TTL和我们的鲁班猫1连接好。
鲁班猫外接的40PIN引脚定义如下:
40PIN引出的引脚中,我们可以选择UART3_M0、UART3_M1、UART4_M1、UART5_M1、UART7_M1、UART9_M1,其中同一个串口只能打开一个。
我们这里演示的时候,以UART3_M1为例。
对应的引脚为:6,8,10;分别为GND,TX,RX三根线。
串口实验
使能串口接口
和单片机一样,所有的外设设备,在芯片开机的时候都是默认关闭状态的,使用的时候需要单独去进行使能或者是初始化。
在Linux中我们可以通过改变设备树的配置文件,对串口进行使能。
配置文件是一个十分重要的功能,配置文件可以配置设备树插件的开启与关闭, 内核的启动参数,选择启动的内核。
针对鲁班猫1的设备树配置文件存在于:uEnvLubanCat1.txt
我们通过打开 /boot/uEnv/board.txt (board是你所用的板子的名称) 查看是否启用了uart相关设备设备树插件。
先进入 /boot/uEnv/ 后使用ls指令去查看:
其中这些设备树配置文件对应不同板卡有不同的配置,程序在启动的时候都是默认去载入 uEnv.txt 文件,在初始化完成以后,再会去载入到对应板卡的一个设备树配置文件。
让我们对鲁班1的设备树文件进行修改:
如果权限不够,则需要在开头加 sudo 以提升管理员,以下是进入设备树文件以后的文件具体内容。
我们下滑找到串口3的M1选项。
按 I 进入编辑模式,取消注释以达到使能的目的,然后按Esc退出编辑后,打印 :wq 进行保存
编辑完毕以后,我们输入 reboot 对系统进行重启以重新加载设备树,因为设备树只会在系统的最开始的时候加载。
如果报错,则需要输入sudo提升一下权限
如果是直接拔电源的方式重启,会有可能出现文件没能做出修改 (原因:文件未能及时从内存同步到存储设备中,解决方法,在终端上输入 “sync” 再拔电关机)
sync 是一个 Unix 和 Linux 系统中的命令,用于将内存中的缓冲区内容同步到磁盘上。它的主要作用是确保所有未写入磁盘的数据都被写入,从而保证文件系统的完整性。
我们重新登录以后,查询一下目前串口是否开启:
#执行命令查看终端设备
ls /dev/tty*
这里跳出来的 ttyS3 设备就是我们之前打开的串口3设备。
串口3在外设被使能后,系统会在/dev目录下生成对应的 ttyS3 的设备文件,可以通过 stty 工具查询其通讯参数。
stty工具的使用方法如下:
使用 `stty` 设置串行端口的其他参数(如数据位、停止位、校验位等)非常直观。以下是一些常用的参数及其用法示例:
常用参数
1. 波特率(Baud Rate):
- `ispeed`:设置输入速率(接收速率)
- `ospeed`:设置输出速率(发送速率)
2. 数据位(Data Bits):
- `cs5`:5 位数据位
- `cs6`:6 位数据位
- `cs7`:7 位数据位
- `cs8`:8 位数据位(默认)
3. 停止位(Stop Bits):
- `cstopb`:设置为 2 位停止位
- `-cstopb`:设置为 1 位停止位(默认)
4. 校验位(Parity):
- `parenb`:启用校验位
- `-parenb`:禁用校验位(默认)
- `parodd`:设置为奇校验
- `-parodd`:设置为偶校验
- `cmspar`:设置为标记或空间校验(Mark or Space Parity)
5. 流控制(Flow Control):
- `crtscts`:启用硬件流控制
- `-crtscts`:禁用硬件流控制
- `ixon`:启用软件流控制(XON/XOFF)
- `-ixon`:禁用软件流控制
6. 其他选项:
- `raw`:设置为原始模式,禁用所有特殊字符处理
- `cooked`:设置为行编辑模式
- `echo`:启用回显
- `-echo`:禁用回显
示例命令
以下是一些示例命令,展示了如何使用 `stty` 设置不同的参数:
1. 设置波特率、数据位、停止位和校验位:
sudo stty -F /dev/ttyS3 ispeed 115200 ospeed 115200 cs8 -cstopb -parenb
- 输入和输出速率设置为 115200 波特
- 数据位设置为 8 位
- 停止位设置为 1 位
- 校验位禁用
2. 设置奇校验和硬件流控制:
sudo stty -F /dev/ttyS3 ispeed 9600 ospeed 9600 cs8 cstopb parenb parodd crtscts
```
- 输入和输出速率设置为 9600 波特
- 数据位设置为 8 位
- 停止位设置为 1 位
- 启用奇校验
- 启用硬件流控制
3. 设置偶校验和软件流控制:
sudo stty -F /dev/ttyS3 ispeed 19200 ospeed 19200 cs7 cstopb parenb -parodd ixon
- 输入和输出速率设置为 19200 波特
- 数据位设置为 7 位
- 停止位设置为 1 位
- 启用偶校验
- 启用软件流控制
4. 设置原始模式:
sudo stty -F /dev/ttyS3 raw
- 设置为原始模式,禁用所有特殊字符处理
查看当前设置
你可以使用 `stty` 命令查看当前的串行端口设置:
stty -F /dev/ttyS3
注意事项
1. 权限:通常需要 root 权限才能配置串行端口。使用 `sudo` 可以获得必要的权限。
2. 设备文*:确保设备文件路径正确。例如,`/dev/ttyS3` 应该是你实际使用的串行端口设备文件。
3. 参数顺序:参数的顺序通常不影响结果,但建议按照逻辑顺序排列,以提高可读性。
我们根据该指令,可以去修改串口的一些基本参数。
#设置通讯速率,其中ispeed为输入速率,ospeed为输出速率
stty -F /dev/ttyS3 ispeed 115200 ospeed 115200
设置完成波特率以后,我们就可以开始和主机进行通讯了:
在野火的手册中,例子如下:
#在板卡上的终端执行如下指令
#使用echo命令向终端设备文件写入字符串"Hello!"、"I'm lubancat"
echo Hello! > /dev/ttyS3
echo "I'm lubancat" > /dev/ttyS3
#Windows上的串口调试助手会接收到内容
我们在上位机中选择对应的端口以及波特率后,其他数据位和停止位按照默认即可。
接收显示如下:
而读取设备文件则可接收Winodws主机发往板卡的内容,可以使用cat命令来读取:
在野火的手册中,例子如下:
#在板卡上的终端执行如下指令
#使用cat命令读取终端设备文件
cat /dev/ttyS3
#cat命令会等待
#使用串口调试助手发送字符串
#字符串最后必须加回车!
#板卡的终端会输出接收到的内容
默认是开启回显的,如果不需要,可以输入指令去关闭:
stty -F /dev/ttyS3 -echo
然后使用 ctrl+c 可以终止发送,关于读取的指令,又有其不同的用法:
当你使用 `cat /dev/ttyS3` 命令从串行端口读取数据时,`cat` 会一直监听并显示从该设备接收到的所有数据,直到你手动停止它。以下是几种停止 `cat` 命令的方法:
方法一:使用 Ctrl+C
最简单的方法是按下 `Ctrl+C` 组合键。这会发送一个中断信号(SIGINT)给 `cat` 进程,使其终止。
cat /dev/ttyS3
然后按 `Ctrl+C` 终止 `cat` 命令。
方法二:使用后台作业控制
你可以将 `cat` 命令放到后台运行,然后使用 `kill` 命令终止它。
1. 启动 `cat` 并将其放到后台:
cat /dev/ttyS3 &
2. 获取 `cat` 进程的 PID**:
jobs
这会显示当前后台作业的列表,包括每个作业的作业号和进程 ID(PID)。
3. 终止 `cat` 进程:
kill %1 # 假设作业号是 1
或者直接使用进程 ID:
kill <PID>
方法三:使用 `timeout` 命令
你可以使用 `timeout` 命令来限制 `cat` 命令的运行时间。例如,如果你想让 `cat` 命令运行 10 秒钟后自动终止:
timeout 10 cat /dev/ttyS3
方法四:使用 `stty` 设置超时
你可以使用 `stty` 命令设置读取超时,这样 `cat` 命令会在一段时间内没有数据输入后自动退出。
1. 设置读取超时:
stty -F /dev/ttyS3 min 0 time 10
这会设置读取超时时间为 10 分之一秒(即 100 毫秒)。如果在这段时间内没有数据输入,`cat` 命令会退出。
2. 恢复默认设置:
stty -F /dev/ttyS3 sane
示例
以下是一个完整的示例,展示了如何使用 `timeout` 命令限制 `cat` 命令的运行时间:
# 设置读取超时时间为 10 秒
stty -F /dev/ttyS3 min 0 time 100
# 使用 cat 读取数据
cat /dev/ttyS3
# 恢复默认设置
stty -F /dev/ttyS3 sane
通过这些方法,你可以灵活地控制 `cat` 命令的运行,确保在不需要时及时停止接收数据。
结构拓展:
相信大家在学习的过程中也会有这样的问题,为什么我取消注释了以后他就能使用了呢,如下图:
这里我们需要整理清楚这些文件的一个关系。
首先最重要的便是我们的设备树以dtb为结尾的文件存在于路径: /boot/rk-kernel.dtb 中
其中,rk-kernel.dtb 是通过软链接的方式链接到 dtb/rk3566-lubancat-1.dtb 这个设备树上的, 所以在系统启动时会使用该设备树进行启动。
其中 rk-kernel.dtb 一开始是指向 rk356x-lubancat-rk_series.dtb 该文件是通用板卡的配置文件,用于第一次启动配置系统,在启动以后就会跳转到专门为鲁班猫1做好适配的 rk3566-lubancat-1.dtb 。
如果想要切换设备树,可以参考以下命令:
#进入/boot目录下
cd /boot
#切换rk3566-lubancat-1.dtb设备树启动
ln -sf dtb/rk3566-lubancat-1.dtb rk-kernel.dtb
野火科技的教程中给出了一个详细的不同板卡及其对应的一个设备树的文件。
注意:以下图片来自野火快速使用手册!
在设备树文件以后,对应就是后缀为 .txt 的配置文件,在 LubanCat-RK3562/RK3566/RK3568系列的板子中,配置文件是一个十分重要的功能,配置文件可以配置设备树插件的开启与关闭, 内核的启动参数,选择启动的内核。
配置文件所在的位置为 /boot/uEnv
野火科技的教程中给出了一个详细的不同板卡及其对应的一个设备树配置的文件。
uEnv.txt 在镜像中会自动软链接到对应板卡的配置文件,可以使用 ls -l /boot/uEnv/uEnv.txt 或者 ls -l /boot/uEnv 查看实际链接的配置文件。
其中配置文件中出现的如下图所示的这些,都是其外设对应的一个设备树插件
而 LubanCat-RK3562/RK3566/RK3568系列的板子的设备树插件位于 /boot/dtb/overlay 里
注意:以下图片来自野火快速使用手册!
而配置对应设备树插件的方法是修改设备树插件的配置文件,配置文件位于 /boot/uEnv 内。
以上就是三者之间的关系,大家在使用的时候需要有一个清晰的认识。