SSU_USB Device升级
1. 概述¶
适用目前发布的任意版本。
2. 空片模式usb device升级¶
需求场景:
已有完整pcb,有usb 接口,但是nandflash、norflash、emmc里面为空。
实现原理:
IC上电先执行rom code,然后根据外部硬件配置跳转到flash/emmc/sdmmc中执行IPL,没有找到IPL资料,系统自动进入ufu的升级模式。通过pc tool 预加载 u-boot.bin (通过make_usb_factory_sigmastar.sh打包进SstarUsbImage_xxxx(date).bin空片升级包)。
此模式下要求: 预加载的u-boot.bin (release目录:project/board/p5/usb/upgrade/*,默认已经release) 本身具备ufu升级能力。
制作具有ufu升级能力的预加载bin,uboot menuconfig配置如下:
Init options -->Start-up hooks rch features support -->[*] Execute Board late init
ARM architecture -->SigmaStar arch features support -->[*] Auto update feature -->(ufu) Force boot command to run
编译完成后,根据flash类型替换将生成的 预加载的u-boot.bin ,将bin档名修改为与project/board/p5/usb/upgrade/
目录下将要替换的文件名一致,修改原则如下图:
操作步骤:
-
按正常流程编译整包sdk,生成image升级文件。
-
整包sdk编译成功后,执行make_usb_factory_sigmastar.sh脚本,可以选择全部升级和部分分区升级:
执行成功后在project\image\output\images目录生成SstarUsbImage_xxxx(date).bin空片升级包
-
下载工具包 (USBFactoryTool)
-
空片模式上电,接入usb。可以观察到pc上有接入存储设备
-
PC通过usbhub连接需要升级的板子(板子flash必须为空片),打开USB Factory Tool.exe,显示如下:
图上各个ICON功能如下:
1→升级开始和停止的按钮,需要注意的是停止按钮必须等接上的所有设备升级成功后才能按下;
2→升级包选择按钮:用来选择usb空片的升级包文件;
3→usb设备升级状态和结果显示栏,需要注意的是目前空片升级有两个状态:准备和升级。必须等升级状态成功后才能拔掉usb设备插上另一个usb设备进行升级;
4→显示目前识别到的usb设备
5→Usb设备插入显示状态log
-
选择好usb升级包文件,等插上的所有设备都识别到后,点击start按钮进行升级,升级完成后的界面如下:
图上各个ICON功能如下:
1→显示每个设备升级的结果;
2→显示每个设备升级的log;
3→显示连接的所有设备个数以及升级的状态;
4→显示检测到的usb设备,需要注意的是升级成功后检测到的usb设备会被移除
根据1→显示的每个设备的升级状态,进行如下操作:
升级成功:拔掉对应的设备,插上另一块空片继续进行升级;
升级失败:可以尝试插拔一下设备重新 升级看是否ok
-
如果不想插入板子识别到设备后自动进行升级,可以选择manual模式,升级方式跟auto差不多,只是要在升级前选中需要升级的设备,然后再点击start进行升级:
3. uboot下进入ufu升级(非空片升级)¶
需求场景: 已有完整pcb,有usb 接口,确保系统可进入uboot模式
实现原理: flash/emm/sdmmc里面已经有uboot。且此份uboot支持device ufu模式下接pc升级,通过执行uboot和pc软件进行交互,完成下载升级。
此模式下要求:flash/emm/sdmmc里面已有的uboot 本身具备ufu升级能力,uboot下支持ufu命令。
操作步骤:
- 配置uboot
location: Command line interface -->SigmaStar cmmon commands -->[*] ufu
支持ufu升级,但是不开启自动运行。
-
将uboot烧录入flash。此boot具有ufu升级能力。开机进入uboot。
-
方式一:
此方式需要打开menuconfig中的
Auto update UFU with U-boot env(ota_upgrade_status)
选项。在boot模式下设定如下参数,重启开机后会进入device升级模式。
setenv ota_upgrade_status 1 saveenv
-
方式二:
uboot模式下使用输入
ufu command
可以直接进入device升级模式。 -
方式三:(通过gpio按键检测进入UFU Mode)
此方式需要打开menuconfig中的
Auto update UFU with GPIO
选项。长按指定预设按键,并且上电开机,开机后uboot检测到按键触发,自动会进入device ufu升级模式。
如果需要指定对应的GPIO,则需要按照以下方法配置,并编译重新烧录uboot。
配置指定按键指定状态方法:修改
boot/common/autoboot.c
下FORCE_UPGRADE_GPIO(指定IO)、FORCE_UPGRADE_ACTIVE_HIGH(指定状态)
,具体如下图:实现原理:通过在uboot启动时,通过检测指定IO的指定状态,选择是否进入
ufu modde(device 升级模式)
,相关代码实现在autoboot.c中,感兴趣可以自行研究。
-
-
重启板子进入uboot或输入
ufu command
后会停在如下位置: -
打开usb factory tool就可以识别到设备,然后按照上面空片升级方式进行升级即可