RK3399开发环境及配置工具使用
本节介绍了如何将主机上的固件文件,通过Type-C数据线,烧录到开发板的eMMC中。升级时,需要根据主机操作系统和固件类型来选择合适的升级方式。
1.RK3399开发平台介绍
1.1 开发平台配件说明
RK3399的标准套装包含以下配件:
- 友善之臂Nanopc-T4一块+7寸屏一块
- USB转串口模块及排线一根
- 100M/1000M以太网线缆
- Type-C 数据线,12V2A 电源适配器一个
- 16G TF卡一张及读卡器一个(可选)
1.2 硬件介绍

2.USB升级固件
本节介绍了如何将主机上的固件文件,通过Type-C数据线,烧录到开发板的eMMC中。升级时,需要根据主机操作系统和固件类型来选择合适的升级方式。
2.1 准备工作
- RK3399开发板套件
- USB转串口线连接开发板和电脑
- Type-C数据线连接开发板和电脑
- 准备待下载的出厂系统固件
- 单个统一固件update.img,将启动加载器、参数和所有分区镜像都打包到一起,用于固件发布。
- 多个分区镜像,如kernel.img,boot.img,rootfs.img等,在开发阶段生成。
2.2 Windows下进行出厂系统烧写
烧写RK的固件,需要用到以下两种工具:
-
量产工具RKBatchTool,用于烧写统一固件(update.img)
-
开发者工具RKDevelopTool,可单独烧写分区固件
后来RK发布了AndroidTool工具,在RKDevelopTool的基础上增加了统一固件(update.img)的烧写支待,因此现在仅需要这个工具即可。
2.2.1 安装RKUSB驱动
使用烧写工具前需要安装RK USB驱动。如果驱动已经安装好,可以跳过这步。
解压Release_DriverAssistant.zip,然后运行里面的DriverInstall.exe 。
为了所有设备都使用更新的驱动,请先选择“驱动卸载”,然后再选择“驱动安装”。





当连接好开发板USB线,电源线后,进入Loader模式(前提是你的板Uboot还没坏),在设备管理器中可以看到以下信息:

说明驱动安装成功。
如果启动程序损坏了,只能进入MaskRom模式。
2.2.2 USB转串口安装驱动
根据自己使用的USB转串口芯片型号下载相应驱动程序动并安装到Windows系统。

2.2.3 连接设备
无需断开电源适配器和Type-C数据线的连接:
- USB数据线一端连接主机,一端连接开发板。
- 按住设备上的RECOVERY(恢复)键并保持。
- 短按一下RESET(复位)键。
- 大约两秒钟后,松开RECOVERY键
主机应该会提示发现新硬件并配置驱动。打开设备管理器,会见到新设备"Rockusb Device"出现,如下图。如果没有,则需要返回上一步重新安装驱动。
2.2.4 Windows下烧写映像
运行AndroidTool Release目录里面的AndroidTool.exe,如下图

烧写分区映像的步骤如下:
- 切换至"下载镜像"页。
- 勾选需要烧录的分区,可以多选。
- 确保映像文件的路径正确,需要的话,点路径右边的空白表格单元格来重新选择。
- 点击"执行"按钮开始升级,升级结束后设备会自动重启。
出厂固件:friendlydesktop-arm64-images.tgz
解压出来后,使用AndroidTool选择升级各个分区,地址需要配置正确,各分区地址其中是由下图中Parameter.txt决定的,开发者可以打开固件中的这个文件对比,然后,双击地址栏,填充正确地址,然后在对应固件项…这一列表单击鼠标,选择固件。

