前言
像众多的ble供应商,沁恒的ble同样提供BLE协议栈与应用部分代码分离方式
适用芯片:
- CH573/CH571
- CH583/582 (CH581因FLASH太小不支持)
适配SDK版本
SDK版本 | 支持情况 |
---|---|
CH573_EVT 1.2 | 支持 |
CH573_EVT 1.3 | 支持 |
CH573_EVT 1.4 | 支持 |
CH573_EVT 1.5 | 支持 |
CH573_EVT 1.6 | 支持 |
CH573_EVT 1.7 | 支持 |
CH583_EVT 1.1 | 支持 |
CH583_EVT 1.2 | 支持 |
优缺点
- 优点
- OTA时候不需要带协议升级,这样可以把应用做的很小,几十KB,甚至是几KB
- 在一些小资源的芯片上做OTA成为可能
- 缺点
- 协议不容易做升级(实现起来复杂)
- 烧录繁琐,需要多个hex文件合并后再烧录. 但是如果写成处理脚本,似乎比图形化工具更为直接方便.
准备工作
清楚认识不同芯片存储区域映射
芯片 | code flash地址映射 | RAM地址映射 | 备注 |
---|---|---|---|
CH571 | [0x0000,0x30000) 192KB | [0x20003800,0x20008000) 18KB | |
CH573 | [0x0000,0x70000) 448KB | [0x20003800,0x20008000) 18KB | |
CH582/583 | [0x0000,0x70000) 448KB | [0x20000000,0x20008000) 32KB | 相对CH571/573的差异是RAM提升到了32K,并且全部都可以掉电保持,而功随便保持的电流降了不少 |
协议栈的FLASH存放存放位置,以及RAM需求地址,下面以CH573为例子,CH58x系列也大同小意
对于CH573协议的ROM在路径默认在SDK相对路径 CH573EVT_1.6\EXAM\BLE\LIB\ 如:
CH573EVT_1.6/EXAM/BLE/LIB/
├── CH57xBLE_LIB.h
├── CH57xBLE_ROM.h
├── CH57xBLE_ROM.hex
└── LIBCH57xBLE.a
- FLASH: 0X10000-0x30000,从芯片flash的64KB开始,长度要看具体的头文件说明
- RAM: 0x20003800-0x20004800,从ram的0地址起始,前面4KB 固定空出来
- 不同的版本的,起flash/ram占用的起始地址,和大小可能会有所差异,依实际的sdk里面的说明为准
另外:0x20004800 以后需要仍然需要分配一个RAM区域给协议栈用,我们可以直接声明一个数组数组即可,按照工程默认设置即可
修改工程
修改宏
把宏"CH57xBLE_ROM"加到工程的全局宏里面:
替换文件
把工程中的Ld文件夹,Stratup文件夹移除,拷贝WCH提供的SDK中EVT>EXAM>BLE>OnlyUpdateApp_Peripheral工程里的
LD文件夹和Startup文件夹到我们要修改的工程里
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
}
关于"CH5xxBLE_ROMx.hex"文件
后面更新的协议栈,多了个一个"CH5xxBLE_ROMx.hex"文件,这个和CH5xxBLE_ROM.hex的区别就是在flash中的位置不同,
当我们使用这个文件时候,我们需要额外加入下列步骤:
- 加入宏定义"LIB_FLASH_BASE_ADDRESSS=0x40000",CH5xxBLE_ROMx.hex的起始地址是256KB
- 修改启动文件最后面的跳转地址为 "j 0x40000"
代码修改
无需修改
编译
编译后,基本功能的固件大小一般在几KB左右
烧录
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