☰
瑞芯微开发板烧录模式全解析:LOADER与MASKROM区别及救砖指南
2026/9/27 23:26:55 网站建设 项目流程

用瑞芯微开发板这几年,打交道最多的就是烧录。RK3568、RK3588、RV1126这些板子,不管是刷系统、做量产、还是把变砖的板子救回来,第一步永远是让开发板进对模式。瑞芯微的下载模式分两种:LOADER模式和MASKROM模式,很多人看到RKDevTool界面上一行“发现一个LOADER设备”、一行“发现一个MASKROM设备”,就不知道该怎么选。这篇文章我根据自己的实际使用经验,把这两种模式的区别、进入方法、适用场景和完整烧录流程一次讲透。如果你刚入手开发板,或者被救砖折腾过,这篇应该能帮你少走几条弯路。

先给个结论:日常升级固件、刷系统镜像,优先用LOADER模式;系统完全起不来、存储介质里连loader都被清掉的时候,只能用MASKROM模式。但为什么是这个结论,背后的原理值得花几分钟看完。

1. 烧录的本质:先搞懂Rockchip启动链路

1.1 BootROM是什么:芯片出厂自带的“最小引导程序”

芯片上电之后,内部ROM里固化的一段代码会最先执行,这段代码就是BootROM。它出厂时就烧死在芯片硅片里,任何人都没法改。BootROM的任务很简单:初始化最基础的时钟和USB/UART控制器,然后判断从哪个介质启动——eMMC、SPI Flash、SD卡还是USB。如果判定从存储介质启动,它就把介质头部第一个扇区里的loader读出来,跳到内存里交给loader执行。

如果存储介质里没有有效loader,或者外部引脚被设置成强制下载模式,BootROM就停留在自己的状态,通过USB和电脑通信,等待烧录工具向它发送数据。这个“停留在BootROM里等待下载”的状态,就是MASKROM模式。

很多人第一次听到MASKROM这个名字会觉得玄乎,其实它指的就是芯片内部那块掩膜ROM(Mask ROM),BootROM就是这种ROM。所以MASKROM模式可以理解为“芯片最底层的下载模式”,是BootROM本人在跟你对话。相比之下,LOADER模式是BootROM把loader加载到内存之后的事。

1.2 MASKROM和LOADER在启动链路上的位置

我们常说的rk356x_spl_loader、rk3588_spl_loader这类文件,就是Rockchip的loader,它通常是官方SDK编译出来的一个二进制,由两部分组成:DDR初始化代码(俗称DDR bin)和loader主程序。BootROM把loader加载到内存后,loader会接着初始化DDR、存储控制器、USB控制器,然后跑起一套基于Rockusb协议的通信程序,这时候芯片和电脑之间就能对话了,这个状态就是LOADER模式。

启动链路可以简化成一句话:BootROM → loader(进入LOADER模式)→ U-Boot → Kernel。MASKROM模式发生在第一步之前,LOADER模式发生在第一步之后。两个模式能做的事、能烧录的范围、对DDR的状态要求,完全是两套逻辑,这也是新手容易混淆的地方。

我见过不少人在板子已经进入LOADER模式的情况下,点工具里的“下载Loader”按钮,结果工具提示失败。其实LOADER模式下loader已经在内存里跑着,不用也没法重复下载。反过来,在MASKROM模式下直接点“升级固件”,工具会先自动走一遍下载loader的流程,这两个模式的操作流程差别很大。

2. MASKROM模式:救砖和底层烧录的终极手段

2.1 什么是MASKROM模式:BootROM直接和PC对话

MASKROM模式是芯片最底层的下载状态。此时DDR还没初始化,eMMC、SPI Flash里的任何代码都还没被执行。芯片通过USB枚举成一个“Maskrom设备”,等待上位机发送loader镜像到芯片内部的小块SRAM里,再由这个loader完成DDR初始化和后续烧录。

正因为DDR还没起来,MASKROM模式下第一件事永远是下载loader到内存。Windows下的RKDevTool选中loader文件,Linux下用rkdeveloptool的db命令,干的事都是这个。

这个模式最常见的三个应用场景是:

  1. 变砖恢复:eMMC或SPI Flash里的loader被刷坏、被清空,BootROM找不到可执行的loader,自动进入MASKROM模式,这是救砖的唯一入口。
  2. 彻底擦除存储:量产或者回收板子时,需要把整片eMMC擦干净,也要在MASKROM模式下做。
  3. 烧写底层固件:比如要换掉整个SPI Flash里的原厂UBoot,或者重新写全部分区表,MASKROM模式最彻底。

