RK3568 Maskrom模式全解析:三种进入方式与救砖实战
2026/9/24 8:52:43 网站建设 项目流程

做嵌入式开发这几年,RK3568 在我手里已经不知道折腾过多少回了。很多刚上手的工程师拿到开发板后,第一句问的不是“内核怎么编译”,也不是“设备树怎么改”,而是“我的板子怎么进 Maskrom”。这个模式在最关键的时候能救命:改错设备树起不来、烧错 Uboot 变砖、想把整块 Flash 擦干净重新来,全得靠它。这篇文章不玩虚的,直接把你会在 RK3568 开发板上遇到的所有 Maskrom 相关问题一次讲透,尤其是三种不同的进入方式。

1. Maskrom 模式到底是个什么东西

1.1 从启动流程说起:为什么会有 Maskrom 这么个模式

先别急着按按键,搞懂原理能让你少走很多弯路。RK3568 这颗 SoC 上电之后,第一段执行的代码不是 Uboot,也不是内核,而是芯片出厂时就固化在内部 ROM 里的一段程序,业内叫 BootROM。这段代码短小精悍,主要干两件事:初始化最基本的时钟和存储控制器,然后去检测外部的启动介质,比如 eMMC、SD 卡、SPI Flash。

如果 BootROM 在检测过程中发现外部介质里没有可用的 BootLoader,或者检测到了某些强制进入下载模式的信号,它就不会继续往下走,而是停在一个等待主机命令的状态。这个状态就是 Maskrom 模式。你可以把它理解成芯片的“BIOS 引导失败后的恢复模式”,底层、基础、几乎没有被破坏的可能,因为那段代码是 Mask 工艺固化进去的,擦不掉、改不了。

Maskrom 这个名字里的“Mask”其实指的就是芯片制造时的掩膜(Mask),意思是这块代码在流片的时候就已经固定了。有些人会把 Maskrom 和 Loader 模式搞混,这俩确实长得很像,但本质上有区别。Maskrom 是 BootROM 没能加载外部 Loader 时的状态,这时候芯片的 DDR 都还没完全初始化,能做的事比较有限;而 Loader 模式是 BootROM 已经把板级 Loader(比如 MiniLoaderAll.bin)加载进内存并运行起来了,这时候芯片已经具备完整的存储访问能力,工具能做的事情也多得多。

1.2 Maskrom、Loader、Uboot 和 Recovery,到底区别在哪

初期接触这块的同事经常被 RKDevTool 界面上的 MASKROM 和 LOADER 两个标签搞晕。我在带新人时,一般会直接给他们画一张表,把几种启动阶段对应的状态、触发条件和工具显示列清楚。

模式触发条件能做什么工具显示
MaskromBootROM 没找到可用 Loader,或检测到按键强制进入擦除 Flash、烧写全部分区、向内存加载 LoaderMASKROM
LoaderBootROM 成功加载外部板级 Loader常规分区烧写、固件升级、调试LOADER
RecoveryAndroid 系统引导层检测到组合键系统恢复出厂、OTA 升级Recovery
Normal正常启动跑 Linux / Android 系统

注意,Maskrom 模式下你没法直接去枚举 eMMC 或 SPI Flash,因为 DDR 控制器还没有被完整初始化,所以无论是 RKDevTool 还是 rkdeveloptool,在 Maskrom 阶段做的第一件事,基本都是先往芯片内存里塞一份 DDR 初始化代码和 Loader,然后才能执行后续的读写操作。这个机制后面讲烧写流程时还会再提,这里你先记住一个结论:Maskrom 是芯片最底层的兜底状态,恢复能力最强,但使用门槛也最高。

1.3 什么场景下非进 Maskrom 不可

进 Maskrom 的需求无非这么几类。最常见的是系统起不来,比如你改了设备树里的某个管脚复用,导致内核 panic 在启动早期,或者你烧录了一个不匹配的 Uboot,连 bootloader 阶段都过不去。这种时候普通的重刷流程根本跑不起来,因为系统连 Loader 阶段都未必能稳定进入,唯一的办法就是强制芯片停留在 Maskrom,从底层重新写一遍。

