CC3200 BootloaderOTA_Update Note.pdf
首先建议大家看一下这个文章大概了解下 SPI Flash中的文件结构;
首先要实现OTA,和通常下载程序时是不一样的;
先说一下通常下载程序时,我们只需要一个编译后的.bin文件,如下图的freertos.bin,这个就是用户的程序,下载成功后会在SPI Flash的/sys/目录下中生成一个名为mcuimg.bin ;重启设备后系统默认运行mcuimg.bin;
咱们在看一下有OTA功能的SPI Flash中的文件结构
(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
系统上电后首先运行 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功能下载