CC3200学习笔记04-OTA详解

CC3200 BootloaderOTA_Update Note.pdf

首先建议大家看一下这个文章大概了解下 SPI Flash中的文件结构;

首先要实现OTA,和通常下载程序时是不一样的;

    先说一下通常下载程序时,我们只需要一个编译后的.bin文件,如下图的freertos.bin,这个就是用户的程序,下载成功后会在SPI Flash的/sys/目录下中生成一个名为mcuimg.bin ;重启设备后系统默认运行mcuimg.bin;

CC3200学习笔记04-OTA详解_第1张图片

 

咱们在看一下有OTA功能的SPI Flash中的文件结构

CC3200学习笔记04-OTA详解_第2张图片

(2.1) /sys/mcuimg.bin 
    使用CCS UniFlash烧录的文件
    系统运行后首先执行的IMG文件,这个文件是用户编写的bootloader(其实也可以说是用户代码), 
    bootloader会根据文件"/sys/mcubootinfo.bin"的内容跳转到/sys/mcuimg1.bin, /sys/mcuimg2.bin, /sys/mcuimg3.bin中的某一个运行
(2.2) /sys/mcubootinfo.bin
    使用CCS UniFlash烧录代码时需要擦出除掉"/sys/mcubootinfo.bin"这个文件,将之前可能存储在Sflash的启动标志位清除
    所以正常烧录完程序后这个文件是没有,所以/sys/mcuimg.bin首次运行时会创建该文件,并检测Sflash中已存在的IMG文件,
    由于第一烧录时只存在/sys/mcuimg1.bin, 所以会跳转到/sys/mcuimg1.bin运行
(2.3) /sys/mcuimg1.bin 
    使用CCS UniFlash烧录的文件
    这个是认为是系统的出厂IMG, 系统初次启动后最终会运行该文件, 
    初次升级时会将升级文件存放为/sys/mcuimg2.bin,再次升级时会将升级文件存放为/sys/mcuimg3.bin, 
    依次类推,之后的升级都会在/sys/mcuimg2.bin与/sys/mcuimg3.bin两个文件中来回替换,
(2.4)/sys/mcuimg2.bin,/sys/mcuimg3.bin
    这两个文件初始时是没有的,随着系统的升级被创建
 

如何实现的OTA呢,在 C:\TI\CC3200SDK_1.1.0\cc3200-sdk\example\目录下有一个application_bootloader的工程,实现OTA需要这个工程生成的 application_bootloader.bin 文件;

    在这之前讲解一下mcubootinfo.bin文件,这个文件决定设备复位后运行哪个bin文件,这个文件中保存了一个结构体;

typedef struct sBootInfo
    _u8  ucActiveImg;
    _u32 ulImgStatus; 
}sBootInfo_t;

ucActiveImg取值:IMG_ACT_FACTORY, IMG_ACT_USER1, IMG_ACT_USER2
ulImgStatus取值:IMG_STATUS_TESTING, IMG_STATUS_TESTREADY, IMG_STATUS_NOTEST

CC3200学习笔记04-OTA详解_第3张图片

    系统上电后首先运行 application_bootloader.bin; 先说一下这个程序的工作流程图,

1, 读取 "/sys/mcubootinfo.bin" 文件, 假如没有的话跳转到2, 否则跳转到4
2, 创建 "/sys/mcubootinfo.bin" 文件, 跳转到3
3, 检测 spi flash 中已存在的IMG文件, 优先级为 /sys/mcuimg1.bin > /sys/mcuimg2.bin > /sys/mcuimg3.bin 并写入"/sys/mcubootinfo.bin", 跳转到4
4, 加载, 执行【ucActiveImg这个参数】指定的IMG文件,

总结一点来说,就是系统上点后运行application_bootloader.bin,这个文件读取/sys/mcubootinfo.bin中的参数决定加载Flash中的哪一个镜像文件【/sys/mcuimg1.bin;/sys/mcuimg2.bin ;/sys/mcuimg3.bin 这3个文件中选择一个加载】

带OTA功能下载

CC3200学习笔记04-OTA详解_第4张图片

CC3200学习笔记04-OTA详解_第5张图片

 

你可能感兴趣的:(CC3200,OTA)