1. 单备份升级说明

AD14 只支持设备升级(即SD卡升级 和 U盘升级)
该升级方式为单备份升级。
正常的升级流程:

SDK -> 调用升级接口 -> 校验文件 -> 校验成功 -> 复位 -> 进入loader进行升级 -> 升级完毕,复位 -> 进入升级后的SDK

在进入loader进行升级前,任何错误都会导致升级退出,将错误的返回值返回到主流程。
而单备份升级,在进入loader升级后,旧SDK程序已经被破坏,无法再回到旧SDK。
此时若遇到断电等错误操作,可重新上电插卡(U盘)继续升级,直到升级成功会自行复位进入升级后的SDK。

下面分几部分进行介绍:


1.1. 单备份升级流程

  1. 使用对应的SD卡或者U盘升级需要先打开对应设备的宏。
    sd卡 由在app_modules.h里的 TFG_SD_EN 控制
    U盘 由在app_config.h里的 TCFG_UDISK_ENABLE 控制
  2. 设备升级需要使用到fat文件系统,默认AD14使用的是simple_fat文件系统即可。

  3. 调用对应的升级入口
    try_to_upgrade(对应的设备,升级文件的路径);
    在该升级入口里会打开对应的设备,查看对应路径下的升级文件.
    (用户可参考common_msg.c里的sd卡上线消息处理升级流程)
"升级入口"
  1. 校验文件,成功即进入升级,升级成功会自动复位。

"升级成功打印"

1.2. 单备份升级相关功能开关

单备份升级相关功能是在app_config.c里由const变量来控制。 分别是:

  1. const u8 dev_update_use_eeprom

    升级使用的区域:

    0:VM区域;
    1:eeprom区域;
    
  2. const u8 dev_update_keep_io_status;

    升级时是否保持住IO状态:

    0:不保持;
    1:保持;
    
  3. const u8 dev_update_power_io;

    升级时使用到的电源IO:

    -1:没有;
    任意IO(如IO_PORTA_01)
    
  4. const u8 ufw_vid_need_to_be_different;

    升级文件的vid要求:

    0:升级文件的vid要和原SDK相同
    1:升级文件的vid与原SDK不一样;
    2:升级文件的vid > 当前SDK的vid
    3:升级文件的vid < 当前SDK的vid
    

1.3. 单备份升级相关函数接口

下面介绍升级相关函数接口。

1.3.1. u32 try_to_upgrade(char *dev_name, char *up_file_path)

升级入口。
会打开对应的设备,检查对应路径下的升级文件,校验成功后会进行复位进入loader进行升级。

参数:

1. dev_name:升级设备
    __UDISK0:U盘;
    __SD0_NANE:SD卡;
2. up_file_path:升级文件路径
    默认为"/update.ufw"
3. 返回值:
    0:成功
    有值:错误。

1.3.2. u32 check_ufw_file(char *dev_name, char *up_file_path);

检查升级文件,并不进行升级。

参数:

1. dev_name:升级设备
    __UDISK0:U盘;
    __SD0_NANE:SD卡;
2. up_file_path:升级文件路径
    默认为"/update.ufw"
3. 返回值:
    0:成功
    有值:错误。

1.3.3. u8 *user_get_ufw_vid(u8 *len);

获取升级文件的vid指针。
需要搭配check_ufw_file使用。

参数:

len:获取到的vid的长度(4个byte)
返回值:升级文件的vid。

1.3.4. u8 *user_get_flash_vid(u8 *len);

获取自身的vid。

参数:

len:获取到的vid的长度(4个byte)
返回值:自身的vid。