第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,层层递进。

瑞芯微平台开发知识体系 瑞芯微平台开发知识体系 芯片特性对比 数据手册三件套 芯片数据手册 技术参考手册 硬件设计指南 原厂SDK目录结构 kernel/ 内核源码 u-boot/ 引导程序 device/ 板级配置 rkbin/ 二进制固件 驱动开发核心战场:kernel/ + device/ + 技术参考手册

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目录是后续所有开发的基础,花点时间吃透它们,后面写驱动、移植系统时会顺畅很多。