2.2 进入MASKROM的三种常用姿势

不同开发板进入MASKROM的方式不太一样,但原理是共通的。我拿自己用的几块RK3568、RK3588开发板举例:

第一种,板上带MASKROM按键。这种最省事,按住MASKROM键不松,再给板上电,几秒后松开,设备就处于MASKROM模式了。部分开发板把这个按键和Recovery键做在一起,长按是MASKROM,短按是LOADER,具体看板卡说明书。

第二种,短接测试点。很多核心板或工控板没做按键,需要自己找测试点。SDK文档里通常会标注SPI Flash的CS引脚或eMMC的CLK引脚,把对应引脚和GND短接一下再上电,就能强制进入MASKROM。操作前一定要看原理图,确认哪个点是安全的,短接错了轻则没反应,重则短路烧硬件。

第三种,自动进入。如果存储介质里连loader都没有了,BootROM找不到有效启动代码,芯片会自动留在MASKROM模式。很多人遇到的就是这种情况——板子之前烧录失败导致loader损坏,插上USB直接被识别为MASKROM设备。

提示:进入MASKROM模式后,在Windows设备管理器里一般会看到“Rockusb Device”或“Maskrom Device”这类设备,PID会跟LOADER模式不一样,RKDevTool状态栏会明确显示“发现一个MASKROM设备”。

2.3 MASKROM模式下能做什么,不能做什么

MASKROM模式能做的事覆盖面很广:下载loader到内存、烧写全部分区镜像、擦除Flash、重写分区表、写设备信息等等。但它有一个边界——BootROM本身不可写。BootROM是出厂掩膜ROM,任何烧录工具都改不了它,这也是它作为“最后防线”的根本原因。

另一个容易被忽略的点是:MASKROM模式下烧写时,工具先下载loader再执行后续操作。如果这一步的loader版本和芯片不匹配,后面所有操作都会失败。比如RK3588的loader拿去给RK3568用,下载loader阶段直接报错。所以救砖前一定先确认固件包里的loader对应芯片型号。

我建议不到万不得已别在MASKROM模式下乱擦Flash。擦除是全面操作,擦完整个存储介质就是一张白纸,如果手头没有完整的全套固件,板子就等于彻底废了。一般流程是先进MASKROM,正常加载loader,再烧完整update.img,一条龙走完。

3. LOADER模式:日常开发刷机的主力模式

3.1 LOADER模式的运行状态

LOADER模式是开发板正常工作状态下的烧录模式。BootROM把loader加载进内存并跳转过去,loader初始化DDR、存储控制器、USB控制器之后,不用依赖任何外部按键,就能通过USB和烧录工具通信。

这时候DDR已经跑起来了,数据传输速度和稳定性比MASKROM模式高不少。你可以把LOADER模式想象成一个“已经穿好装备的士兵”,随时等着接收命令;而MASKROM模式是“刚出生的士兵”,还得先领装备。

LOADER模式下,loader负责把电脑端发来的数据写入eMMC、SPI Flash或SD卡对应分区。它甚至支持热切换——有些板卡在系统里运行adb reboot loader,就能直接重启进入LOADER模式,不用去按物理按键,这对开发调试太友好了。

3.2 进入LOADER模式的几种方式

LOADER模式的进入姿势比MASKROM多,我按优先级列一下常用的:

  1. Recovery键上电:按住板上的Recovery按键不松,再上电,保持两三秒后松开,板子进入LOADER模式。这是最通用、最保险的方法。
  2. adb命令重启:板子系统正常运行时,执行adb reboot loader,设备重启后会进入loader烧录状态。
  3. 系统内恢复模式:Android系统设置里的恢复出厂(备份和重置)往往也会触发类似流程,有的固件会切入LOADER模式等待烧录。
  4. U-Boot命令控制:进入U-Boot命令行后,执行rockusb 0 1 mmc 0这类命令,也可以把设备切到Rockusb下载模式,这个方法适合熟悉U-Boot的朋友。

如果你发现按住Recovery键上电后,电脑一点反应都没有,先别急着怪板子。很多开发板必须先接好USB线再上电,或者反过来先上电再插USB,这个时序不同板子不一样,我在下面问题排查部分细说。

