使用USB线升级固件

前言

本文介绍了如何将主机上的固件,通过Type-C数据线烧录到 LPA3399Pro 开发板的存储器中。升级时,需要根据主机操作系统和固件类型来选择合适的升级方式。

准备工具

  • LPA3399Pro 开发板

  • 主机

  • 良好的双公头USB数据线

准备固件

固件可以通过编译SDK获得,也可以通过百度网盘下载处下载固件。固件文件一般有两种:

单个统一固件

  • 统一固件是由分区表、bootloader、uboot、kernel、system等所有文件打包合并成的单个文件。Neardi正式发布的固件都是采用统一固件格式,升级统一固件将会更新主板上所有分区的数据和分区表,并且擦除主板上所有数据。 多个分区镜像

  • 即各个功能独立的文件,如分区表、bootloader、kernel等,在开发阶段生成。独立分区镜像可以只更新指定的分区,而保持其它分区数据不被破坏,在开发过程中会很方便调试。

通过统一固件解包/打包工具,可以把统一固件解包为多个分区镜像,也可以将多个分区镜像合并为一个统一固件。

安装烧写工具

Windows操作系统

  • 安装RK USB驱动 下载 Release_DriverAssistant.zip,解压,然后运行里面的 DriverInstall.exe 。为了所有设备都使用更新的驱动,请先选择驱动卸载,然后再选择驱动安装

    ../_images/usb_drv.png

下载 烧录工具RKDevTool_Release_v2.91,解压,运行 RKDevTool_Release_v2.91 目录里面的 RKDevTool.exe(注意,如果是 Windows 7/8,需要按鼠标右键,选择以管理员身份运行),如下图:

../_images/RKDevTool_Adb.png

Linux操作系统

Linux 下无须安装设备驱动

  • Linux_Upgrade_Tool工具 下载 Linux_Upgrade_Tool 并按以下方法安装到系统中,方便调用:

unzip Linux_Upgrade_Tool_xxxx.zip
cd Linux_UpgradeTool_xxxx
sudo mv upgrade_tool /usr/local/bin
sudo chown root:root /usr/local/bin/upgrade_tool
sudo chmod a+x /usr/local/bin/upgrade_tool
  • Linux_adb_fastboot工具 下载 Linux_adb_fastboot 并按以下方法安装到系统中,方便调用:

sudo mv adb /usr/local/bin
sudo chown root:root /usr/local/bin/adb
sudo chmod a+x /usr/local/bin/adb
sudo mv fastboot /usr/local/bin
sudo chown root:root /usr/local/bin/fastboot
sudo chmod a+x /usr/local/bin/fastboot

进入升级模式

通常我们升级固件的模式有两种,分别是Loader模式和MaskRom模式。烧写固件前,我们需要连接好设备,并让板子进入到可升级模式。

Loader模式

硬件方式进入Loader模式

连接设备并通过Update信号与GND短接进入Loader升级模式步骤如下:

  • 先断开电源适配器连接

  • 双公头USB数据线一端连接主机,一端连接开发板

../_images/otg.png

  • Update 信号与 GND 短接并保持

../_images/update.png

Pin num Pin description Notes
1 CPU_DEBUG_TX CPU Debug UART TX 3.3V Voltage level
2 CPU_DEBUG_RX CPU Debug UART RX 3.3V Voltage level
3 VCC3V3_DEBUG 3.3V power output only for debug
4 GND
5 NPU_DEBUG_TX NPU Debug UART TX 3.3V Voltage level
6 NPU_DEBUG_RX NPU Debug UART RX 3.3V Voltage level
7 CPU_UART4_RX CPU UART4 RX 1.8V Voltage level
8 CPU_UART4_TX CPU UART4 TX 1.8V Voltage level
14 GND
15 UPDATE_KEY Short with GND before DC plug in for loadermode
16 RESET_KEY Short with GND for system reset
17 GND
  • 接上电源

  • 大约两秒钟后,松开 Update 信号

软件方式进入Loader模式

双公头USB数据线接好后在串口调试终端或adb shell给板子运行以下命令

reboot loader

查看Loader模式

如何确定板子是否进入Loader模式,我们可以通过工具去查看

Windows操作系统

通过AndroidTool工具可以看到下方提示发现一个LOADER设备

../_images/RKDevTool_Loader.png

如果有进行”进入Loader模式”的操作,仍旧没有看到烧写工具提示LOADER,此时可以可以看一下Windows主机是否有提示发现新硬件并配置驱动。打开设备管理器,会见到新设备 RockusbDevice 出现,如下图。如果没有,可返回上一步重新[安装驱动]。