其次是整盘擦除和低格。某些情况下旧分区里的数据会干扰新固件的烧录,尤其是从 Android 切到 Linux,或者买了开发板想清掉厂商预装的系统,直接在 Maskrom 下擦除整颗 eMMC 或 SPI NOR Flash 是最干净的做法。

还有一类场景是做底层开发,比如适配 EtherCAT 主站驱动、调试 OV5695 或 OV8858 这类摄像头模组时要反复修改设备树和内核,一旦改错就起不来。熟练进入 Maskrom,能让你在一分钟之内把板子拉回可烧录状态,开发效率完全不一样。所以不要觉得 Maskrom 只是“救砖工具”,它其实是嵌入式开发里的底层安全网。

2. 进入 Maskrom 模式的三种姿势

2.1 最常规的 UPDATE 键进入法

RK3568 开发板上最常见的进 Maskrom 方式是通过 UPDATE 键,但不同厂家对这个按键的命名五花八门:有的叫 UPDATE,有的叫 RECOVERY,有的叫 MASKROM,还有的干脆只印一个向下箭头。不管叫什么,它的作用基本一致:在 BootROM 阶段把一个 GPIO 拉成特定电平,告诉芯片“我要进下载模式”。

标准操作流程是这样的。先准备一根支持数据传输的 USB 线,一头插电脑,另一头插开发板的 OTG 口。这里有一个特别容易踩的坑:很多开发板上有两个 USB 口,一个是 USB Host,一个是 OTG,只有 OTG 口能用于烧录。你插错了口,按住 UPDATE 键按到天荒地老,电脑也认不出设备。

找到 OTG 口之后,按住 UPDATE 键不松手,保持这个状态给板上电。有的板子是独立 DC 电源,有的板子是 Type-C 供电,还有的板子可以通过 OTG 口直接供电。以大多数核心板加底板的组合为例,推荐顺序是先接好 USB 线,然后按住 UPDATE 键,再插 DC 电源。上电后大概两三秒,电脑右下角会弹出一个设备接入提示声,设备管理器里应该能看到一个 Rockusb 设备,这时候就可以松开 UPDATE 键了。

这里要补充一句,不同板卡对“先上电还是先插 USB”的容忍度不一样。我实测过一些板子,如果先上电再插 USB,就算按住键也未必能进 Maskrom;而先插 USB 再上电的成功率很高。原因可能是 USB 枚举时序和 BootROM 检测窗口之间的配合问题。保险起见,我建议一律使用“先插 USB,按住按键,再上电”的顺序。

2.2 音量- 键进入法:按键都在的板子怎么操作

不少 RK3568 方案的开发板为了兼容 Android 系统,板上会保留音量加减键,有些甚至没有独立的 UPDATE 键,只有一个隐藏焊盘或者干脆把音量减键复用来做 Maskrom 触发。第一次看到这种设计时我也愣了一下,后来翻了原理图才明白,原来这个音量-键的 GPIO 和 BootROM 检测脚是连在一起的,至少在启动阶段它起到的就是 UPDATE 键的作用。

操作上和 UPDATE 键类似,但有一个细节不同:音量-键往往需要按住的时间更长一些。在带 Android 系统的板子上,BootROM 要先读取按键状态,然后判断是正常开机还是进 Maskrom,如果你只按了一瞬间就松开,系统可能直接正常启动了。我的经验是按住音量-键保持三秒以上,再插电源或者按复位键,等电脑识别到设备后再松手。

还有一个容易忽略的地方:如果你的板子同时有音量-键和复位键,最稳定的组合方式是按住音量-键不松,然后点按一下复位键,让系统在按键保持的状态下重新上电复位,这样就不需要反复插拔电源了。这个技巧在量产调试时特别实用,因为不需要每次都去摸电源插头。

需要特别提醒的是,音量-键进 Maskrom 并不是 RK3568 的通用特性,而是板级设计决定的。有的板卡虽然画了音量键,但 BootROM 的检测引脚并没有连过去,这时候按音量-根本没用。所以拿到一块新板子,第一件事一定是去查原理图,确认按键网络名是不是类似 KEY_MASKROM、KEY_UPDATE 或者 BOOT_SEL 这样的信号。