3.3 LOADER模式下适合的操作

LOADER模式覆盖了开发中90%以上的烧录需求:

  • 一键升级完整固件:直接用update.img升级整个系统,不用关心内部怎么分区。
  • 分区级烧录:只更新boot分区、rootfs分区或recovery分区,调试内核和根文件系统时非常高效。
  • 擦除指定分区:比如清空misc分区、userdata分区,不需要整片擦除。
  • 读取设备信息:在LOADER模式可以通过工具读取芯片型号、存储介质信息等。

日常开发时,我基本都用LOADER模式。它不涉及BootROM底层,操作风险比MASKROM低很多。就算烧录失败,板子大概率还能重新进入LOADER模式再来一次,不至于直接变砖。

4. MASKROM和LOADER到底怎么选:对比与决策

4.1 一张表看懂两种模式

对比项MASKROM模式LOADER模式
运行主体BootROM(芯片出厂固件)Loader(系统加载的bootloader)
DDR状态未初始化,需要先下载loader已完成初始化
进入方式短接触点/按键/无loader自动进入Recovery键、adb reboot loader
首要操作必须先下载loader到内存可直接升级固件或分区
可烧录范围全部分区、Flash擦除、loader本身除BootROM外的全部分区
典型场景救砖、彻底擦除、底层烧写日常刷机、分区更新、调试
风险等级高,操作失误影响大中,烧录失败通常可重来
工具显示MaskROM设备LOADER设备

这张表基本能回答“什么时候该用哪种模式”的问题。简单说,系统进不去但loader还在,用LOADER;loader没了或者要擦整片存储,只能MASKROM。

4.2 实际场景中的模式选择

举几个我实际遇到的场景:

场景一:RK3588开发板原厂系统想换成Ubuntu。系统能正常启动,进入系统后执行adb reboot loader,或者按住Recovery键上电,进入LOADER模式,直接升级Ubuntu的update.img。完全没必要碰MASKROM。

场景二:烧录过程中掉电,eMMC里的loader损坏,板子上电后RKDevTool识别为MASKROM。这时候只能走MASKROM流程,先下载loader,再重烧完整固件。

场景三:开发板不想用eMMC了,想改成从SPI Flash启动。这种涉及存储介质切换和底层UBoot,我会在MASKROM模式下操作,因为要重新规划整个存储布局。

场景四:做完一版固件,想擦干净userdata分区或者恢复出厂。这种小操作LOADER模式就够了,点分区擦除,几秒钟的事。

我的选择逻辑很朴素:能用LOADER解决的绝不上MASKROM,MASKROM是用来兜底的。毕竟MASKROM操作时如果选错固件、擦错介质,恢复成本远高于LOADER模式。

4.3 与MCU平台烧录的横向类比

很多朋友从STM32、ESP32这些MCU平台转过来玩瑞芯微,一开始会被这两种模式搞晕。其实类比一下就明白了:

STM32的BOOT0引脚拉高后会从系统存储器启动,进入芯片自带的bootloader,烧录Flash,这个角色就有点像Rockchip的MASKROM模式——都是芯片出厂固件在提供烧录能力。STM32正常从主Flash启动,运行用户程序,需要烧录时通过SWD接口跟调试器通信,这个角色更像LOADER模式,只不过STM32用SWD,瑞芯微用USB Rockusb协议。

联发科MTK平台也有类似设计:BROM对应瑞芯微的MASKROM,Preloader对应LOADER。ESP32的UART下载模式,对应的是芯片ROM里的bootloader。理解了“芯片出厂固件下载模式”和“上层bootloader下载模式”这两个概念,各个平台的烧录模式就都串起来了。

5. 实操:RKDevTool与rkdeveloptool完整烧录流程

5.1 准备驱动、工具和固件

Windows下烧录瑞芯微,最常用的是官方DKDevTool(实际上叫RKDevTool)加DriverAssitant驱动。驱动安装这一步卡住的人最多:DriverAssitant装完要先打开“驱动安装”,设备进入LOADER/MASKROM模式后,系统才能识别为Rockusb设备。Win10/11如果没关闭驱动签名,会提示安装失败,这种情况需要进系统高级启动,选择“禁用驱动程序强制签名”后再装。

