CYPRESS BLE OTA详细介绍

CYPRESS BLE OTA详细介绍

1     原理介绍

CYPRESS BLE OTA原理,相当于在一个内存空间里运行了两套软件代码,Bootloader代码和Bootloadable代码。

两者之间的关系,Bootloader是一套可以用来给Bootloadable进行升级的软件。

Bootloader通常是固定不变的,只负责升级功能;而Bootloadable相当于一个添加了Bootloadable功能应用程序,而可以通过OTA方式烧写到设备中。

CYPRESS BLE OTA可以支持三种方式的升级,分别为:使用外部存储设备OTA升级,固定协议栈OTA升级,可升级协议栈OTA升级,三种方式分别有不同的优缺点。

方式

流程

优点

缺点

使用外部存储设备OTA升级

芯片空间被分为Bootloader空间和Bootloadable空间,Bootloadable通过BLE接收新的数据,用I2C总线存储到外部存储中,Bootloader用I2C总线读取外部存储复制到Bootloadable空间

l  BLE协议栈和应用程序可以被同时升级

l  固件升级风险低,因为Bootloader和Bootloadable没有共享存储空间

l  需要一个外部存储,增加BOM

l  升级时间长,因为需要接收和读写外部存储

l  Bootloader和Bootloadable都需要I2C功能,增加了芯片内部FLASH消耗

固定栈区OTA升级

芯片空间被分为Bootloader空间和Bootloadable空间,Bootloader空间包含BLE协议栈,通过BLE接收新数据,直接给Bootloadable空间进行升级

l  BLE协议栈被Bootloader和Bootloadable复用,节省芯片内部FLASH空间

l  由于Bootloadable应用不需要包含BLE协议栈,并且数据被直接写入Bootloadable空间,所以升级速度快

l  不需要外部存储,不会增加BOM

l  即使Bootloadable应用被损坏,也可以通过升级功能修复回来

l  BLE协议栈是Bootloader工程的一部分,所有不能通过OTA方式升级

可升级栈区OTA升级

芯片空间被分为一个Bootloader空间,一个包含BLE协议栈的Bootloadable空间,一个包含用户应用的Bootloadable空间,升级时,先升级BLE协议栈,再升级用户应用

l  可以灵活地升级BLE协议栈和用户应用

l  复用BLE协议栈,所以相当于减少了FLASH消耗

l  更新的数据被直接写入FLASH,节省升级时间

l  不需要外部存储,不会增加BOM

l  芯片需要更大的FLASH空间,因为需要一个临时空间存储另一份BLE协议栈

2     操作流程

根据项目的实际情况,我们选择固定栈区OTA升级试。

下面的操作流程,实现了将一个独立的应用程序工程改造为一个可以通过OTA升级的Bootloadable工程。(以下操作是运行在CY8CKIT-042-BLE 开发板上)

1)      在PSOC Creater中打开官方例程BLE_Shared_Memory_Bootloader,同时建立一新的workspace:BLE_Shared_Memory_Bootloader01

2)      在当前workspace中添加官方例程BLE_Shared_Memory_Bootloadable

3)      将用户自己的工程如:BL1001-base复制并添加到workspace文件夹中

4)      将BLE_Shared_Memory_Bootloadable01工程文件夹中的LinkerScripts文件夹复制到BL1001-base工程根目录

5)      将BLE_Shared_Memory_Bootloadable01工程文件夹中SharedBleHeader.h、SharedProjectAPI.h、BtldrSramInit.c头复制到BL1001-base工程根目录

6)      在BL1001-base工程中添加文件SharedBleHeader.h、SharedProjectAPI.h、BtldrSramInit.c,在main()函数最开始添加代码:

#if !defined(__ARMCC_VERSION)

   InitializeBootloaderSRAM();

#endif

7)      导出BL1001-base工程BLE组件的配置信息,保存为一个后缀名为xml(如:CYBLE_Configuration.ble.xml)配置文件,然后删掉BLE组件

8)      在BLE_Shared_Memory_Bootloader工程中的BLE组件导入上一步中保存的配置文件

9)      在BLE_Shared_Memory_Bootloader工程中的BLE组件中添加bootloader服务,修改bootloader->command->data值为137

10)   在BL1001-base工程中添加LinkerScirpts文件夹,同时添加文件夹内的文件cm0gcc.ld、Cm0Iar.icf、Cm0Mdk.scat

11)   修改BL1001-base工程Build Settings->Toolchain为ARM GCC4.8.4

12)   添加BL1001-base->ARM GCC 4.8.4->Linker->General->AdditionalLibrary Directorties 属性路径“.\LinkerScripts”

13)   添加BL1001-base->ARM GCC 4.8.4->Linker->General->CustomLinker Script 属性“.\LinkerScripts\cm0gcc.ld

14)   修改BL1001-base->ARM GCC 4.8.4->Linker->Optimization属性为FALSE

15)   修改BLE_Shared_Memory_Bootloader工程中的mk.bat文件,修改项如下:

16) set LOADER_PRJ_NAME=BLE_Shared_Memory_Bootloader01:此处应为Bootloader工程名称

17) set LOADABLE_PRJ_NAME=BL1001-base:此处应为Bootloadable(即用户工程)名称

18) set UTILS_NM=c:\ProgramFiles (x86)\Cypress\PSoC Creator\3.2\PSoCCreator\import\gnu\arm\4.8.4\bin\arm-none-eabi-nm.exe:此处应为PSOC Creater实际安装目录相对应

19)   运行BLE_Shared_Memory_Bootloader工程中mk.bat批处理文件,确认以下生成信息

Parsing ELFfile...

Filteringexported symbols ...

Filtering bysection list ...

Sorting byaddress ...

Generatingoutput file(s) ...

请按任意键继续. . .

如果出现错误信息,按信息提示修改为正确的配置

20)   编译整个工作空间,如果出现编译错误,修改相应的错误项

21)   在BL1001-base工程TopDesign.cysch文件中添加组件Bootloadable,双击组件,打开属性界面,在Dependencies选项卡中,第一栏Browse框选中..\BLE_Shared_Memory_Bootloader01.cydsn\CortexM0\ARM_GCC_484\Debug\BLE_Shared_Memory_Bootloader01.hex,第二栏Browse选中..\BLE_Shared_Memory_Bootloader01.cydsn\CortexM0\ARM_GCC_484\Debug\BLE_Shared_Memory_Bootloader01.elf

22)   编译整个工作空间,如果出现编译错误,修改相应的错误项

23)   在BL1001-base工程中的BL1001-base.cydsn\CortexM0\ARM_GCC_484\Debug\BL1001-base.cyacd文件,即为可以发布的升级文件

3     应用开发要注意的事项

1)      用户应用程序中必需有进入Bootloader的入口,即在指定的条件下调用Bootloadable_Load()函数进入Bootloader,如:例程中的进入方式是按下SW2按键。

2)      用户应用开发时可以按正常的开发流程,但修改为Bootloadable工程时,需要将工程里的ble组件删掉,同时在头文件里声明用到的BLE接口API和BLE数据类型及定义

3)      对Bootloader工程进行修改后,必需重新运行一次mk.bat文件,否则可能会导致升级后的Bootloadable工程无法运行

4     手机APP

参照官方CySmart APP源代码,调用手机BLEOTA功能将升级文件发送到蓝牙设备

 

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页