微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI WIFI设计交流 > CC3200 OTA升级,按照那个OTA Update A,它那个get filesystem信息是怎么样的?

CC3200 OTA升级,按照那个OTA Update A,它那个get filesystem信息是怎么样的?

时间:10-02 整理:3721RD 点击:

Uniflash的List File System会列举出所有的SPI Flash所有的文件,如果采用OTA的方式加载另一个Image B也会通过file list 列出。

关于OTA的一些笔记:

Bootloader Application Update Sequence

首先Spi_Flash中存储:

/sys/mcuimg .bin

/sys/mcubootinfo.bin

/sys/mcuimg1.bin

/sys/mcuimg2.bin

/sys/mcuimg3.bin

1、CC3200当上电的时候,会把内置ROM中的bootloader拷贝到0x2000 0000 ~ 0x2000 4000内

2、CC3200内置ROM的bootloader在RAM中运行,会/sys/mcuimg.bin(也就是本程序生成bootloader=relocator.bin+bootmgr.bin) 拷贝到0x2000 4000处,并从该地址执行程序

3、首先运行relocator.bin文件,relocator文件的功能就是把bootmgr.bin拷贝到0x2000 0000处,并接着跳到0x2000 0000处执行

4、CC3200从RAM的起始地址运行bootmgr.bin,在这个bin文件首先读取SPI_Flash的文件/sys/mcubootinfo.bin,根据事先存在  SPI_Flash中的标志位选择加载文件

5、选定加载文件后会把SPI_Flash存储的.bin文件拷贝到RAM 0x2000 4000之后,程序开始接着执行0x2000 4000 的App文件,完成bootloader任务!

6、在升级过程中mcuimg2/mcuimg3均失败时,程序可以退回到出厂固件mcuimg1中,否则仅退回到上一次固件版本中

关于bin文件

1、relocator,这个bin文件是sdk就提供的该文件的空间位置位于0x2000 4000

2、bootmgr.bin的空间位置是位于0x2000 0000

3、bootloader是上面两者的结合体,等于relocator + bootmgr,relocator 是在前面的, bootmgr在后面。

4、relocator 占据了0x100大小,上图为单个bin文件及合成后的大小

注意几点问题:

注意最后一个文件sys/mcubootinfo.bin在使用Uniflash下载程序中需要Erase,将之前可能存储在Sflash的启动标志位清除。

注意/sys/mcubootinfo.bin文件并未通过Uniflash事先下载,而是bootloader创建并保 存到SPI_Flash中,默认会写入启动出厂固件标志位

实际升级用户APP程序会在mcuimg2/mcuimg3中通过boot启动标志位进行选择

1、修改OTA.lib用于不同的云服务器—官方例程使用的Dropbox,可以修改为其他云服务器

2、周期性调用OTAUpdateTask() / FactoryResetTask()用户升级程序和出厂固件恢复程序

3、通过OTAUpdateTask() 连接到云服务器下载升级.bin文件,成功更新并重启CC3200系统 RebootMCU(); 程序进行二级bootloader选择boot启动最新更新的用户APP程序    

4、通过FactoryResetTask()恢复默认的出厂设置

5、注意在重启之前需要修改/sys/mcubootinfo.bin文件,选择重启后需要加载的boot文件

•注意该例程的OTA程序.a文件基于dropbox,且Dropbox使用了CDN内容分发网络,其实本质上跟普通的文件放在web服务器上基本一致,但在CDN内容分发网络中,这个文件可能存放到很多web服务器上,不同地方获取这个文件速度不同,缓解网络压力。

•国内客户可以采用http协议的方式直接从web服务器上下载文件,使用get方式,get方式可以获取网络上的所有资源,打开一个网页就是一个get请求,如果把APP_Updata.bin文件放到web服务器上,通过get的方式将该文件下载到CC3200中并转存到SPI_Flash中实现固件写入。

•注意由于web服务器不同,可能http的请求头不同,可以先用浏览器去下载这个文件,查找发出设么请求头,在移植到CC3200中。

•国内客户可以采用http协议的方式直接从web服务器上下载文件,使用get方式,get方式可以获取网络上的所有资源,打开一个网页就是一个get请求,如果把APP_Updata.bin文件放到web服务器上,通过get的方式将该文件下载到CC3200中并转存到SPI_Flash中实现固件写入。

  

你好,你这个所说的,国内的,通过get的方式下载:

比如说,这个URL:http://www.rainupdate.com/upfile/xmc/pro200.xmc (这个是我们公司现在的服务器,已经在使用,而且可以用GET方式下载了)

下载完成了之后,存储的SPI flash的/sys/mcuimg2.bin,重启单片机,这样子就可以了?

流程的细化以及调用的文件

                》通过TI 提供的http_client_demo 以GET的方式,获取文件。(可能通过安检触发或者另外MQTT消息触发)

                 》再用TI 提供的file_operations 的代码,调用 WriteFileToDevice(unsigned long *ulToken, long *lFileHandle)  函数,将数据写到

                  /sys/mcuimg2.bin 里面,这里的*lFileHandle等于这个/sys/mcuimg1.bin?还是什么,保存好了。关闭文件

                》 调用OTA NOTE.pdf里面的第五章节的一RebootMCU()函数,然后就完成了。

                以上是实际的应用处理过程,烧写相关文件,已经知道怎么烧写了,该烧写哪些文件,对应的哪些内容都知道,就是这个应用处理过程还是不是很懂。

/******************************************************************************
Image file names
*******************************************************************************/
#ifndef FAST_BOOT
#define IMG_BOOT_INFO "/sys/mcubootinfo.bin"
#define IMG_FACTORY_DEFAULT "/sys/mcuimg1.bin"
#define IMG_USER_1 "/sys/mcuimg2.bin"
#define IMG_USER_2 "/sys/mcuimg3.bin"
#else
#define IMG_BOOT_INFO "/sys/mcureserved.bin"
#define IMG_USER_1 "/sys/mcuimg.bin"
#define IMG_USER_2 "/sys/mcuflpatch.bin"
#endif

/******************************************************************************

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top