当前位置: 首页 > article >正文

RK356x-10:串口(uart)配置与调试

本文记录RK3566/RK3568通用异步串口(uart)的配置与调试过程

1. 配置uart节点

        1.1 在rk3568.dtsi中已经定义了uart0,uart1...,根据电路图,确定需要使用的是哪个串口,比如我使用的是uart0,在另外一个与我们自己主板相关的dtsi文件(一般不在rk3568.dtsi中直接改,这个文件不要改动,我的是自己创建的,名为rk3566_test_base.dtsi,就这里修改),打开uart0:

&uart0 {
	status = "okay";
	//dma-names = "tx", "rx";
	pinctrl-names = "default";
	pinctrl-0 = <&uart0_xfer/* &uart0_ctsn &uart0_rtsn*/>;
};

        1.2 注意pinctrl-0,里面的uart0_xfer在rk3568-pinctrl.dtsi(本文件也不要修改)中定义,可以看到下面信息:

        这里实际上是GPIO0-PC0和GPIO0-PC1,这里必须要和电路上的uart通信线rx和tx一致。假如采用了硬件控制信号,还需要配置uart0_ctsn和uart0_rtsn,它们同样在rk3568-pinctrl.dtsi中定义。

2.测试串口

        2.1 节点配置好后,烧录运行,一般会在/dev/下面看到类似ttyS0,ttyS1等设备文件,它对应的就是uart0,查看串口信息:

udevadm info /dev/ttyS0

        通过上面命令,可以看到如下串口信息,注意地址,它与uart在dtsi中定义的地址对应,比如下面ttyS0地址对应uart0的0xfdd50000

        2.2 串口波特率

stty -F /dev/ttyS0          查看波特率

stty -F /dev/ttyS0 115200      设置波特率为115200

        2.3 linux命令对串口读写

cat /dev/ttyS0   读取串口收到的信息

echo "hello" >> /dev/ttyS0 向串口发送信息 

3. python脚本测试串口

        3.1 要向自动测试串口,使用python是一个不错的选择,需要安装python3串口支持:

sudo apt install python3-serial

        3.2 编写测试脚本

import serial
import time
print("正在运行串口读取程序...")
com = '/dev/ttyS0'
ser = serial.Serial(com,115200,timeout=0.5)
print("Serial:",com," baud:",ser.baudrate)
ser.bytesize = serial.EIGHTBITS
ser.parity = serial.PARITY_NONE
ser.stopbits = serial.STOPBITS_ONE
print(ser.isOpen())
try:
    while True:
        if ser.in_waiting > 0:
            a = ser.read()
            print(a)
            serial.write(a)
except KeyboardInterrupt:
    print("程序退出!")
finally:
    ser.close()

        这个脚本就是从下位机接收数据并显示,同时发送接收到的数据,这样可以测试通信了

4.udev生成链接

        很多软件,比如klipper需要在/dev/serial/py-id或/dev/serial/py-path下面找串口的连接,但通常情况下,uart是不会自动生成这个链接的,需要修改udev规则文件,在/lib/udev/rules.d/或者/etc/udev/rules.d/中找到60-serial.rules,有可能名字不是这个,但是,它与serial有关,搜一下,然后编辑规则。

        由上图可见,原本系统只对ttyUSB*和ttyACM*作链接的,我们把串口ttyS*放进去即可,然后执行下面命令: 

sudo udevadm control --reload-rules

        这样就可以看到我们的串口被创建链接了:

 


http://www.kler.cn/a/407179.html

相关文章:

  • key-value存储实现
  • 外卖系统开发实战:从架构设计到代码实现
  • 什么是 C++ 中的模板特化和偏特化?如何进行模板特化和偏特化?
  • 【Linux】-学习笔记04
  • 23种设计模式-模板方法(Template Method)设计模式
  • Flink Lookup Join(维表 Join)
  • 多算法模型(BI-LSTM GRU Mamba ekan xgboost)实现功率预测
  • ubuntu安装Eclipse
  • 如何在React中服务器操作提交表单后(不)重置表单?
  • Next.js 独立开发教程(三):CSS 样式的完整指南
  • OpenHands:开源AI编程工具的新贵,让编程更自然
  • Rust学习(七):智能指针
  • Vue前端进阶面试题目(二)
  • .NET9 - 新功能体验(二)
  • (udp)网络编程套接字Linux(整理)
  • 4、MAC地址、ARP协议解析
  • 【数据结构】—— 二叉树
  • 跨域相关的一些问题 ✅
  • CodiMD导出pdf失败或无中文
  • MySQL 中的锁
  • PHP实现插入排序
  • 解决 Docker Desktop 启动报错:Docker Desktop is unable to detect a Hypervisor
  • gpt2的学习
  • LVM缩容
  • Chrome DevTools Protocol 进阶:DOM 域
  • 开放性实验——网络安全渗透测试