前言
像眾多的ble供應商,沁恆的ble同樣提供BLE協議棧與應用部分代碼分離方式
適用芯片:
- CH577/CH578/CH579
優缺點
- 優點
- OTA時候不需要帶協議升級,這樣可以把應用做的很小,幾十KB,甚至是幾KB
- 在一些小資源的芯片上做OTA成為可能
- 缺點
- 協議不容易做升級(實現起來復雜)
- 燒錄繁瑣,需要多個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芯片
