RK3588平台串口配置修改指南:切换至串口8

电子说

1.4w人已加入

描述

一、背景与需求说明


 

在嵌入式开发中,串口作为基础调试接口至关重要。本文档针对 RK3588 平台,详细介绍如何将系统默认串口修改为串口 8UART8),包括 U-Boot 阶段和内核阶段的配置调整。该修改适用于需要使用额外串口进行调试或通信的场景,例如当默认串口被其他功能占用时,需重新映射控制台到串口 8

 

 

 

 

二、修改涉及的关键文件与原理

 

2.1 内核设备树配置(rk3588-linux.dtsi

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
--- a/kernel/arch/arm64/boot/dts/rockchip/rk3588-linux.dtsi+++ b/kernel/arch/arm64/boot/dts/rockchip/rk3588-linux.dtsi@@ -12,7 +12,7 @@ aliases {         };          chosen: chosen {-                bootargs = "earlycon=uart8250,mmio32,0xfeb50000 console=ttyFIQ0 irqchip.gicv3_pseudo_nmi=0 root=PARTUUID=614e0000-0000 rw rootwait rcupdate.rcu_expedited=1 rcu_nocbs=all mtdparts=sfc_nor:0x00040000@0x00180000(vnvm),0x00800000@0x00800000(uboot)";+                bootargs = "earlycon=uart8250,mmio32,0xfeb50000 console=ttyFIQ0 console=ttyS8,1500000n8 irqchip.gicv3_pseudo_nmi=0 root=PARTUUID=614e0000-0000 rw rootwait rcupdate.rcu_expedited=1 rcu_nocbs=all mtdparts=sfc_nor:0x00040000@0x00180000(vnvm),0x00800000@0x00800000(uboot)";         };

关键修改说明

 

 

bootargs 中新增console=ttyS8,1500000n8 参数

 

 

ttyS8 表示使用串口 8 作为控制台

 

 

1500000n8 定义波特率为 1500000,数据位 位,无校验位,位停止位

 

 

earlycon=uart8250,mmio32,0xfeb50000 用于早期控制台初始化,指定串口控制器基地址

 

 

2.2 U-Boot 设备树配置(rk3588-u-boot.dtsi

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
--- a/u-boot/arch/arm/dts/rk3588-u-boot.dtsi+++ b/u-boot/arch/arm/dts/rk3588-u-boot.dtsi@@ -44,11 +44,26 @@@@ -160,6 +175,14 @@         status = "okay"; }; +&uart8 {+        clock-frequency = <24000000>;+        u-boot,dm-spl;+        pinctrl-names = "default";+        status = "okay";        +        pinctrl-0 = <&uart8m0_xfer>;+};+ &hw_decompress {         u-boot,dm-spl;         status = "okay";@@ -304,6 +327,11 @@

关键修改说明

 

 

启用uart8 设备节点:

 

 

clock-frequency = <24000000>:设置串口时钟频率为 24MHz,用于波特率计算

 

 

u-boot,dm-spl:标记该串口用于 U-Boot SPLSecondary Program Loader)阶段

 

 

pinctrl-0 = <&uart8m0_xfer>:指定串口 8 的引脚复用配置,需确保与硬件设计一致

 

 

该配置使 U-Boot 在启动阶段能够初始化并使用串口 8

 

 

2.3 U-Boot CLI 代码修改(cli.c

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
--- a/u-boot/common/cli.c+++ b/u-boot/common/cli.c@@ -15,6 +15,10 @@ #include  #include  #include +#include +#include +#include +#include   DECLARE_GLOBAL_DATA_PTR; @@ -218,6 +222,16 @@ err: #ifndef CONFIG_CONSOLE_DISABLE_CLI void cli_loop(void) {+        struct udevice *uart_dev;+        writel(0x00ff00aa0xfd5f8088);+        if (uclass_get_device_by_seq(UCLASS_SERIAL, 8, &uart_dev))+                printf("uart: failed to get devicen");+        else+                printf("uart: got devicen");+        serial_dev_setbrg(uart_dev, 1500000);+        +        gd->flags |= GD_FLG_SERIAL_READY;+        gd->cur_serial_dev = uart_dev; #ifdef CONFIG_HUSH_PARSER         parse_file_outer();         /* This point is never reached */

关键修改说明

 

 

新增头文件包含:serial.hdm.h 等,用于串口设备管理

 

 

通过uclass_get_device_by_seq(UCLASS_SERIAL, 8, &uart_dev) 获取串口 8 设备句柄

 

 

serial_dev_setbrg(uart_dev, 1500000) 设置波特率为 1500000

 

 

更新全局数据结构gd,标记串口已准备就绪并设置为当前串口设备

 

 

三、完整修改步骤与实现流程

 

3.1 内核配置修改流程

 

1.定位设备树文件

 

 

进入内核源码目录:cd kernel/arch/arm64/boot/dts/rockchip/

 

 

2.修改 bootargs 参数

 

 

使用文本编辑器打开rk3588-linux.dtsi,在chosen 节点中添加console=ttyS8,1500000n8,确保内核启动时使用串口 8 作为控制台。

 

 

3.2 U-Boot 配置修改流程

 

1.定位 U-Boot 设备树文件

 

 

进入 U-Boot 源码目录:cd u-boot/arch/arm/dts/

 

 

2.启用串口 8 设备节点

 

 

打开rk3588-u-boot.dtsi,添加&uart8 节点配置,包括时钟频率、引脚控制和状态设置,确保 U-Boot 阶段能初始化串口 8

 

 

3.修改 CLI 代码初始化串口

 

 

进入 U-Boot 源码目录:cd u-boot/common/

 

 

打开cli.c,添加串口设备获取、波特率设置及全局数据更新逻辑,确保 U-Boot 命令行使用串口 8

 

 

四、硬件连接与引脚配置说明

 

4.1 串口 硬件连接要求

 

控制器基地址:根据设备树配置,串口 8 的基地址为 0xfeb50000(由earlycon=uart8250,mmio32,0xfeb50000 指定)

 

 

引脚复用:需确保uart8m0_xfer 引脚配置与硬件设计一致,通常包括:

 

 

TXD8(发送引脚)

 

 

RXD8(接收引脚)

 

 

GND(接地)

 

 

五、验证与调试方法

 

5.1 U-Boot 阶段验证

 

1.启动日志检查

 

 

连接串口 8 到调试终端(波特率 15000008N1),重启设备后观察 U-Boot 输出:

 

 

若配置正确,U-Boot 启动时会输出 uart: got device 日志

 

 

命令行提示符(如=>)应出现在串口 8 终端

 

 

1.串口设备查询

 

 

 U-Boot 命令行中执行:

 

 

  •  
  •  
  •  
  •  
printenv console# 应输出类似 "console=ttyS8,1500000"dev list | grep serial# 应显示串口 8 设备已注册

5.2 内核阶段验证

 

1.内核日志检查

 

 

内核启动后,串口 8 应输出完整的启动日志(dmesg 内容),并显示ttyS8 设备初始化信息:

 

 

  •  
  •  
[    0.000000] console [ttyS8] enabled[    1.234567] serial8250.8: ttyS8 at MMIO 0xfeb50000 (irq = 123) is a 16550A

1.串口设备测试

 

 

在系统中执行:

 

 

检查串口设备是否存在

 

 

ls /dev/ttyS8

 

 

测试串口通信(例如向串口 发送数据)

 

 

echo "Test Data" > /dev/ttyS8

 

 

5.3 常见故障排除

 

无输出问题

 

 

a.检查硬件连接是否正确,引脚是否短路或虚接

 

 

b.确认串口 8 的时钟频率(24MHz)与波特率(1500000)计算是否正确

 

 

c.检查设备树中的status 是否为"okay",确保设备未被禁用

 

 

波特率异常

 

 

确认serial_dev_setbrg console 参数中的波特率一致

 

 

检查clock-frequency 设置是否与硬件时钟匹配

 

 

通过以上步骤,可在 RK3588 平台成功将系统串口修改为串口 8,实现 U-Boot 和内核阶段的串口重定向,满足特定硬件调试与通信需求。重要说明,uboot阶段的并没有完全修改为串口8,如需完全显示log,还需要修改其他,比如ddr.bin文件等。

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分