切换升级存储器

前言

本文介绍当主机同时存在 eMMC 和 NOR flash 这两种存储器的时候,在烧录固件的时候,需根据以下的启动模式和情况来升级固件。

Loader 模式

如果是通过 软件执行 reboot loader 或者 通过硬件Recovery 按键进入的Loader 下载模式的话,可不需要看接下来的内容,直接跳到 《使用USB线缆升级固件》 操作。

Maskrom 模式

如果是通过 《MaskRom模式》 章节进入了Maskrom 模式(或设备异常,经过擦除设备进入Maskrom),而板子同时存在NOR flash和 eMMC 两种存储器,这个时候想要烧录固件,需要区分存储器:

固件下载到NOR flash

系统在Maskrom模式下默认将固件下载到NOR flash中,不过由于NOR flash 比较小,不足以装载系统镜像,所以一般只会烧写比较小的文件,如MiniLoaderAll.bin。如果不小心将整个固件下载到NOR flash中,会出现下载固件失败的现象, 此时大家可以参考FAQ去处理

固件下载到eMMC

若要将固件下载到eMMC中,需要先下载Loader,然后选择将存储器切换到eMMC。具体操作步骤如下:

1.先准备好 MiniLoaderAll.bin,一般存放在以下路径(需提前编译固件):

#Android SDK
path/to/SDK/rockdev/Image-rk3566_roc_pc/MiniLoaderAll.bin

#Linux SDK
path/to/SDK/rockdev/MiniLoaderAll.bin

如果还没有编译SDK,可以从以下链接下载 一个对应CPU型号的MiniLoaderAll.bin

2.点击下载工具的Advanced Function,然后将准备好的MiniLoaderAll.bin下载到存储器中,见下图

_images/load_emmc_with_flash01.png

3.点击List Storage读取存储器,此时存储列表选中的是SPINOR,为确保Nor flash为空,我们选择EraseAll擦除

_images/maskrom_erease_spinor_flash.png

  • X 表示设备不存在该存储器

  • 0 表示存在该存储器,但未选中

  • 表示存在该存储器并处于被选中状态

4.在存储列表中选中Emmc后点击Switch Storage

_images/load_emmc_with_flash02.png

可以看到存储列表中的Emmc状态就会从0切到,表示选择将固件下载到eMMC

_images/load_emmc_with_flash03.png

5.点击EraseAll擦除

_images/load_emmc_with_flash04.png

6.点击下载工具的Upgrade Firmware,然后选择我们想要下载进eMMC中的固件进行升级

_images/load_emmc_with_flash05.png

FAQ

Maskrom模式烧写失败

_images/maskrom_download_failed_with_flash.png

该现象是因为固件直接烧写进NOR flash中引起的,出现该现象时大家可以根据当前的情况进行处理:

情况一下载失败时没有断电或重启

可以直接点击EraseFlash擦除NOR flash

_images/Maskrom_EraseFlash.png

之后按照章节固件下载到eMMC的步骤进行固件升级即可

情况二有进行过重启或断电的操作

通过Recovery按键进入Loader模式, 然后点击AndroidTool的Go maskrom进入Maskrom模式

_images/Go_maskrom.png

之后按照章节固件下载到eMMC的步骤进行固件升级即可。若不清楚如何通过Recovery按键进入Loader模式请参考使用USB线缆升级固件章节

如果大家有接串口,可以查看一下log信息,其中Bootdev(atags): mtd 2说明系统启动到NOR flash存储器的uboot中

Bootdev(atags): mtd 2
GUID Partition Table Header signature is wrong: 0xA9425BF5A94153F3 != 0x5452415020494645
*** ERROR: Can't write GPT header ***
Backup GPT repair fail!
PartType: EFI
...
Device 0: unknown device
No ethernet found.
missing environment variable: pxeuuid
...
Retrieving file: pxelinux.cfg/default
No ethernet found.
Config file not found
No ethernet found.
No ethernet found.
=>

我们可以直接在这个模式擦除NOR flash

=> mtd erase nor0
Erasing 0x00000000 ... 0x01ffffff (8192 eraseblock(s))
=> reboot

也可以通过rbrom回到Maskrom模式

=> rbrom

进入到Maskrom模式后,固件升级都需要按照固件下载到eMMC的步骤进行操作

Go Maskrom无效

点击AndroidTool的Go Maskrom无法进入Maskrom模式,rbrom命令同样也不行,原因是部分旧固件不支持从NOR flash的bootloader回到Maskrom模式,此时可通过Recovery按键重新进入Loader模式,点击AndroidTool的EraseFlash进行擦除

_images/Loader_EraseFlash.png

无论是否提示擦除IDB失败都重启一下板子,重启后可进入Maskrom模式

_images/EraseFlash_IDB_failed.png

其它

烧写异常问题可参考帖子rk3566/rk3568 烧写异常问题,若遇到其它问题也可以到社区论坛对应的板块发帖