保姆级教程:手把手教你修改RK3568开发板的串口波特率(从Uboot到DDR Bin)
RK3568开发板串口波特率修改全流程实战指南
作为一名嵌入式开发者,第一次拿到RK3568开发板时,最让人头疼的问题之一就是默认的高波特率串口配置。大多数调试工具和终端软件对1.5Mbps这样的高速波特率支持并不友好,导致开发者常常陷入"开发板有输出但终端一片空白"的困境。本文将彻底解决这个问题,带你从底层到上层完整修改串口配置。
1. 理解RK3568的启动流程与串口配置层级
RK3568的启动过程比传统ARM芯片更为复杂,串口波特率的配置分布在多个阶段:
BOOTROM → DDR Bin → Miniloader → Trust → U-Boot → Kernel每个阶段都有自己的串口初始化过程,这也是为什么单纯修改U-Boot或内核配置往往无法彻底解决问题。特别是DDR Bin这个闭源阶段,大多数公开文档都鲜少提及,却是导致配置不生效的常见原因。
2. 准备工作与环境搭建
在开始修改前,需要确保开发环境准备就绪:
硬件准备:
- RK3568开发板(以Firefly-RK3568为例)
- USB转串口调试模块(推荐CP2102或CH340芯片)
- 配套的连接线材
软件工具:
- 串口终端软件(Putty、Minicom或MobaXterm)
- RK开发工具链(gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu)
- 源码仓库:
git clone https://github.com/rockchip-linux/u-boot.git git clone https://github.com/rockchip-linux/kernel.git git clone https://github.com/rockchip-linux/rkbin.git
目录结构建议:
~/rk3568/ ├── u-boot ├── kernel └── rkbin
提示:建议使用Ubuntu 18.04/20.04 LTS作为开发环境,避免工具链兼容性问题
3. U-Boot层波特率修改
U-Boot阶段的修改最为直接,主要涉及配置文件的调整:
打开U-Boot配置文件:
cd ~/rk3568/u-boot vim configs/firefly-rk3568_defconfig查找并修改波特率参数:
- CONFIG_BAUDRATE=1500000 + CONFIG_BAUDRATE=115200验证修改是否生效:
make firefly-rk3568_defconfig grep "CONFIG_BAUDRATE" .config重新编译U-Boot:
./make.sh firefly-rk3568
常见问题排查:
- 症状:修改后U-Boot启动时仍显示原波特率
- 可能原因:DDR Bin阶段的波特率未同步修改,导致早期初始化不一致
- 解决方案:继续完成后续DDR Bin的修改步骤
4. 内核设备树修改
内核阶段的波特率配置位于设备树文件中,需要特别注意RK3568的特殊配置方式:
定位设备树文件:
cd ~/rk3568/kernel vim arch/arm64/boot/dts/rockchip/rk3568-linux.dtsi修改串口节点配置:
- rockchip,baudrate = <1500000>; + rockchip,baudrate = <115200>;编译内核并更新:
make ARCH=arm64 rockchip_defconfig make ARCH=arm64 -j$(nproc)
关键细节说明:
- RK3568的串口驱动对波特率有限制,通常只支持115200和1500000两种
- 修改后需确保所有使用该串口的终端配置同步更新
5. DDR Bin闭源固件修改
这是最容易被忽视却最关键的一步,涉及Rockchip的闭源初始化代码:
5.1 修改DDR参数配置文件
定位参数文件:
cd ~/rk3568/rkbin vim tools/ddrbin_param.txt更新波特率参数:
- uart baudrate= + uart baudrate=115200
5.2 使用专用工具更新DDR Bin
确认目标DDR Bin文件:
ls bin/rk35/rk3568_ddr_*.bin运行转换工具:
cd tools ./ddrbin_tool ddrbin_param.txt ../bin/rk35/rk3568_ddr_1560MHz_v1.10.bin验证生成的新文件:
ls -lh ../bin/rk35/rk3568_ddr_1560MHz_v1.10.bin
5.3 更新Loader配置文件
修改INI加载配置:
vim RKBOOT/RK3568MINIALL.ini确保指向正确的DDR Bin:
[LOADER_OPTION] NUM=2 LOADER1=FlashData LOADER2=FlashBoot FlashData=bin/rk35/rk3568_ddr_1560MHz_v1.10.bin FlashBoot=bin/rk35/rk356x_spl_v1.11.bin
6. 完整固件编译与烧写
完成所有修改后,需要重新生成完整固件:
编译U-Boot加载器:
cd ~/rk3568/u-boot ./make.sh firefly-rk3568生成统一固件包:
./make.sh firefly-rk3568 --pack使用RKDevTool烧写:
- 进入Loader模式(按住Recovery键上电)
- 选择生成的
rk356x_spl_loader_v*.bin文件 - 执行擦除Flash后烧写
7. 验证与调试技巧
成功烧写后,使用以下方法验证各阶段波特率:
DDR阶段验证:
- 观察最早期的启动信息是否可读
- 正确现象:上电后立即出现可读的初始化日志
U-Boot阶段验证:
- 在启动倒计时时按任意键进入U-Boot命令行
- 执行:
baudrate
内核阶段验证:
- 观察内核启动日志的显示质量
- 检查
/proc/cmdline中的早期console参数
高级调试技巧:
- 当遇到乱码时,尝试调整终端软件的流控设置
- 使用逻辑分析仪抓取实际波形验证波特率精度
- 在
rkbin/tools/ddrbin_tool_user_guide.txt中查找高级参数说明
8. 常见问题解决方案
问题1:修改后串口完全无输出
- 检查串口线连接是否正确(TX/RX交叉)
- 确认开发板供电稳定
- 验证DDR Bin文件是否成功更新
问题2:部分阶段日志显示乱码
- 确认所有阶段的波特率配置一致
- 检查终端软件配置(数据位8、停止位1、无校验)
- 尝试降低波特率测试硬件兼容性
问题3:烧写后配置恢复默认
- 确保烧写前执行了Flash擦除
- 检查
make.sh打包过程是否成功 - 验证板载Flash存储是否正常工作
在实际项目中,我遇到过最棘手的情况是不同版本的工具链生成的DDR Bin不兼容。这时需要严格匹配rkbin仓库的版本号和官方发布说明,有时甚至需要联系Rockchip原厂获取特定版本的编译工具
