第2章 瑞芯微平台概述:RK3568/RK3588芯片特性、数据手册导读、原厂SDK目录结构解析
做嵌入式Linux开发,选对平台就等于成功了一半。瑞芯微这几年在AIoT、边缘计算、商显、NAS领域铺得很开,RK3568和RK3588是其中的主力。我个人习惯拿到一块新芯片,先不看代码,而是把数据手册和SDK目录结构摸一遍。这章我们就来干这件事。
2.1 RK3568与RK3588芯片特性对比
这两颗芯片定位不同。RK3568主打中低功耗、高性价比;RK3588则是旗舰级,性能翻倍,接口也更丰富。我去年做一个边缘AI盒子项目,客户要求4路4K解码同时跑轻量级模型,RK3588刚好卡住需求,换成RK3568就吃力了。
| 特性 | RK3568 | RK3588 |
|---|---|---|
| CPU | 4×Cortex-A55 @ 2.0GHz | 4×Cortex-A76 @ 2.4GHz + 4×Cortex-A55 @ 1.8GHz |
| GPU | Mali-G52 EE | Mali-G610 MP4 |
| NPU | 1TOPs (RKNN) | 6TOPs (RKNN) |
| 内存 | LPDDR4/LPDDR4x/DDR3/DDR3L/DDR4 | LPDDR4/LPDDR4x/LPDDR5 |
| 视频解码 | 4K@60fps H.264/H.265 | 8K@30fps H.264/H.265/VP9/AV1 |
| 视频编码 | 1080p@60fps H.264/H.265 | 8K@30fps H.264/H.265 |
| 显示接口 | HDMI2.0/eDP/DP/MIPI-DSI | HDMI2.1/eDP/DP/MIPI-DSI |
| PCIe | PCIe 3.0 ×2 | PCIe 3.0 ×4 + PCIe 2.0 ×1 |
| USB | USB3.0 ×1 + USB2.0 ×4 | USB3.1 ×2 + USB2.0 ×2 |
| 以太网 | 千兆GMAC ×1 | 千兆GMAC ×2 |
| 典型功耗 | 3-6W | 8-15W |
选型建议:如果产品对成本敏感、功耗要求严格、不需要8K视频,RK3568完全够用。如果要做多路摄像头、高分辨率显示、边缘AI推理,RK3588更合适。
2.2 数据手册导读
瑞芯微的数据手册分三份:芯片数据手册、技术参考手册、硬件设计指南。我刚开始接触时也犯过糊涂,以为只看芯片数据手册就够了。后来发现,真正对驱动开发有用的信息,大部分藏在技术参考手册里。
2.2.1 芯片数据手册
这份文档主要给硬件工程师看。里面包含引脚定义、电气特性、封装信息、电源时序。驱动开发时我们最常翻的是引脚复用表和电源域划分。举个例子,RK3588的GPIO0有32个引脚,但其中一部分被系统保留,另一部分与其它功能复用。如果不查表,很容易配错。
2.2.2 技术参考手册
这才是驱动开发的核心文档。它详细描述了每个外设模块的寄存器布局、操作流程、中断和DMA配置。我记得第一次写RK3568的I2C驱动时,就是对照技术参考手册里的I2C控制器章节,一步步配寄存器。
技术参考手册通常包含以下章节:
- 系统架构:总线拓扑、内存映射、时钟树
- CRU:时钟与复位单元,驱动调频必备
- GRF:通用寄存器文件,引脚复用和IO配置
- PMU:电源管理单元,休眠唤醒相关
- 各外设控制器:UART/I2C/SPI/MMC/以太网/USB/PCIe等
注意:技术参考手册动辄几千页,不要从头读到尾。我的做法是:先看系统架构和内存映射,然后用到哪个外设就翻哪个章节。遇到寄存器描述不清的地方,去SDK里的驱动源码找注释,两者对照着看。
2.2.3 硬件设计指南
这份文档主要给硬件工程师做PCB布局用。但驱动开发时,DDR配置和电源树部分值得一看。DDR参数配错了,系统根本起不来。电源树能帮你理解为什么某些外设在休眠后无法唤醒。
2.3 原厂SDK目录结构解析
瑞芯微的SDK基于Yocto/Buildroot,但为了方便,他们提供了一个统一SDK包,里面包含了Linux内核、U-Boot、Buildroot、RKNN工具链等。我建议你拿到SDK后,先花半小时把目录结构走一遍,心里有个谱。
下面以RK3588 SDK为例,展示核心目录:
rk3588_linux_sdk/
├── buildroot/ # Buildroot构建系统
├── device/ # 设备树、分区表、板级配置
│ └── rockchip/
│ ├── rk3588/ # RK3588芯片级配置
│ └── evb/ # 评估板配置
├── docs/ # 文档
├── kernel/ # Linux内核源码
│ └── arch/arm64/boot/dts/rockchip/
│ ├── rk3588.dtsi # 芯片级设备树
│ ├── rk3588-evb1.dts # 评估板设备树
│ └── rk3588s.dtsi # 简化版芯片设备树
├── prebuilts/ # 预编译工具链
├── rkbin/ # 二进制固件(ATF、DDR初始化、OP-TEE)
├── tools/ # 烧录工具、打包脚本
├── u-boot/ # U-Boot引导加载程序
├── yocto/ # Yocto构建系统(可选)
└── Makefile # 顶层构建脚本
关键目录说明:
- kernel/:驱动开发的主战场。设备树文件在
arch/arm64/boot/dts/rockchip/下,驱动源码在drivers/下按子系统分类。 - u-boot/:引导加载程序。如果要做fastboot、分区表修改、DDR初始化参数调整,来这里。
- device/rockchip/:板级配置。包括分区大小、文件系统类型、固件打包规则。我踩过坑:修改了分区表但没更新这里的配置,结果烧录后系统无法挂载rootfs。
- rkbin/:闭源二进制固件。ATF(ARM Trusted Firmware)、DDR初始化代码、OP-TEE都在这里。这些是瑞芯微提供的,我们一般不动。
2.4 核心知识体系图
下面这张图展示了RK3588/RK3568平台开发的核心知识结构,从芯片特性到数据手册再到SDK,层层递进。
2.5 避坑指南
最后分享几个我实际项目中踩过的坑,希望能帮你少走弯路。
坑1:设备树与驱动版本不匹配
我曾经从SDK里直接拿了一份rk3588-evb1.dts,没注意内核版本,结果编译出来的内核死活起不来。后来发现,设备树里的某些节点属性在新内核里已经废弃了。解决办法:设备树一定要和内核源码对应,不要混用。
坑2:DDR参数配置错误
RK3588支持多种DDR类型,但参数配置在rkbin里。如果你换了DDR颗粒,必须同步更新rkbin里的DDR初始化代码。我有个同事没改这个,板子一直卡在DDR training阶段,折腾了两天才发现。
坑3:引脚复用冲突
RK3568的引脚复用非常灵活,但也容易冲突。比如GPIO3_C5同时被UART2和SPI1使用。如果不查GRF寄存器配置,两个驱动同时加载时,一个会抢占另一个的引脚。我的习惯是:在设备树里显式配置pinctrl,避免默认值带来的隐患。
嗯,这章的内容就到这里。数据手册和SDK目录是后续所有开发的基础,花点时间吃透它们,后面写驱动、移植系统时会顺畅很多。