Linux下用rkdeveloptool,一般不用额外驱动,但访问USB设备需要root权限。Debian/Ubuntu可以直接apt install rkdeveloptool,编译安装也很简单。命令行的操作习惯和Windows图形界面不一样,但功能更灵活,脚本化批量烧录会很方便。

固件准备分两种:一是完整的update.img,一般在SDK编译后生成,里面打包了loader、分区表、UBoot、kernel、rootfs等全部内容;二是单独的分区镜像,比如boot.img、rootfs.img、paramter分区表文件。救砖时优先用完整update.img,省心。

5.2 用RKDevTool在LOADER模式下升级固件

这是最常规的升级流程,步骤不多但顺序别乱:

  1. 先把DriverAssitant驱动装好,打开RKDevTool。
  2. 开发板断电,按住Recovery键不松,给板上电。
  3. 等两三秒,插上USB线(如果之前没插),松开Recovery键。
  4. 观察RKDevTool状态栏,显示“发现一个LOADER设备”说明识别成功。
  5. 切到“升级固件”页,选择update.img文件,点“升级”。
  6. 等待进度条跑完,工具提示烧录完成,板子会自动重启。

这里有个细节:部分开发板需要先接USB线再按Recovery键上电,不然USB枚举时序对不上,电脑端永远没反应。我在RK3568的一块核心板上就遇到过,必须“先插USB、再按住Recovery、再上电”这个顺序,换成其他板子又变成“先上电再插USB”。所以遇到识别不到的情况,先试试调换插线时序。

升级过程中不要碰USB线,不要手动断电。RKDevTool烧完ROM区域后,有时板子会自动进入正常系统,而工具这边还会显示“等待设备重新枚举”,这是正常的,等几秒就行。如果烧完后板子反复重启,往往是rootfs和数据分区还没完全写好,再等一两分钟。

5.3 用rkdeveloptool在MASKROM模式下救砖

Linux下用rkdeveloptool走MASKROM救砖,我把它拆成几个明确步骤:

先把板子短接或按MASKROM键进入MASKROM模式,插上USB线。在终端执行:

sudo rkdeveloptool ld

如果能看到类似DevNo=1 Vid=0x2207@Pid=0x320a的输出,说明设备已被识别。注意,VID 0x2207是瑞芯微的统一厂商ID,PID会根据芯片型号和模式变化。

接着下载loader到内存,这里要用和芯片匹配的loader文件:

sudo rkdeveloptool db rk3588_spl_loader_v1.09.112.bin

这一步成功后再升级完整固件:

sudo rkdeveloptool ul rk3588_update.img

如果不想烧完整固件,只想单独写分区,需要先写分区表再写镜像。比如RK3588的parameter.txt里规定boot分区从第0x8000扇区开始,那就这样操作:

sudo rkdeveloptool gpt parameter.txt sudo rkdeveloptool wl 0x8000 boot.img

wl后面的数字是分区的起始LBA扇区号,具体以parameter.txt为准,不同芯片、不同固件的偏移量不一样。这里多说一句,千万不要不看分区表就乱写,写错位置轻则启动失败,重则覆盖其他分区。

整条救砖流程下来,最关键的就是db这一步。如果db都失败,说明loader跟芯片不匹配,或者MASKROM进入姿势有问题,别急着继续下一步。

5.4 分区烧录、设备树与Ubuntu的补充

分区烧录在开发中很常用,尤其是只想调试内核或文件系统时。瑞芯微的分区表是parameter.txt,里面用类似0x00004000@0x00008000(boot)这样的格式描述每个分区的偏移和大小。读懂这个文件就能精准定位每个分区的起始扇区,再用rkdeveloptool wl或RKDevTool的分区烧录页操作。

很多人问瑞芯微rk3568设备树怎么处理。这里我说下现状:较新的平台,BootROM和loader启动后,U-Boot会读取boot.img里的内核和设备树,dtb通常是直接打包在boot.img里的。想单独改设备树,需要先用mkbootimg --unpack boot.img解包,替换dtb后再重新打包。

mkbootimg --kernel kernel --ramdisk ramdisk --dtb rk3568-evb.dtb --output boot.img

这样生成的boot.img再烧录到boot分区就行。这里顺手提醒一句:改设备树尽量走SDK编译流程,你手动改完dtb后,kernel的配置、ramdisk的对应关系都容易出问题。我在RK3588上手动重打包过一次,忘了加ramdisk,结果内核起来后挂载不上根文件系统,排查了半天才反应过来。

