Linux-RK3566学习记录2-串口通讯实验以及相关指令使用

 介绍:

前段时间购买了野火科技的鲁班猫lubancat1去学习linux,在学习过程中,编写几篇博客作为记录学习路径以及复习的基地。

再次感谢野火始终如一的开源精神!本人从stm32到linux、FPGA都是学习野火科技的教程!

硬:

鲁班猫CAT1

57c44a0503c54304bf3b8a8474b55e0a.jpeg

d32c3b9b478b40b589087f4411898899.jpeg

软件:

 [野火]《快速使用手册—基于LubanCat-RK3566/RK3568系列板卡》(鲁班猫0/1/2系列)

USART介绍

USART是通用异步收发传输器(UniversalAsynchronousReceiver/Transmitter),通常称作UART,是一种异步收发传输器,是设备间进行异步通信的关键模块。UART负责处理数据总线和串行口之间的串/并、并/串转换,并规定了帧格式;通信双方只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用两根信号线(Rx和Tx)就可以完成通信过程,因此也称为异步串行通信。

准备工具

首先是上位机:我们需要在电脑上下载串口调试助手,我这里以sscom5131为例进行演示。

6ce320d130754deeb15a0288be492e42.png

硬件准备则需要USB转TTL进行电平转换:

e447310e87b44166896f309d95a600c9.jpeg

按照串口通讯的接法,我们需要在测试前提前把USB转TTL和我们的鲁班猫1连接好。

鲁班猫外接的40PIN引脚定义如下:

d5f6eafd9b6343138747b5f320f7c24e.png

40PIN引出的引脚中,我们可以选择UART3_M0UART3_M1UART4_M1UART5_M1UART7_M1UART9_M1,其中同一个串口只能打开一个。

我们这里演示的时候,以UART3_M1为例。

对应的引脚为:6,8,10;分别为GND,TX,RX三根线。

7c73fe5bc7d1406195bf679fa5a7f285.png

串口实验

使能串口接口

和单片机一样,所有的外设设备,在芯片开机的时候都是默认关闭状态的,使用的时候需要单独去进行使能或者是初始化。

在Linux中我们可以通过改变设备树的配置文件,对串口进行使能。

配置文件是一个十分重要的功能,配置文件可以配置设备树插件的开启与关闭, 内核的启动参数,选择启动的内核。

针对鲁班猫1的设备树配置文件存在于:uEnvLubanCat1.txt

我们通过打开 /boot/uEnv/board.txt (board是你所用的板子的名称) 查看是否启用了uart相关设备设备树插件。

先进入 /boot/uEnv/ 后使用ls指令去查看:

06a503e28ea94f3aba55f6202b0d5b6b.png

其中这些设备树配置文件对应不同板卡有不同的配置,程序在启动的时候都是默认去载入 uEnv.txt 文件,在初始化完成以后,再会去载入到对应板卡的一个设备树配置文件。

让我们对鲁班1的设备树文件进行修改:

a3b5b1f3964043f3bd0c8eaf96cc8ac2.png

如果权限不够,则需要在开头加 sudo 以提升管理员,以下是进入设备树文件以后的文件具体内容。

7093d95231e845a3956bb25738f8d078.png

我们下滑找到串口3的M1选项。

2f5c054c7b2e4e4a877e7e0a63e679bf.png

按  I  进入编辑模式,取消注释以达到使能的目的,然后按Esc退出编辑后,打印    :wq  进行保存

785fecc753734d19b1ae335d39956881.png

编辑完毕以后,我们输入 reboot 对系统进行重启以重新加载设备树,因为设备树只会在系统的最开始的时候加载。

7ebdcf43e2c544298d2cefa5b38e862d.png

如果报错,则需要输入sudo提升一下权限

如果是直接拔电源的方式重启,会有可能出现文件没能做出修改 (原因:文件未能及时从内存同步到存储设备中,解决方法,在终端上输入 “sync” 再拔电关机)

sync 是一个 Unix 和 Linux 系统中的命令,用于将内存中的缓冲区内容同步到磁盘上。它的主要作用是确保所有未写入磁盘的数据都被写入,从而保证文件系统的完整性。

我们重新登录以后,查询一下目前串口是否开启:

 #执行命令查看终端设备
ls /dev/tty*

这里跳出来的 ttyS3 设备就是我们之前打开的串口3设备。

64c87a89e92945f6a2eb1c774fbf15d3.png

串口3在外设被使能后,系统会在/dev目录下生成对应的 ttyS3 的设备文件,可以通过 stty 工具查询其通讯参数。

