RK3588S平板开发笔记:手把手教你配置SPI NOR与PCIE NVMe双存储启动(Android 12)
2026/5/8 10:16:03 网站建设 项目流程

RK3588S平板双存储启动实战:SPI NOR与PCIE NVMe的Android 12配置全解析

当一块搭载RK3588S芯片的平板开发板放在你面前,如何让它同时驾驭32MB的SPI NOR闪存和256GB的PCIE NVMe固态硬盘?这不仅是存储介质的组合艺术,更是一场从硬件引脚到uboot配置的深度探险。本文将带你走进真实的开发场景,用工程师的视角拆解双存储启动的每个技术环节。

1. 硬件准备与原理图解析

拿到开发板的第一件事不是急着上电,而是翻开原理图确认关键信号路径。在RK3588S平台上,SPI NOR通常连接在SPI0总线,而PCIE SSD则可能占用PCIE2x1L1通道。需要特别关注几个硬件细节:

  • 电源使能引脚:PCIE设备往往需要3.3V电源控制,例如原理图中GPIO4_B1可能被设计为电源使能脚
  • 复位信号:PCIE设备的复位可能由GPIO4_A2控制
  • SPI片选:NOR Flash的片选信号(CS)通常连接SPI0_CS0

硬件确认清单:

信号类型引脚位置原理图标注电压要求
PCIE电源使能GPIO4_B1VCC3V3_PCIE20_EN3.3V
PCIE复位GPIO4_A2PCIE_RST_L1.8V
SPI CLKGPIO1_B3SPI0_CLK3.3V

提示:使用万用表测量关键引脚电压是避免硬件损坏的好习惯,特别是PCIE电源轨在上电前应确保为0V

2. Uboot深度定制:双存储引导的核心改造

RK3588S的启动流程中,uboot扮演着交通警察的角色。我们需要让它学会同时管理NOR和PCIE两种存储设备。

2.1 修改spl引导顺序

首先调整uboot的spl-boot-order,确保优先从SPI NOR启动:

// arch/arm/dts/rk3588-u-boot.dtsi chosen { stdout-path = &uart2; u-boot,spl-boot-order = &spi_nor, &sdhci; // 移除了不必要的存储设备 };

2.2 添加PCIE电源域配置

接着为PCIE设备添加电源管理节点:

vcc3v3_pcie20: vcc3v3-pcie20 { u-boot,dm-pre-reloc; compatible = "regulator-fixed"; regulator-name = "vcc3v3_pcie20"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; enable-active-high; gpio = <&gpio4 RK_PB1 GPIO_ACTIVE_HIGH>; startup-delay-us = <5000>; vin-supply = <&vcc12v_dcin>; };

2.3 内核DTB嵌入技巧

由于PCIE初始化需要内核设备树信息,必须将kernel的dtb编译进uboot:

# 从kernel目录复制预编译的dtb cp ../kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588s-tablet-ssd.dtb u-boot/dts/kern.dtb

然后在config中启用关键选项:

# configs/rk3588_defconfig CONFIG_PCIE_DW_ROCKCHIP=y CONFIG_EMBED_KERNEL_DTB_ALWAYS=y CONFIG_ROCKCHIP_BOOTDEV="nvme 0"

3. 分区表双胞胎:parameter.txt的变体艺术

双存储方案需要两套独立的分区表,就像给两个仓库准备不同的货物清单。

3.1 SPI NOR专用分区表

创建parameter_nor.txt文件,重点配置uboot分区:

FIRMWARE_VER: 1.0 MACHINE_MODEL: RK3588 MACHINE_ID: 007 CMDLINE: mtdparts=rk29xxnand:0x00002800@0x00004000(uboot)

3.2 PCIE SSD精简分区表

修改Android编译系统中的分区定义:

# device/rockchip/common/RebuildParameter.mk partition_list := security:4M,misc:4M # 移除了uboot分区

4. 固件打包的魔术:mkupdate.sh改造术

最后的打包环节需要像厨师分装菜品一样处理两种固件。修改mkupdate.sh脚本实现智能打包:

# 生成PCIE版本固件 ./rkImageMaker ${vendor_id_map[$PLATFORM]} $IMAGE_PATH/MiniLoaderAll.bin \ $IMAGE_PATH/update.img pcie_update.img -os_type:androidos -storage:pcie # 生成SPI NOR版本固件 cp $IMAGE_PATH/parameter_nor.txt $IMAGE_PATH/parameter.txt ./rkImageMaker ${vendor_id_map[$PLATFORM]} $IMAGE_PATH/MiniLoaderAll.bin \ $IMAGE_PATH/update.img spinor_update.img -os_type:androidos -storage:spinor # 合并双固件 ./rkImageMaker -merge ./final_update.img ./spinor_update.img ./pcie_update.img

5. 烧写实战:Maskrom模式下的双管齐下

烧写阶段要注意存储介质的选择策略:

  1. Maskrom模式烧写SPI NOR

    • 选择存储类型为"SPI NOR"
    • 必须烧写:MiniLoaderAll.bin、uboot.img、parameter_nor.txt
  2. Loader模式烧写PCIE SSD

    • 切换存储类型为"PCIE"
    • 烧写boot.img、vendor_boot.img、super.img等系统镜像

注意:使用瑞芯微开发工具V2.93+时,按住音量减键上电可强制进入Maskrom模式

当看到串口终端先后打印出SPI NOR初始化成功和NVMe设备识别日志时,这场存储协奏曲才算完美开幕。这种方案不仅解决了小容量NOR存储引导程序的困境,更为系统提供了高速大容量存储空间,是嵌入式设备存储架构的优雅实践。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询