2.3 复位键进入法:没有独立按键时的保底方案

第三种方法巧妙一点,适合板子没有独立 UPDATE 键、或者已经上电但系统卡死的情况。很多 RK3568 核心板把 Maskrom 触发设计成了一个需要短接的焊盘,这在量产产品上很常见,因为产品外观上不想留一个用户能按到的烧录键。这种情况下,你可以用镊子短接那个焊盘,然后配合复位键进入 Maskrom。

操作步骤也简单。首先保证板子已经上电,不管它是卡死在 Uboot 还是内核,都不影响。然后用镊子或者杜邦线短接 Maskrom 焊盘,或者按住对应的按键,保持不松。接下来找到板上的复位键,轻点一下。这一步的目的就是让芯片重新走一遍 BootROM 流程,而 BootROM 在上电瞬间会重新检测按键状态,发现你有进 Maskrom 的请求,就停住了。

等电脑识别出 Rockusb 设备之后,就可以松开短接的镊子了。这个方法的精髓在于“热复位进入”,它避免了频繁插拔电源线,对已经固定在工装上的板子特别友好。实际上,就算你的板子上有 UPDATE 键,我也建议你有意识地习惯一下“按住触发键再按复位”这个操作,它比断电上电更温和,也能减少对电源接口的物理损耗。

2.4 三种方式怎么选:硬件设计和实操效率的矛盾

三种方式各有适用场景,我直接给你一个优先级建议。如果板子上有独立的 UPDATE 键,优先用它,操作最直接。如果板子带音量键或者触发键位置比较隐蔽,优先试音量- 键加复位键的组合。如果板子上只有触发焊盘,那就老老实实用镊子短接,同时把复位键配合进来。

进入方式适用板卡关键操作点推荐场景
UPDATE 键大多数开发板、核心板按住后插入 USB 或上电首次烧录、常规救砖
音量- 键带 Android 或带音量键的板子按住 3 秒以上,可配合复位无独立烧录键时的替代方案
复位键所有带复位键的板子按住触发键后轻点复位板子已上电、系统卡死时

说句实话,硬件设计上最省事的还是独立 UPDATE 键加复位键的组合,但为了节省空间和成本,现在越来越多的板卡喜欢把按键做成焊盘或者复用音量键。不管哪种设计,你只要弄清楚一个核心问题:这个板子上哪个信号在 BootROM 阶段能被检测到,就成功了一大半。剩下的就是通过阅读原理图和实测来确认。

3. 进入之后怎么确认,以及配套工具链怎么搭

3.1 从设备枚举看状态:VID/PID 和驱动识别

进了 Maskrom 之后,第一件要做的事就是确认主机端真的认到了设备。Windows 下最简单的方法是打开设备管理器,展开“通用串行总线设备”或者“libusb-win32 devices”,正常情况下你应该看到一个名字里带 Rockusb 的设备。如果 RKDevTool 是开着的,它会在界面右侧显示“发现一个 MASKROM 设备”之类的提示。

从 USB 协议层面看,RK3568 在 Maskrom 模式下枚举出来的 VID 是 2207,PID 是 350a,而在 Loader 模式下 PID 通常是 0011。这两个数值可以直接用 USB 抓包工具或者设备管理器里的详细信息看到。我用这个办法判断板子当前处于哪个阶段特别准,比肉眼盯屏幕还快。Linux 下则直接用 lsusb 命令就能看到:

lsusb Bus 002 Device 003: ID 2207:350a Rockchip

如果你看到的是 2207:350a,说明你的板子确实停在了 Maskrom。如果看到 2207:0011,说明 Loader 已经被加载了。如果啥都没看到,那就要检查前面的操作步骤了。

3.2 Windows 下的驱动安装与 RKDevTool 识别

Windows 下玩 RK 芯片,绕不开驱动安装这一步。很多新手第一次插上板子,设备管理器里出现一个带黄色感叹号的未知设备,就以为板子坏了,其实只是驱动没装。去瑞芯微官网或者开发板厂商的网盘里找 RKDriverInstall 工具,解压后右键以管理员身份运行,它会自动把 Rockusb 驱动装上。

