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数据线的连接:

  1. USB数据线一端连接主机,一端连接开发板。
  2. 按住设备上的RECOVERY(恢复)键并保持。
  3. 短按一下RESET(复位)键。
  4. 大约两秒钟后,松开RECOVERY键

主机应该会提示发现新硬件并配置驱动。打开设备管理器,会见到新设备"Rockusb Device"出现,如下图。如果没有,则需要返回上一步重新安装驱动。

2.2.4 Windows下烧写映像

运行AndroidTool Release目录里面的AndroidTool.exe,如下图

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

  1. 切换至"下载镜像"页。
  2. 勾选需要烧录的分区,可以多选。
  3. 确保映像文件的路径正确,需要的话,点路径右边的空白表格单元格来重新选择。
  4. 点击"执行"按钮开始升级,升级结束后设备会自动重启。

出厂固件:friendlydesktop-arm64-images.tgz

解压出来后,使用AndroidTool选择升级各个分区,地址需要配置正确,各分区地址其中是由下图中Parameter.txt决定的,开发者可以打开固件中的这个文件对比,然后,双击地址栏,填充正确地址,然后在对应固件项…这一列表单击鼠标,选择固件。

配置好后,点击 按键,等待升级完成即可。在软件界面的右边文本中会有进度显示。

3.启动模式说明

RK3399有灵活的启动方式。一般情况下,除非硬件损坏,RK3399开发板是不会变砖的。如果在升级过程中出现意外,bootloader损坏,导致无法重新升级,此时仍可以进入MaskRom模式来修复。

3.1 加载方式

RK339932KBBootRom200KB的内部SRAM,支持从SPI接口、eMMC接口、DMMC接口设备加载系统,即除了支持从Nand FlashSPI FlasheMMC Flash启动外,还支持SD卡启动。另外RK3399支持从USB Type-C接口下载系统代码。

3.2 启动次序

启动的次序:

  1. 主控上电初始化。
  2. BootRom代码在SRAM上运行,校验存储设备里的bootloader。
  3. 校验通过,加载并运行bootloader引导代码。
  4. bootloader引导代码负责初始化DDR内存,加载bootloader完整代码到DDR内存中并运行。
  5. 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处于连接状态:

  1. 确保设备连接好电源适配器并处于通电状态。
  2. USB Type-C线连接好设备和主机。
  3. 按住设备上的RECOVERY(恢复)键并保持。
  4. 短按一下RRESET(复位)键。
  5. 松开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的整数倍。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