Linux操作系统

运行upgrade_tool后可以看到连接设备中有个Loader的提示

neardi@T-chip:~/$ sudo upgrade_tool
List of rockusb connected
DevNo=1 Vid=0x2207,Pid=0x330c,LocationID=106    Loader
Found 1 rockusb,Select input DevNo,Rescan press <R>,Quit press <Q>:q

MaskRom模式

进入MaskRom模式的方法,请参考[MaskRom模式]

烧写固件

windows操作系统

烧写统一固件 update.img

../_images/RKDevTool_update_img.png

烧写统一固件 update.img 的步骤如下:

  1. 切换至升级固件页。

  2. 固件按钮,打开要升级的固件文件。升级工具会显示详细的固件信息。

  3. 升级按钮开始升级。

  4. 如果升级失败,可以尝试先按擦除Flash按钮来擦除 Flash,然后再升级。 注意:如果你烧写的固件loader版本与原来的机器的不一致,请在升级固件前先执行擦除Flash

烧写分区映像

当烧写工具提示发现一个LOADER设备,按设备分区表按钮右测会显示镜像的分区地址,如下图所示:

../_images/RKDevTool_part.png

Android分区表
NO LBA Size Name
01 0x00002000 0x00002000 security
02 0x00004000 0x00002000 uboot
03 0x00006000 0x00002000 trust
04 0x00008000 0x00002000 misc
05 0x0000a000 0x00002000 dtbo
06 0x0000c000 0x00000800 vbmeta
07 0x0000c800 0x00014000 boot
08 0x00020800 0x00030000 recovery
09 0x00050800 0x000c0000 backup
10 0x00110800 0x000c0000 cache
11 0x001d0800 0x00008000 metadata
12 0x001d8800 0x00000800 baseparameter
13 0x001d9000 0x00614000 super
14 0x007ed000 0x06b4efdf userdata
Ubuntu分区表

源码对应分区表文件device/rockchip/rk3399pro/parameter.txt

NO LBA Size Name
01 0x00004000 0x00002000 uboot
02 0x00006000 0x00002000 misc
03 0x0000c800 0x00014000 boot
04 0x00028000 0x00040000 recovery
05 0x00068000 0x00010000 backup
06 0x00078000 0x01c00000 rootfs
07 0x01c78000 0x00040000 oem
08 0x001d8800 0x00000800 baseparameter
09 0x001d9000 0x00614000 super
10 0x01cb8000 0x06b4efdf userdata

烧写分区映像的步骤如下:

  1. 切换至下载镜像页。

  2. 勾选需要烧录的分区,可以多选。

  3. 确保映像文件的路径正确,需要的话,点路径右边的空白表格单元格来重新选择。

  4. 点击升级按钮开始升级,升级结束后设备会自动重启。

Linux操作系统

烧写统一固件 update.img

sudo upgrade_tool uf update.img

如果升级失败,可以尝试先擦除后再升级。

# 擦除 flash 使用 ef 参数需要指定 loader 文件或者对应的 update.img
sudo upgrade_tool ef update.img   #update.img :你需要烧写的 Ubuntu 固件
# 重新烧写
sudo upgrade_tool uf update.img

烧写分区镜像

sudo upgrade_tool di -b /path/to/boot.img
sudo upgrade_tool di -r /path/to/recovery.img
sudo upgrade_tool di -m /path/to/misc.img
sudo upgrade_tool di -u /path/to/uboot.img
sudo upgrade_tool di -dtbo /path/to/dtbo.img
sudo upgrade_tool di -p paramater   #烧写 parameter
sudo upgrade_tool ul bootloader.bin # 烧写 bootloader

如果因 flash 问题导致升级时出错,可以尝试低级格式化、擦除 emmc:

sudo upgrade_tool lf update.img  # 低级格式化
sudo upgrade_tool ef update.img  # 擦除

fastboot 烧写动态分区

adb reboot fastboot # 进入bootloader
sudo fastboot flash vendor vendor.img
sudo fastboot flash system system.img
sudo fastboot reboot # 烧写成功后,重启

常见问题

如何强行进入 MaskRom 模式

如果板子进入不了 Loader 模式,此时可以尝试强行进入 MaskRom 模式。

烧写失败分析

如果烧写过程中出现Download Boot Fail, 或者烧写过程中出错,如下图所示,通常是由于使用的USB线连接不良、劣质线材,或者电脑USB口驱动能力不足导致的,请更换USB线或者电脑USB端口排查。