Win10 和 Win11 有一个额外的坑:默认开启驱动签名强制,如果装的是没有签名的驱动,系统会直接拦截。解决办法是启动到“高级启动”模式,选择“禁用驱动程序强制签名”,然后再安装一次。注意这个设置只对当次生效,重启之后如果有新设备接入,还得再操作一遍。

驱动装好之后,打开 RKDevTool,正常情况下它会自动刷新,界面中间会变成一个绿色的“发现一个 MASKROM 设备”,或者类似“发现一个 LOADER 设备”。如果你手里的工具版本比较老,可能需要手动点一下“切换”或者重新插拔一次设备。只要工具能识别到设备,接下来的烧录就是水到渠成的事。

3.3 Linux 下用 rkdeveloptool 和 upgrade_tool 确认

如果在 Linux 环境下开发,就不需要驱动安装这套流程了,系统自带的 USB 内核驱动就能直接和设备通信。你只需要装一个命令行工具,rkdeveloptool 或者 upgrade_tool。以 rkdeveloptool 为例,安装之后先列一下设备:

rkdeveloptool ld DevNo=1 Vid=0x2207,Pid=0x350a,LocationID=106 Maskrom

看到 Maskrom 字样就说明进入成功了。接下来如果你需要烧写整个镜像,可以先用它下载 Loader 到内存:

rkdeveloptool db MiniLoaderAll.bin

执行完这条命令后,设备会从 Maskrom 状态切换到 Loader 状态,之后再执行写分区操作就不会报错了。upgrade_tool 的用法类似,upgrade_tool LD查看设备,upgrade_tool DB下载 Loader,upgrade_tool UF升级固件。两者选一个用就行,我个人更习惯 rkdeveloptool,因为它的命令更直观,和 rkflashtool 的风格更接近。

3.4 驱动装不上、设备识别不了时先查这几处

很多人在这一步卡很久,浪费时间,这里直接给你一个排查顺序。先看 USB 线是不是只充电没数据,换一根手机原装数据线试;再看插的是不是 OTG 口,有些板子的 Type-C 口和 Debug 口紧挨着,插错口很常见;然后在设备管理器里强制更新驱动,手动指向驱动目录;最后关闭杀毒软件和防火墙,有时候它们会拦截驱动安装。

如果以上都排查完还是不行,我建议你换个电脑的 USB 口。实测下来,主板后置的 USB 2.0 口兼容性最好,USB 3.0 口在某些老版本驱动下反而容易出现识别问题。还有一个冷门但有效的操作:有些主板对 USB 口的电源管理比较激进,在设备管理器里把“允许计算机关闭此设备以节约电源”的勾去掉,能减少枚举失败的几率。

4. 实战:用 Maskrom 模式救砖和烧写固件

4.1 救砖场景:Uboot 挂了怎么把板子拉回来

说一个我实际遇到过的场景,最有代表性。一次调试中,我在 RK3568 上烧了一个从别的平台移植过来的 Uboot,本来是想试试兼容性,结果板子直接变砖,串口没有任何输出,HDMI 也黑屏。这个时候正常的烧录流程已经走不通了,因为系统在任何阶段都起不来,必须进 Maskrom。

我当时的操作是:先按住底板上的 UPDATE 键,然后用 USB 线连接 OTG 口和电脑,最后插上 DC 电源。电脑识别设备后,我先用 rkdeveloptool 下载了一份对应 DDR 容量和型号的 MiniLoaderAll.bin 到芯片内存:

rkdeveloptool db MiniLoaderAll.bin

这一步成功之后,设备会从 Maskrom 进入 Loader 状态,紧接着就可以直接烧写完整的 update.img 了。如果时间紧,不一定非得烧整包,也可以只烧关键的 Uboot 分区,把板子先拉起来再说。

这里我想强调一个很多人不知道的细节:Maskrom 模式下芯片的 DDR 还没初始化,所以你不能直接往 Flash 里写数据,必须先让 Loader 跑起来完成 DDR 初始化。工具帮你做的事情,本质上就是把一段很小的 DDR 初始化代码加载到 SRAM 里执行,然后再把 Loader 本体加载到 DDR 中运行。明白了这层机制,你就知道为什么每次进入 Maskrom 后的第一个操作几乎都是 download loader。

