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/目录下将要替换的文件名一致,修改原则如下图:

操作步骤:

  1. 按正常流程编译整包sdk,生成image升级文件。

  2. 整包sdk编译成功后,执行make_usb_factory_sigmastar.sh脚本,可以选择全部升级和部分分区升级:

    执行成功后在project\image\output\images目录生成SstarUsbImage_xxxx(date).bin空片升级包

  3. 下载工具包 (USBFactoryTool)

  4. 空片模式上电,接入usb。可以观察到pc上有接入存储设备

  5. PC通过usbhub连接需要升级的板子(板子flash必须为空片),打开USB Factory Tool.exe,显示如下:

    图上各个ICON功能如下:

    1→升级开始和停止的按钮,需要注意的是停止按钮必须等接上的所有设备升级成功后才能按下;

    2→升级包选择按钮:用来选择usb空片的升级包文件;

    3→usb设备升级状态和结果显示栏,需要注意的是目前空片升级有两个状态:准备和升级。必须等升级状态成功后才能拔掉usb设备插上另一个usb设备进行升级;

    4→显示目前识别到的usb设备

    5→Usb设备插入显示状态log

  6. 选择好usb升级包文件,等插上的所有设备都识别到后,点击start按钮进行升级,升级完成后的界面如下:

    图上各个ICON功能如下:

    1→显示每个设备升级的结果;

    2→显示每个设备升级的log;

    3→显示连接的所有设备个数以及升级的状态;

    4→显示检测到的usb设备,需要注意的是升级成功后检测到的usb设备会被移除

    根据1→显示的每个设备的升级状态,进行如下操作:

    升级成功:拔掉对应的设备,插上另一块空片继续进行升级;

    升级失败:可以尝试插拔一下设备重新 升级看是否ok

  7. 如果不想插入板子识别到设备后自动进行升级,可以选择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命令。

操作步骤:

  1. 配置uboot
    location:
    Command line interface
        -->SigmaStar cmmon commands
            -->[*] ufu
    

支持ufu升级,但是不开启自动运行。

  1. 将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.cFORCE_UPGRADE_GPIO(指定IO)、FORCE_UPGRADE_ACTIVE_HIGH(指定状态),具体如下图:

      实现原理:通过在uboot启动时,通过检测指定IO的指定状态,选择是否进入ufu modde(device 升级模式),相关代码实现在autoboot.c中,感兴趣可以自行研究。

  2. 重启板子进入uboot或输入ufu command后会停在如下位置:

  3. 打开usb factory tool就可以识别到设备,然后按照上面空片升级方式进行升级即可