“开发板挂载ubuntu”这个需求,本质是烧录一个ubuntu rootfs。一般做法是:把SDK编译出的Ubuntu update.img通过LOADER模式整体烧录,或者只更新rootfs分区。根文件系统烧进去之后,启动参数要保证root指向正确的分区,比如root=/dev/mmcblk0p7,这个参数通常在U-Boot环境变量或内核cmdline里配置。如果你只是把rootfs烧进去却没改U-Boot里的root参数,内核起来会报“Unable to mount root fs”,这就是典型的启动参数不匹配。

6. 常见问题与排查技巧实录

6.1 电脑识别不到设备

这是出现频率最高的一个问题。插上板子之后,RKDevTool一直显示无设备,设备管理器里也没有Rockusb设备。我建议按这个顺序排查:

  • 换USB线:很多USB线只能充电,没有数据线芯,或者质量差导致信号不稳。找一根短线,最好带屏蔽的,别用延长线。
  • 换USB口:电脑前置USB口供电不稳定,尽量插主板后置口。
  • 确认驱动:Win10/11下先关掉强制驱动签名,重新装DriverAssitant。
  • 调整上电时序:先插USB再上电、先上电再插USB、按住Recovery后插USB再松开,多试几种组合。
  • 看设备管理器:如果出现未知设备或带感叹号的设备,右键更新驱动,手动指定到DriverAssitant安装目录。

我遇到过一次很典型的情况:RK3568板卡在Windows下死活识别不了,换到Linux下lsusb能正常看到设备,说明USB枚举没问题,问题出在Windows驱动上。最后重装驱动签名加重启解决。

6.2 烧录中途报错怎么办

烧录过程中报错,先看错误发生在哪个阶段:

  • 下载Loader失败:MASKROM模式下出现,大概率是loader选错芯片,或者MASKROM没有真正进入。
  • 烧录到xx%卡死:基本是USB不稳定,换线、换口重试;也有可能固件本身损坏,重新解压一份再试。
  • 分区表不匹配:update.img里的parameter和设备当前存储布局不一致,刷新固件前先做一次擦除或用gpt命令重写分区表。
  • 中断后无法再识别设备:LOADER模式下烧录中断,loader损坏导致设备变成MASKROM。这种情况直接进MASKROM走救砖流程,别试图重复进LOADER。

烧录中途如果断电,数据一致性肯定会出问题。我自己的习惯是烧录前先保证板子有稳定外接电源,不要把板子仅靠USB供电扛全程。很多开发板USB供电电流不够,烧录过程中存储写入电流一大,压降明显,USB连接就断了。

6.3 几条烧录经验

平时烧录踩坑多了,有几条经验我觉得值得单独拿出来讲:

第一条,烧写前先备份。拿到一块新板子,不要上来就刷别的固件。先用RKDevTool或rkdeveloptool把原厂的boot、uboot、rootfs这些关键分区读出来存好。原厂固件有时候提供下载链接,但真到救砖的时候发现板子型号停产了,官方固件都找不到,那时候备份就是救命稻草。

第二条,loader版本必须跟着芯片和SDK走。瑞芯微的loader文件虽然名字看着都像spl_loader,但RK3568、RK3588、RV1126不通用。同一个芯片,SDK版本不同,loader也可能有不兼容的情况,优先使用当前固件包附带的loader。

第三条,烧录完无法启动先别急着怀疑硬件。定时清空misc分区这一条可能被很多人忽略。Android固件切换、恢复出厂设置异常,misc分区里的启动标记会干扰正常启动。MASKROM模式下擦除Flash重新烧录完整固件,基本能解决90%的“烧完起不来”问题。

第四条,从MCU转到MPU的开发者,别再用“烧程序”的思维理解瑞芯微。STM32烧个hex几百KB,瑞芯微一个update.img可能好几个GB,烧录时间、分区管理、启动链路复杂度完全不是一个量级。拿到板子先摸清启动介质、分区表、loader版本,再动手操作,会顺手很多。

我自己的习惯是,固定一根短线USB、一个稳定的电源适配器,专门用来烧录。救砖的时候心态放平,一步一步来:先进MASKROM,下载loader,确认设备枚举成功,再写固件。只要loader能下进去,这板子就还有救。别在找不到原因的时候反复重试同一个操作,把时序、线材、驱动、固件都排查一遍,问题基本都能定位到。

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

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

立即咨询