基于 CH592 Peripheral 例程的固定库配置方式

一、概述

以 CH592 EVT BLE目录下的Peripheral从机例程为例,该例程默认采用“蓝牙协议栈与应用程序混合编译”的方式,整体固件体积约为 150 KB。当使用固定库方式后,协议栈部分被固化于芯片指定Flash区域,应用程序本身仅需约 20 KB 的存储空间。

采用该方案的主要优势在于显著缩减了应用程序固件体积,从而有效提升OTA升级速度、缩短升级窗口期,并降低因升级过程中连接超时或中断所导致的升级失败风险。

但其局限性同样明显:由于协议栈与应用程序分离,无法随应用程序一同进行版本迭代与升级。

下面我们将以Peripheral例程为例,详细讲解下使用固定库的具体配置步骤。

二、配置步骤详解

整个配置过程分为以下四个步骤。为保持配置一致性,必须直接先复制粘贴OnlyUpdateApp_Peripheral例程中的Link.ld和Startup.s文件,然后再根据当前工程需求进行以下修改:

步骤1:修改链接脚本文件(Link.ld)

链接脚本(.ld文件)定义了各个存储区域的起始地址与大小。采用固定库方案时,协议栈被放置于Flash的高地址区域,因此需要相应调整应用程序(APP)区域的起始地址与可用长度。

以起始地址为0x00010000CH59xBLE_ROM.hex为例,修改后的MEMORY配置如下:

MEMORY
{
    FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 64K   /* APP起始地址与可用长度,与ROM起始地址对应 */
    RAM (xrw)  : ORIGIN = 0x20002000, LENGTH = 18K    /* 0x20000000~0x20002000预留给协议栈使用 */
}

说明:上述配置中,APP从Flash起始地址0x00000000开始,最大可用空间为64KB;固定协议栈则位于0x00010000及之后的地址区域。RAM空间起始地址调整为0x20002000,前8KB(0x20000000~0x20002000)预留给协议栈使用。

步骤2.:修改启动文件(Startup.s)

启动文件(startup_CH592.S)在固定库模式下需要跳转目标地址,使其跳转至协议栈固件所在的起始地址。

修改汇编跳转指令如下:

    la t0, main
    csrw mepc, t0

    j 0x10000          /* 跳转地址需与所选协议栈的起始地址保持一致 */

步骤3.:添加固定库使能宏定义

在工程的预处理宏定义中,需添加CH59xBLE_ROM=1,用于启用ROM版协议栈接口。该宏会引导CONFIG.h头文件包含CH59xBLE_ROM.h(而非CH59xBLE_LIB.h),从而调用固化的协议栈API。

此外,工程中所有包含协议栈头文件的地方,严禁直接包含 CH59xBLE_LIB.h,必须统一采用如下条件编译写法进行适配:

#ifdef CH59xBLE_ROM
#include "CH59xBLE_ROM.h"
#else
#include "CH59xBLE_LIB.h"
#endif

步骤4.:添加固定库地址宏定义

程序中需要添加固定库对应地址的宏定义,使编译系统明确协议栈固件在Flash中的具体位置。

在预处理宏中添加:

LIB_FLASH_BASE_ADDRESS=0x00010000

该值需与启动文件中的跳转地址(j 0x10000)以及所选协议栈文件的实际起始地址严格保持一致。

完成上述四项配置后,重新编译工程,便可实现固定库,此时生成的APP固件体积将显著缩减至约20KB左右。

三、功能验证

1. 烧录固件

使用ISP工具将编译生成的APP固件与对应的协议栈库文件(如CH59xBLE_ROM.hex)一起烧录至CH592F芯片中。

ScreenShot_2026-07-22_100211_700

2. 串口日志验证

通过串口工具查看打印信息,可观察到协议栈初始化成功,并正常扫描并打印周围发起扫描请求的主机设备MAC地址,日志输出如下:

CH59x_BLE_LIB_V1.4.4
Initialized..
Advertising..
Receive scan req from 70 f0 c6 c5 35 75  ..
Receive scan req from 9 fc 9d 81 87 4b  ..
Receive scan req from da 3 46 1c ca 64  ..
Receive scan req from 1e 99 62 33 b6 53  ..
Receive scan req from d8 61 d3 e2 99 6f  ..
Receive scan req from 82 28 f7 72 1b 45  ..
Receive scan req from 82 28 f7 72 1b 45  ..
Receive scan req from 4b 3f 1e c3 da 7e  ..
Receive scan req from be 6c ff 68 f5 63  ..
...

上述日志表明固定协议栈运行正常,使用固定库成功。

posted on 2026-07-22 10:09  WCH蓝牙应用分享  阅读(4)  评论(0)    收藏  举报