4.2 烧写分区固件时的参数选择和地址对齐

如果你不想每次都用整包镜像,只改了一个设备树或者一个内核,完全可以只烧写对应分区。RK3568 的 eMMC 烧写地址是有讲究的,直接用 rkdeveloptool 写分区时,地址是扇区号,一个扇区 512 字节。我常用的一份分区起始地址如下:

分区起始扇区说明
uboot0x4000Uboot 和 Trust 镜像
misc0x6000启动模式标记
boot_a0x8000内核和设备树
rootfs_a0x18000根文件系统

实际分区表要以你手头固件的 parameter 文件为准,不同厂家差异很大。曾经有人不看参数直接套用网上教程的地址烧写,结果把 boot 分区写到了 uboot 的位置,板子直接起不来。这种问题不是烧坏硬件,但排查起来很折磨人。所以我建议,在开发阶段先烧一整包 update.img,确认系统能启动后再研究单分区更新的事。

使用工具烧写整包时,RKDevTool 的“升级固件”按钮会把 Loader 和所有分区镜像一起处理,期间不要拔线、不要断电,否则可能停留在半砖状态,还得重新进 Maskrom 再走一遍流程。另外,不同版本的 rkdeveloptool 对某些新分区表支持可能有差异,如果出现写分区报错,优先试试更新工具版本。

4.3 借助 Maskrom 做底层调试:从设备树到 EtherCAT 主站移植

Maskrom 不只是用来救砖的,它在日常底层调试里作用也很大。举个例子,你在给 RK3568 适配摄像头传感器 OV5695 或者 OV8858 时,经常要改设备树里的 I2C 地址、复位 GPIO 和电源时序。一旦 GPIO 复用配置错误,内核可能在启动早期就 panic,别说是摄像头了,连串口都出不来。

这种时候,我的调试节奏是:改完设备树,编译内核和 dtb,打包成 boot.img,然后进 Maskrom 擦掉旧的 boot 分区,烧入新的 boot 镜像,重启看日志。如果起不来,再进 Maskrom,继续调整。整个过程熟练之后,一次来回可能就两分钟,这比反复接串口、看启动日志、猜测问题要高效得多。

还有做工业控制的朋友,要把 EtherCAT 主站 IGH 移植到 RK3568 上。IGH 通常对网卡和内核实时性有要求,需要替换或编译特定的网卡驱动,同时调整内核的 PREEMPT 配置,这个过程要反复烧写内核和设备树。我们当时的做法就是准备一个只有在 Maskrom 模式下才能识别的 USB 烧录脚本,一旦新内核不稳定,立刻一键重刷回备份镜像。可以说,熟练进入和退出 Maskrom,已经成了团队做底软开发的必备技能。

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

5.1 长按 UPDATE 键没反应,先查这四件事

这个问题出现频率最高。明明按住了录键,也插了电,电脑就是一点反应都没有。我自己的排查顺序是这样的。第一,USB 线是不是数据线,很多人的桌面充电线泛滥,随手拿一根只能供电不能传数据。第二,插的是不是 OTG 口,RK3568 开发板上的 USB 口可能有三四个,只有专用于烧录的 OTG 口能进 Maskrom。第三,按键有没有按对,有的板卡 UPDATE 键其实是个焊盘,需要短接,不是按压式按键。第四,上电顺序对不对,有的板子必须“先按着键再上电”,如果先上电再按键,BootROM 已经跳过了检测窗口,自然没反应。

如果按键确认没问题,还可以用万用表量一下按键两端的电压。正常状态下,BootROM 检测引脚应该有一个上拉或下拉电平,按下按键后会翻转。量不到电压变化,说明原理图上的网络和你实际按的按键根本不是一路信号。

5.2 电脑提示无法识别的 USB 设备,大概率是驱动问题

Windows 下最常见的就是设备管理器里出现“Unknown Device”,或者设备名前带一个黄叹号。这种情况先别急着怀疑板子,九成是驱动没装对。Win10 以上系统,先按前面说的禁用驱动签名强制,再装 RKDriverInstall。装完之后,重新插拔一次 USB 线,让系统重新枚举设备。如果还是不识别,可以手动在设备管理器里选择“更新驱动程序”,然后指向驱动目录,让系统强制安装一次。

