上文我们介绍了固定库的基本用法,本文则进一步讲解如何配置和使用不同起始地址的固定库。
一、固定库地址选择
官方提供了四种不同起始地址的固定库,相关定义可在 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注释中查询。
二、通用配置步骤(四步法)
以下配置以 CH59xBLE_ROMx.hex(起始地址 0x00040000)为例,其余版本只需替换对应的起始地址即可。为保持一致性,必须先复制粘贴 OnlyUpdateApp_Peripheral 例程中的Link.ld和Startup.s文件,然后再按需修改:
步骤1:修改链接脚本(Link.ld)
链接脚本定义了各存储区域的起始地址与大小。采用固定库方案时,协议栈存放于Flash高地址区,需相应调整APP的起始地址和大小。
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 256K /* APP起始地址与长度,此处示例为256K */
RAM (xrw) : ORIGIN = 0x20002000, LENGTH = 18K /* 0x20000000~0x20002000预留给协议栈 */
}
步骤2:修改启动文件(Startup.s)
启动文件需修改跳转目标地址,使其指向固定库的起始地址。
la t0, main
csrw mepc, t0
j 0x40000 /* 此处修改为所选协议栈的起始地址 */
步骤3:添加固定库使能宏定义
在工程预处理宏定义中添加 CH59xBLE_ROM=1,告知编译器使用固化协议栈而非源码库。该宏会引导 CONFIG.h 包含 CH59xBLE_ROM.h(而非 CH59xBLE_LIB.h)。
注意:工程中所有包含协议栈头文件的地方,务必使用条件编译写法,严禁直接
#include "CH59xBLE_LIB.h":#ifdef CH59xBLE_ROM #include "CH59xBLE_ROM.h" #else #include "CH59xBLE_LIB.h" #endif
步骤4:添加固定库地址宏定义
在预处理宏中增加 LIB_FLASH_BASE_ADDRESS=0x00040000,使编译系统明确协议栈固件的Flash位置,该值需与启动文件中的跳转地址保持一致。
三、各版本配置参数速查
为方便切换,不同协议栈对应的关键配置值汇总如下:
| 协议栈文件 | LIB_FLASH_BASE_ADDRESS |
启动文件跳转地址 | 链接脚本中 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分区。
浙公网安备 33010602011771号