前言


像众多的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.9EXAMBLELIB) 分别对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芯片

附件

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/iot-fan/p/14327272.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!