上文ch5xx 固定库配置方式 我们介绍了固定库的基本用法,本文则进一步讲解如何配置和使用不同起始地址的固定库。

一、固定库地址选择

官方提供了四种不同起始地址的固定库,相关定义可在 ROM.h 注释中找到。起始地址及适用场景如下:

 
协议栈文件 起始地址 大小 适用芯片 应用限制 备注
CH59xBLE_ROM.hex 0x00010000 (64K) 192K CH592 (448K Flash) APP ≤ 64K,OTA需预留IAP空间 默认版本,不适用CH591
CH59xBLE_ROMx.hex 0x00040000 (256K) 192K CH592 (448K Flash) APP ≤ 256K,OTA需预留IAP空间 不适用CH591
CH59xBLE_ROM_MESH.hex 0x0004E000 (312K) 136K CH592 (448K Flash) APP ≤ 312K,OTA需预留IAP空间 仅支持蓝牙从机模式
CH59xBLE_ROM_PERI.hex 0x0000C000 (48K) 136K CH591 (192K Flash) APP ≤ 48K,OTA需预留IAP空间 仅支持蓝牙从机模式

说明:不同型号芯片提供的 ROM 库可在 LIB 文件的 ROM.h 注释中查询。


二、配置步骤详解

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

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

Link.ld 文件定义了各个存储区域的起始地址与占用空间。使用固定库时协议栈被放置于Flash的高地址区域,因此需要相应调整应用程序(APP)区域的起始地址与占用空间。

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

MEMORY
{
    FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256K   /* APP起始地址与长度,此处示例为256K */
    RAM (xrw)  : ORIGIN = 0x20002000, LENGTH = 18K    /* 0x20000000~0x20002000预留给协议栈 */
}

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

启动文件(startup_CH592.S)在使用固定库时需要配置跳转目标地址,使其跳转至固定库所在的起始地址。修改汇编跳转指令如下:

    la t0, main
    csrw mepc, t0

    j 0x40000          /* 此处修改为所选协议栈的起始地址 */

步骤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_ADDRESSS=0x00040000

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

完成上述四项配置后,重新编译工程,便可实现0x40000地址的固定库。

三、各版本配置参数速查

为方便切换,不同协议栈对应的关键配置值汇总如下:

协议栈文件 LIB_FLASH_BASE_ADDRESSS 启动文件跳转地址 链接脚本中 FLASH 建议配置
CH59xBLE_ROM.hex 0x00010000 j 0x10000 LENGTH = 64K
CH59xBLE_ROMx.hex 0x00040000 j 0x40000 LENGTH = 256K
CH59xBLE_ROM_MESH.hex 0x0004E000 j 0x4E000 LENGTH = 312K
CH59xBLE_ROM_PERI.hex 0x0000C000 j 0xC000 LENGTH = 48K

说明:链接脚本中 FLASH 的 LENGTH 应设置为协议栈起始地址对应的偏移量(即应用程序可占用的最大空间),但需注意最终不超过芯片总Flash容量,且OTA场景需额外预留IAP分区。

 

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