FOTA工程说明

例程路径:例程路径:<install_file>\examples\ble\fota

一、工程以及使用说明:

​ fota工程是为了实现ota功能的最小单位,用户无需修改工程中的代码。fota工程所实现的具体流程可以参考ble_fota_server工程。

​ 在用户的ota功能实现中,当新旧两个app代码之和大于用户可用的flash存储空间时,就需要通过前台OTA的方式来实现固件升级,fota就是为了该功能而存在:fota也是一份应用代码,只为实现占用小的空间来实现ota功能,和普通用户代码的区别在于可以通过链接脚本来指定加载地址而不和用户的app代码冲突。

​ 由于fota中包含只包含了ota相关的功能,所以fota代码所占用的空间只有40KB左右(不同编译器和编译优化等级编译出的固件大小会有差异),以le5010芯片为例,参考其flash布局,给予用户的app区大小为288KB ,默认分配给fota代码的起始地址到TinyFS Data Storage区域的大小为48KB,通过fota就可以实现240KB内的app代码的升级:老的应用代码通过ota的方式将fota的代码program到指定的地址(默认地址0x18070000),后通过reboot将PC指针跳转到fota工程中,此时执行fota的代码,新的用户代码可以再次通过ota的方式覆盖原先的代码,当新的用户app代码被加载到指定区域后,再次调用reboot,重新将PC指针指向用户新的app代码,运行新的用户程序,此时fota的代码就可以被擦除了。具体流程参照LE5010 OTA应用说明

二、FOTA代码加载地址配置

fota代码的加载地址通过链接脚本来指定

在fota工程目录下,有文件名为compiler,在此文件下有3个对应的编译器名称的子文件夹,对应着3个不同的链接脚本文件(single_bank_fota_link.txt):

  • ​ armcc:修改以下内容可以实现,默认地址为0x18070000

#define FLASH_BASE_USER 0x18070000

  • ​ gun(gcc):修改以下内容可以实现,默认地址为0x18070000

FLASH (rx) : ORIGIN = 0x18070000, LENGTH = 0x40000

  • ​ iar:修改以下内容可以实现,默认地址为0x18070000

define region FLASH = mem: [from 0x18070000 to 0x18080000];

​ 用户一般不需要修改该地址,只有当进行协议栈ota时,需要重新对fota的地址进行分配。

需要注意的两个点: 1.必须确保所编译出的文件大小在指定范围内,不会覆盖其他flash分区的内容。已知的一个问题就是iar最小编译优化等级所编译的文件超过了48KB,在默认加载地址为0x18070000的情况下,ota后将会擦写后边TinyFS Data Storage区域的代码,造成程序异常hardfault。2.用户ota时必须将代码program到链接脚本中指定加载地址上,否则fota程序不能正常运行。

​ 用户编译得到所需要的文件fota.ota.bin,该文件只包含了fota的应用代码,同时需要确保fota所对应的协议栈版本即sdk版本与原先flash中的固件版本所一致,否则代码无法正常运行。