0c11bcb686a444f8a5ab76c9634cbdb8.png

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

8d07f9155e41467c8550d542101251c4.png

设置完成波特率以后,我们就可以开始和主机进行通讯了:

在野火的手册中,例子如下:

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

我们在上位机中选择对应的端口以及波特率后,其他数据位和停止位按照默认即可。

336ad14a382447a88df090e03e3e907c.png

接收显示如下:

0f0440972df947e88505d35735dffdbf.png

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

在野火的手册中,例子如下:

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

ad7d196903fd42158d3d481d9518b65e.png

默认是开启回显的,如果不需要,可以输入指令去关闭:

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` 命令的运行,确保在不需要时及时停止接收数据。

结构拓展:

相信大家在学习的过程中也会有这样的问题,为什么我取消注释了以后他就能使用了呢,如下图:

2f5c054c7b2e4e4a877e7e0a63e679bf.png

这里我们需要整理清楚这些文件的一个关系。

首先最重要的便是我们的设备树以dtb为结尾的文件存在于路径: /boot/rk-kernel.dtb 中

d58cdf69c97c41b2994e4f01aca6b419.png

其中,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

野火科技的教程中给出了一个详细的不同板卡及其对应的一个设备树的文件。

注意:以下图片来自野火快速使用手册!

9ba9e029bd884b97b085c2c1c59ddecb.png

在设备树文件以后,对应就是后缀为 .txt 的配置文件,在 LubanCat-RK3562/RK3566/RK3568系列的板子中,配置文件是一个十分重要的功能,配置文件可以配置设备树插件的开启与关闭, 内核的启动参数,选择启动的内核。

配置文件所在的位置为 /boot/uEnv

b50921c5048e45db9c33a3f09461f999.png

野火科技的教程中给出了一个详细的不同板卡及其对应的一个设备树配置的文件。

674a2da4a2d145fe9470d55132e7a2f3.png

uEnv.txt 在镜像中会自动软链接到对应板卡的配置文件,可以使用 ls -l /boot/uEnv/uEnv.txt 或者 ls -l /boot/uEnv 查看实际链接的配置文件。

其中配置文件中出现的如下图所示的这些,都是其外设对应的一个设备树插件

2f5c054c7b2e4e4a877e7e0a63e679bf.png

而 LubanCat-RK3562/RK3566/RK3568系列的板子的设备树插件位于 /boot/dtb/overlay 里

注意:以下图片来自野火快速使用手册!

f0de8721b5934040acfe2081d186ca71.png

而配置对应设备树插件的方法是修改设备树插件的配置文件,配置文件位于 /boot/uEnv 内。

以上就是三者之间的关系,大家在使用的时候需要有一个清晰的认识。

### RK3588 平台串口通信配置与使用教程 #### 一、硬件连接 对于RK3588平台而言,调试串口通常采用TTL电平标准。为了实现计算机与RK3588之间的通讯,需配备USB转TTL转换器;如果涉及到其他类型的信号传输协议如RS485,则应选用相应的适配设备或是多功能一体化的串行接口装置[^1]。 #### 二、软件层面的操作方法 当目标是在用户空间内执行UART(通用异步收发传输器)的数据交换操作时,在Linux环境下可以通过简单的文件I/O方式来达成目的——即通过向特定路径下的节点写入数据来进行发送动作,反之亦然地从中读取出接收到的信息流。然而值得注意的是,针对诸如波特率设定以及奇偶检验位的选择这类初始化工作,则依赖于对`termios`结构体成员变量赋值并调用相应API函数完成配置过程[^2]。 #### 三、具体实践案例分析 考虑到实际应用场景中的需求差异性,在某些情况下可能需要调整默认预设好的参数组合以适应不同外设的要求。例如在DTS(DTB)源码文件`rk3588-linux.dtsi`中有如下定义:“/* Only 115200 and 1500000 */”,这意味着当前仅支持这两种速率选项之一作为初始状态。假设希望更改至更常见的115200bps模式下运行的话,则只需简单编辑该处文本并将改动后的版本重新编译打包成新的启动镜像刷入板卡即可生效[^3]。 ```bash stty -F /dev/ttyS0 speed 115200 cs8 -cstopb -parenb echo "Test Message" > /dev/ttyS0 cat </dev/ttyS0 & ``` 上述脚本展示了如何利用命令行工具快速设置TTY属性,并实现了基本的消息传递功能测试。其中第一条指令用于指定具体的串口号及其对应的波特率等重要特性;第二条则是模拟了一次简单的字符串输出行为;最后一条则开启了持续监听输入的状态以便观察远端反馈情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不及你的温柔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值