Linux 下遇到无法识别的情况相对少,但如果你用的是虚拟机,比如 VMware 或 VirtualBox,需要先把 USB 设备从宿主机的驱动中解绑,然后手动连接到虚拟机里。虚拟机环境下 USB 枚举不稳定是很常见的,建议优先在物理机上操作,少走弯路。

5.3 进入 Maskrom 后烧录到一半失败,多半是供电问题

烧录过程中失败比设备识别不了更让人崩溃。遇到过烧到一半工具直接报错,设备从电脑上消失了的情况。排查到最后,基本都是供电问题。Maskrom 模式和 Loader 模式下芯片某些外设没有完全初始化,功耗波动比较大,如果只用 USB 口供电,碰到电源质量一般的电脑,瞬间电流不足就会导致设备掉线。

解决办法是给板子接独立电源,不要依赖 USB 供电。如果是核心板加底板的架构,确认底板上的电源指示灯稳定不闪。另外,换一根短一点粗一点的 USB 线也有帮助,线材电阻太大时压降非常明显。

还有一个小技巧:烧录前先在工具里执行一次“擦除 Flash”,把目标存储介质清空,再烧写完整镜像。这样可以排除旧分区残留数据导致的写入异常。不过要提前备份重要数据,擦除操作是不可逆的。

5.4 不同开发板在 Maskrom 上的特殊细节

最后说一下不同板卡之间的差异。RK3568 的 Maskrom 本身是芯片级的,所有基于这颗芯片的板子都能进,但触发方式真的是五花八门。有的开发板在核心板上有独立的 UPDATE 键,但底板留出的位置很别扭,你只能拿螺丝刀顶住才能按到;有的板子把按键设计成音量加减一体的摇杆,需要长按音量减三秒以上才触发;还有的板卡没有物理按键,只留了两个标注为 MASKROM 的焊盘,需要你焊接引线或者直接用镊子短接。

我强烈建议,拿到一块新板子之后,第一时间去官网下载原理图 PDF,用关键词搜索 MASKROM、UPDATE、BOOT 这几个信号名,看清楚它们接到 SoC 的哪个引脚,以及板级上拉下拉的默认电平。这一步花不了十分钟,但能让你在之后整个开发周期里省下大量排查时间。很多时候你以为的“板子坏了”,其实就是没有按照这块板子的设计意图去操作而已。

还有一条经验,不管是哪种按键方式,进 Maskrom 之前最好把串口调试线拔掉再接 USB,某些调试串口工具会占用额外的 IO,虽然理论上不影响 BootROM 的 USB 枚举,但我确实碰到过串口工具导致 USB 枚举失败的怪事。操作顺序上,我先拔串口、再插 OTG、然后按键上电,整个流程稳定很多。

5.5 附:快速排查速查表

现象可能原因解决方法
按住 UPDATE 键无反应USB 线或 OTG 口不对换数据线,确认插到 OTG 口
电脑提示 Unknown Device驱动问题禁用驱动签名后重装驱动
工具识别设备后立刻掉线供电不足使用独立电源供电
烧录到一半报错数据线质量差或电压不稳换短线、加独立电源、先擦除 Flash
按键位置找不到不同板卡设计差异查阅原理图确认按键网络名
Linux 下 lsusb 无设备虚拟机 USB 透传问题改用物理机操作

说实话,Maskrom 模式本身并不神秘,它就是芯片设计者预留的一个底层恢复通道。真正让很多人觉得难搞的,是不同板卡五花八门的触发设计和主机端的驱动环境。但只要你理解了一个底层原理——BootROM 上电时检测按键信号,然后决定是否停留在 Maskrom——所有的方法都是这个原理在不同硬件设计下的具体落地。我个人在实际项目中,最常用的还是“按住触发键 + 点按复位键”这套组合拳,既不用频繁插拔电源,又能在系统卡死后快速恢复。也建议你在自己的开发环境里固定一套操作顺序,别每次都临场发挥。等你把进入 Maskrom 练得像喝水一样自然,调起设备树、内核这些底层模块来,底气会完全不一样。

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

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

立即咨询