iot-fan

联系: iotfan123#163.com
注意:
1,本博客之内容来源于网上收集以及相关技术人员提供,如果有侵犯到您的权益,请电邮我沟通;
2,本博客之内容乃分享,交流,学习,研究之目的,作者不对内容的真实性,有效性,及时性负责,也不对因本博客的任何内容导致的任何后果负责;
3,本博客之内容禁止转发到CSDN网站,转到别的网站请保留出处.

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

前言


像众多的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

附件

posted on 2021-01-27 19:10  iot-fan  阅读(2889)  评论(2编辑  收藏  举报