前言
像众多的ble供应商,沁恒的ble同样提供BLE协议栈与应用部分代码分离方式
适用芯片:
- CH573/CH571
适配SDK版本
SDK版本 | 支持情况 |
---|---|
CH573_EVT 1.2 | 支持 |
CH573_EVT 1.3 | 支持 |
CH573_EVT 1.4 | 支持 |
优缺点
- 优点
- OTA时候不需要带协议升级,这样可以把应用做的很小,几十KB,甚至是几KB
- 在一些小资源的芯片上做OTA成为可能
- 缺点
- 协议不容易做升级(实现起来复杂)
- 烧录繁琐,需要多个hex文件合并后再烧录
准备工作
清楚认识不同芯片存储区域映射
芯片 | code flash地址映射 | RAM地址映射 | 备注 |
---|---|---|---|
CH571 | [0x0000,0x30000) 192KB | [0x20003800,0x20008000) 18KB | |
CH573 | [0x0000,0x70000) 448KB | [0x20003800,0x20008000) 18KB |
协议栈的FLASH存放存放位置,以及RAM需求地址
- FLASH: 0X10000-0x30000,从芯片flash的64KB开始,长度共128KB
- RAM: 0x20003800-0x20004800,从ram的0地址起始,前面4KB 固定空出来
- 不同的版本的,起flash/ram占用的起始地址,和大小可能会有所差异,依实际的sdk里面的说明为准
另外:0x20004800 以后需要仍然需要分配一个RAM区域给协议栈用,我们可以直接声明一个数组数组即可,按照工程默认设置即可
修改工程
修改宏
把宏"CH57xBLE_ROM"加到工程的全局宏里面:
替换文件
把工程中的Ld文件夹,Stratup文件夹移除,然后使用本blog 附件部分的对应文件夹替换.
RAM地址配置
RAM 在上面拷贝过来的Link.ld文件中修改
这里RAM对应的就是工程的RAM设置
其中0x20003800 开始的4K 需要固定为协议栈保留,我们空出来,
app部分直接从0x20004800 开始
实际上,这里要为协议栈空出MEM_BUF 的空间,跟ch579 中一样,默认程序中直接声明一个大数组,ble初始化时候传进去就好了,这里我们就不改了.
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 64K
RAM (xrw) : ORIGIN = 0x20004800, LENGTH = 14K
}
FLASH地址配置
同样是在上面拷贝过来的Link.ld文件中,FLASH 也是需要在这里定义,
这里由于库占用了64K-192K 的区域,(可以通过本blog 末提供的工具hexinfo.exe 来查看)
针对ch573 我们64K之前可以用,192K以后可以用
flash 的定义也是在
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 64K
RAM (xrw) : ORIGIN = 0x20004800, LENGTH = 14K
}
代码修改
无需修改
编译
编译后,固件大小一般在10KB左右
烧录
1,通过 wchisp工具烧录
(烧录教程见:https://www.cnblogs.com/iot-fan/p/13498088.html)
wchisp烧录建议合并后再烧录,
使用附件提供的工具 mergehex.exe 把编译出的app固件跟协议栈固件合并后,再通过wch_isp工具进行烧录
合并
mergehex.exe -m app.hex CH579BLE_ROM.hex -o all.hex