CH579/CH578/CH577/CH57x應用與協議棧分離方式實現


前言


像眾多的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 :

代碼修改

  1. 修改main函數中定義的 協議棧用到的的內存區域(針對不同芯片編譯的協議棧其起始地址不盡相同,根據上面頭文件的注釋進行修改):
__align(4) u32 MEM_BUF[BLE_MEMHEAP_SIZE/4] __attribute__((at(0x20003800)));
  1. 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 里面直接燒錄

參考文章:CH579M/578M使用SWD下載和仿真

3,通過j-flash燒錄

參考文章:使用J-flash 讀寫CH32F10x/CH578/CH579等WCH芯片

附件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM