1. Rockchip平台概述:RK3568/RK3588芯片特性、硬件接口资源、调试工具链介绍
做嵌入式Linux驱动开发,选对平台就等于成功了一半。Rockchip这几年在市场上势头很猛,尤其是RK3568和RK3588这两颗芯片,几乎成了中高端ARM Linux开发板的标配。我个人从RK3288时代就开始接触Rockchip,一路跟到现在的RK3588,踩过的坑不少,积累的经验也很多。今天咱们就先把这两颗芯片的家底摸清楚。
1.1 RK3568与RK3588核心特性对比
先看一张对比表,这样最直观。RK3568主打中端、低功耗、高性价比;RK3588则是旗舰级,性能翻倍,接口也更丰富。
| 特性 | 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 | 1 TOPS (RKNN) | 6 TOPS (RKNN) |
| 内存 | LPDDR4/LPDDR4x, 最大8GB | LPDDR4x/LPDDR5, 最大32GB |
| 视频编解码 | 4K@60fps H.265/H.264 解码, 1080p@60fps 编码 | 8K@60fps H.265/VP9 解码, 8K@30fps H.265 编码 |
| 显示接口 | HDMI 2.0, eDP 1.3, MIPI DSI, LVDS | HDMI 2.1, eDP 1.4, MIPI DSI, DP 1.4, VOP多屏异显 |
| PCIe | 1×PCIe 3.0 x2 或 2×PCIe 3.0 x1 | 1×PCIe 3.0 x4, 1×PCIe 3.0 x2, 2×PCIe 3.0 x1 |
| USB | 1×USB 3.0 OTG, 1×USB 3.0 HOST, 若干USB 2.0 | 2×USB 3.1 Gen1 OTG, 2×USB 3.1 Gen1 HOST, 若干USB 2.0 |
| 以太网 | 2×GMAC (RGMII/RMII) | 2×GMAC + 1×PCIe网卡扩展 |
| 封装 | BGA 636, 0.8mm pitch | BGA 1088, 0.65mm pitch |
选型建议:如果你的产品需要8K显示、多路摄像头接入、或者跑复杂的AI模型,直接上RK3588。如果只是做工业控制面板、边缘网关、或者NAS,RK3568完全够用,而且散热压力小很多。
1.2 硬件接口资源全景
这两颗芯片的外设接口非常丰富。我习惯把它们分成三类:高速接口、多媒体接口、低速控制接口。调试的时候,先搞清楚接口属于哪一类,就能快速定位问题方向。
1.2.1 高速接口
- PCIe:RK3588支持PCIe 3.0 x4,可以接NVMe SSD、WiFi6模块、或者FPGA。RK3568的PCIe是x2,带宽减半。我曾经在RK3568上接了一个x4的NVMe盘,结果只能跑x2模式,性能损失不小——所以选型时一定要看仔细。
- USB 3.0/3.1:RK3588的USB 3.1 Gen1理论速率5Gbps,实测能跑到4.2Gbps左右。注意,RK3588的两个OTG口都可以做Host或Device,但同一时间只能有一个工作在Device模式。
- SATA:两颗芯片都内置SATA 3.0控制器,但RK3588多了一个SATA口。调试SATA时,我建议先检查参考时钟,很多SATA不识别盘都是因为时钟抖动超标。
- GMAC:两个千兆MAC,支持RGMII和RMII。RK3588的GMAC0和GMAC1可以独立工作,也可以做双网口桥接。我遇到过GMAC1的PHY地址冲突问题,后来发现是原理图上PHY_ADDR引脚拉错了电平。
1.2.2 多媒体接口
- MIPI CSI/DSI:RK3588有4路MIPI CSI,可以同时接4个摄像头。RK3568只有2路。调试MIPI时,最头疼的是时钟同步和LP/HS模式切换。我的经验是:先用示波器看D-PHY的时钟和数据线,确认没有信号反射。
- HDMI:RK3588支持HDMI 2.1,最高8K@60fps。RK3568是HDMI 2.0,最高4K@60fps。调试HDMI时,EDID读取失败是最常见的问题,多半是I2C总线上的上拉电阻没配好。
- eDP/LVDS:主要用于内部显示屏。RK3588的eDP 1.4支持HBR3,速率高达8.1Gbps。LVDS在RK3568上还保留着,但RK3588已经取消了——如果你要做LVDS屏,只能选RK3568。
1.2.3 低速控制接口
- I2C:数量很多,RK3588有9个I2C控制器。调试I2C时,我习惯用逻辑分析仪抓波形,看Start/Stop条件是否完整,地址应答位有没有拉低。
- SPI:RK3588有5个SPI控制器,支持DMA。SPI调试的坑主要在时钟极性和相位上,主从设备必须匹配。
- UART:调试串口是标配。RK3588有10个UART,但注意其中几个和I2C/SPI引脚复用,需要看Datasheet确认。
- GPIO/PWM:通用IO和PWM输出,用于控制LED、蜂鸣器、背光等。PWM频率精度取决于时钟源,RK3588的PWM时钟可以做到1Hz~100MHz。
个人习惯:拿到一块新板子,我第一件事就是看原理图里的接口复用表。Rockchip的引脚复用非常灵活,同一个引脚可能有七八种功能。如果驱动加载失败,八成是pinctrl配置和实际硬件对不上。
1.3 调试工具链介绍
工欲善其事,必先利其器。Rockchip平台的调试工具链,我把它分成三个层次:芯片级、系统级、应用级。下面这张SVG图可以帮你快速建立整体认知。
1.3.1 芯片级工具
- MaskROM/BootROM:芯片上电后最先执行的固件。如果板子变砖了,按住MaskROM键再上电,就能进入下载模式。我遇到过好几次uboot刷坏了,全靠这个模式救回来。
- Rockusb协议:Rockchip自定义的USB下载协议。Windows上用
upgrade_tool,Linux上用rkdeveloptool。这两个工具可以烧写整个固件,也可以单独烧写分区。 - 串口调试线:UART2是默认的调试串口,波特率一般是1500000(1.5Mbps)。注意,Rockchip的串口电平是1.8V,不能直接接3.3V的USB转串口模块,否则会烧芯片。
避坑指南:我曾经用了一根没有电平转换的串口线去连RK3568,结果UART2的TX引脚直接冒烟了。从那以后,我每次调试前都会用万用表量一下串口引脚的电压。记住:Rockchip的调试串口是1.8V,不是3.3V!
1.3.2 系统级工具
- dmesg:内核日志,驱动加载和硬件初始化信息都在这里。我习惯在驱动里加
dev_dbg()打印,然后通过dmesg -n 8打开所有日志级别。 - devmem2:直接读写物理内存地址。调试寄存器配置时特别好用。比如你想看某个GPIO的寄存器值,直接
devmem2 0xFE2B0000就能读出来。 - i2c-tools:包括
i2cdetect、i2cget、i2cset。调试I2C设备时,先用i2cdetect -y 总线号扫描设备地址,确认设备是否在线。 - gpio-utils:Rockchip SDK里自带的GPIO调试工具,可以导出、设置、读取GPIO状态。比手动操作
/sys/class/gpio方便很多。
1.3.3 应用级工具
- RKNN Toolkit:用于在NPU上部署AI模型。支持TensorFlow、PyTorch、ONNX等框架的模型转换。调试时重点关注量化精度损失,我遇到过模型转完精度从98%掉到85%的情况,后来发现是量化校准集没选对。
- GStreamer/FFmpeg:多媒体调试的标配。Rockchip的MPP(Media Process Platform)提供了硬件编解码加速。调试视频管线时,我常用
gst-launch-1.0命令,配合GST_DEBUG=3环境变量看内部日志。
1.4 开发环境搭建要点
最后简单说一下开发环境。Rockchip官方推荐用Ubuntu 18.04/20.04 64位系统。SDK基于Yocto或Buildroot,但大多数工程师直接用rk-rootfs-build脚本编译根文件系统。
# 安装必要依赖
sudo apt-get install repo git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev \
libgl1-mesa-dev libxml2-utils xsltproc unzip device-tree-compiler
# 下载RK3588 SDK(以Linux 5.10内核为例)
repo init -u https://github.com/rockchip-linux/manifests -b linux-5.10-gen-rkr4.1
repo sync -j8
# 编译uboot
cd u-boot
make rk3588_defconfig
make -j8
# 编译内核
cd ../kernel
make ARCH=arm64 rockchip_linux_defconfig
make ARCH=arm64 rk3588-evb1-lp4-v10.img -j8
我的建议:第一次编译SDK时,最好用make -j$(nproc)全速编译。如果遇到报错,先检查依赖包是否装全。Rockchip的SDK对Python版本有要求,Python 3.8以上比较稳。另外,repo sync可能会因为网络问题失败,建议用代理或者换国内镜像源。