配置好后,点击
按键,等待升级完成即可。在软件界面的右边文本中会有进度显示。
3.启动模式说明
RK3399有灵活的启动方式。一般情况下,除非硬件损坏,RK3399开发板是不会变砖的。如果在升级过程中出现意外,bootloader损坏,导致无法重新升级,此时仍可以进入MaskRom模式来修复。
3.1 加载方式
RK3399有32KB的BootRom和200KB的内部SRAM,支持从SPI接口、eMMC接口、DMMC接口设备加载系统,即除了支持从Nand Flash、SPI Flash、eMMC Flash启动外,还支持SD卡启动。另外RK3399支持从USB Type-C接口下载系统代码。
3.2 启动次序
启动的次序:
- 主控上电初始化。
- BootRom代码在SRAM上运行,校验存储设备里的bootloader。
- 校验通过,加载并运行bootloader引导代码。
- bootloader引导代码负责初始化DDR内存,加载bootloader完整代码到DDR内存中并运行。
- bootloader加载存储设备上的Linux内核,并将执行权交给Linux内核。
Linux系统启动:BootRom加载bootloader引导代码(前端一部份代码),这部分代码运行起来先初始化外挂DDR4芯片,让内存可以工作起来,然后加载完整的bootloader到外挂的DDR4中,再运行完整的bootloader程序,它就可以加载内核kernel.img到DDR4中,然后启动内存中的kernel,kernel会读取bootloader给它传递的参数,kernel运行后会读取emmc中的rootfs,完成文件系统的挂载,完成挂载后就可以正常工作。
RK3399有三种启动模式:Normal模式、Loader模式、MaskRom模式
3.2.1 Normal模式
Normal模式就是正常的启动过程,各个组件依次加载,正常进入系统。
3.2.2 Loader模式
在Loader模式下,bootloader会进入升级状态,等待主机命令,用于固件升级等。
要进入Loader模式,必须让bootloader在启动时检测到RECOVERY(恢复)键按下,且USB处于连接状态:
- 确保设备连接好电源适配器并处于通电状态。
- USB Type-C线连接好设备和主机。
- 按住设备上的RECOVERY(恢复)键并保持。
- 短按一下RRESET(复位)键。
- 松开RECOVERY键。
注意:如果发现按了RESET键后还是没有发现设备,请在保持RECOVERY按下的同时,长按一下PWRKEY键,然后才松开RECOVERY键。
3.2.3 MaskRom模式
MaskRom模式用于bootloader损坏时的系统修复。
一般情况下是不用进入MaskRom模式的,只有在bootloader校验失败(读取不了IDR块,或bootloader损坏)的情况下,BootRom代码就会进入MaskRom模式。此时BootRom代码等待主机通过USB接口传送bootloader代码,加载并运行之。
进入MaskRom模式流程
1. USB数据线一端连接主机,一端连接开发板。
2. 按住设备上的boot键并保持。
3. 短按一下RESET(复位)键。
4. 大约两秒钟后,松开boot键。
4.parameter.txt参数设置文件说明

parameter.txt配置的参数由Bootloader解析。含义如下:
FIRMWARE VER:6.0.1固件版本,打包update.img用到。升级工具据此识别固件版本
MACHINE MODEL:RK3399 机型,打包update.img用到。用于升级工具显示。
MACHINEID:007 产品ID,为数字或字母组合,打包update.img使用。
MANUFACTURER:RK3399机型,打包update.img用到。用于升级工具显示。
MAGIC:0x5041524B 无法修改
ATAG:0x00200800无法修改
MACHINE:3399无法修改,内核识别用
CHECK MASK:0x80无法修改
PWR HLD: 0.0.A,0,1 这里是控制GPIO0A0输出高电平
最后一位是电平判断,解释:
1:= 解析parameter时,输出高电平
2:= 解析parameter时,输出低电平
3:=在 Loader 需要控制电源时,输出高电平
0:=在 Loader 需要控制电源时,输出低电平
#KERNEL IMG: 0x00280000 内核地址,bootloader将加载此地址,如果kernel编译地址改变,需要修改此值。
#RECOVER KEY: 1.1.0.20.0
第一位数字表示按键类型,0表示普通按键,!表示AD按键,后面三位一组,根据不同的按键类型有不同的含义。
GPIO按键:gpio组编号,gpio组内编号,有效电平。比如0,4,C,5,0代表普通按键,GPIO4C5,低电平有效
AD按键:adc通道1,adc通道1,下限数值,上限数值,保留位。比如i,1,0,200,0代表AD按键,ADC通道,下限值为0,上限值为200即AD值在0~200之间的按键都认为是RECOVERKEY。
CMDLINE:root=/dev/mmcblklp7 rw rootfstype=ext4 mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(tmust),0x00002000@0x00006000mise),0x00006000@0x00008000(resource),0x00010000@0x0000e000(kemel),0x00010000@0x0001e000(boot),-@0x00030000(rootfs)consoleblank=0
root指定linux根文件系统分区
rootfstype指定linux根文件系统分区文件系统类型
MTD分区RK30xx、RK29xx和RK292x都是用k29xxnand做标识
@符号前是分区的大小,@符号后是分区的起始地址,括号中是分区的名字,单位都是sector(512Bytes)。
比如uboot起始地址为0x2000 sectors(4MB)的位置,大小为0x2000 sectors(4M)。
另外flash最大的bock是4M(0x2000 sectors),所以每个分区需要4MB对齐,即每个分区必须为4MB的整数倍。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)