前言
像众多的ble供应商,沁恒的ble同样提供BLE协议栈与应用部分代码分离方式
适用芯片:
- CH577/CH578/CH579
优缺点
- 优点
- OTA时候不需要带协议升级,这样可以把应用做的很小,几十KB,甚至是几KB
- 在一些小资源的芯片上做OTA成为可能
- 可以不受官网的提供的lib文件限制,可以使用GCC去开发
- 缺点
- 协议不容易做升级(实现起来复杂)
- 烧录繁琐,需要多个hex文件合并后再烧录
准备工作
清楚认识不同芯片存储区域映射
芯片 | code flash地址映射 | RAM地址映射 | 备注 |
---|---|---|---|
CH577 | [0x0000,0x3e800)250KB | [0x20004000,0x20008000) 16KB | |
CH578 | [0x0000,0x28000)160KB | [0x20000000,0x20008000) 32KB | 前面16KB 休眠不保持 |
CH579 | [0x0000,0x20000)128KB | [0x20000000,0x20008000) 32KB | 前面16KB 休眠不保持 |
协议栈的FLASH存放存放位置,以及RAM需求地址(这里以CH579 EVT 1.9为例)
在CH579 SDK里的文件"CH57xBLE_ROM.H" (大概路径CH579EVT_1.9\EXAM\BLE\LIB) 分别对CH577/CH578/CH579进行了说明
- 不同的版本的,其flash/ram占用的起始地址,和大小可能会有所差异,依实际的sdk里面的说明为准
- code 对应codeflash 就是flash
- data 对应的是RAM
- 这里的 RAM只给了起始地址大小受到config.h 文件里的宏约束:BLE_MEMHEAP_SIZE
* File Name : CH57xBLE_ROM.H
* Author : WCH
* Version : V1.44
* Date : 2020/04/11
* Description : head file
* Address Space CH579
* CODE: 00026800H - 0003E7FFH 96K
* DATA: 20003800H -
* Address Space CH578
* CODE: 00010000H - 00027FFFH 96K
* DATA: 20003800H -
* Address Space CH577
* CODE: 00008000H - 0001FFFFH 96K
* DATA: 20004000H -
实现
修改工程
RAM地址配置
比如对于CH579的keil工程中这样配置:
上面从0x20003800 - 0x20006000 给协议栈空出来,我们不能用
config.h 中 BLE_MEMHEAP_SIZE 为(1024*10)
- IRAM1 START:0x20000000 SIZE:0x3800(如果不用低功耗)
- IRAM2 START:0x20006000 SIZE:0x2000
FLASH地址配置
对于CH579的keil工程中这样配置
- IROM1 START:0X0 SIZE:0X26800
工程的宏配置
需要在加上全局的宏定义 CH57xBLE_ROM
:
代码修改
- 修改main函数中定义的 协议栈用到的的内存区域(针对不同芯片编译的协议栈其起始地址不尽相同,根据上面头文件的注释进行修改):
__align(4) u32 MEM_BUF[BLE_MEMHEAP_SIZE/4] __attribute__((at(0x20003800)));
- CH577/CH578/CH579 分别提供了三个不同的单独协议栈文件,其起始地址各不相同,不同的起始地址对应不同的宏,在config.h文件中,修改CHIP_ID的定义:
#define ID_CH577 0x77
#define ID_CH578 0x78
#define ID_CH579 0x79
#define CHIP_ID ID_CH579
编译
如果上述修改无误后,编译出来的固件应该是很小的,一般的example 在10多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
2,通过keil 里面直接烧录
3,通过j-flash烧录
参考文章:使用J-flash 读写CH32F10x/CH578/CH579等WCH芯片