diff --git a/AGENTS.md b/AGENTS.md index 49e1ada..518324c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,20 +2,20 @@ ## 项目概述 -本仓库是基于国民技术(Nations)**N32WB031 BLE SoC** 的嵌入式固件工程集合。实际芯片型号 **N32WB031KEQ6-2**(Cortex-M0,64MHz HSI,**Flash 512KB**,RAM 48KB)。 +本仓库是基于国民技术(Nations)**N32WB031 BLE SoC** 的嵌入式固件工程集合。实际芯片型号 **N32WB031KEQ6-2**(Cortex-M0,64MHz HSI,**Flash 512KB**,RAM 48KB+16KB)。 当前活跃工程: - **`mcm-ddc-04/`** — 主工程(APP,链接在 APP1 bank `0x01008000`/224KB):UART(printf 重定向 + DMA 发送 + RX 中断)、CLI 命令框架(UART + BLE 双通道)、FreeRTOS 多任务、GPIO 点灯、BLE 协议栈(自定义 GATT 透传服务 CLS)、BLE OTA 双 bank 直写升级(见开发日志第 15/16 节、`docs/ble_protocol.md`)。 -- **`Boot/`** — 自写精简 bootloader(链接在 `0x01000000`/16KB):只做 bootsetting 裁决(magic + 自身 CRC32)选 bank + 向量表 sanity 检查后直跳;**镜像 CRC 在 OTA 升级过程中校验(app_ota.c OTA_END),Boot 跳转时不校验**(开发日志第 19 节)。 -- **`mcm-ddc-ble/`** — 独立 BLE 工程(基于 SDK rdtss 例程,链接在 `0x01000000`,无 bootloader/OTA):BLE↔USART1 透传 + FreeRTOS(BLE 调度任务 + LED1 点灯任务),睡眠已锁保 SWD。日志在 `mcm-ddc-ble/docs/开发日志.md`。 +- **`Boot/`** — 自写精简 bootloader(链接在 `0x01000000`/16KB):校验 bootsetting 自身完整性(magic + 结构体 CRC32)后按 active bank 的 `start_address` 直接跳转;**不校验镜像 CRC(在 OTA 升级过程中校验)**;记录无效或地址越界回退 APP1(开发日志第 19/21 节)。 +- **`mcm-ddc-ble/`** — 独立 BLE 工程(基于 SDK rdtss 例程 + FreeRTOS,睡眠已锁保 SWD):当前链接在 `0x01008000`/0x38000 作为 APP1,与 Boot 组成整包 `caiic_ble_full.*`;单跑时把 IROM1 改回 `0x01000000, 0x40000`。日志在 `mcm-ddc-ble/docs/开发日志.md`。 仓库顶层目录: - `mcm-ddc-04/` — 主工程(应用代码、MDK 工程文件、开发日志) -- `mcm-ddc-ble/` — 独立 BLE 工程(rdtss 蓝本 + FreeRTOS,0x01000000 直跑) +- `mcm-ddc-ble/` — 独立 BLE 工程(rdtss 蓝本 + FreeRTOS,APP1 链接形态) - `Boot/` — bootloader 工程(`src/main.c`、`dfu_layout.h`、`boot_crc32.c`;后两个被 APP 工程以相对路径 `..\..\Boot\src` 共用) -- `tools/` — 烧录包工具:`merge_image.py`(合并 boot+APP 为整片 hex/bin)、`make_package.bat`(一键构建+合并)、`flash_package.bat`(NSpyocd 整片烧录),产物在 `tools/out/` +- `tools/` — 烧录包工具:`merge_image.py`(合并 boot + bootsetting 缺省记录 + APP 为整片 hex/bin,支持 `merge_image.py [app_bin] [输出名]`)、`make_package.bat`(一键全量重建 `-r` + 合并)、`flash_package.bat`(NSpyocd 整片烧录),产物在 `tools/out/` - `nations-tec/` — 厂商资源:SDK V2.0.0、DFP 器件包、STB 开发板资料、官方 PDF 文档。**这些内容为只读参考资料,不要修改。** - `app/`、`docs/` — 顶层空目录,预留占位 @@ -31,7 +31,7 @@ mcm-ddc-04/ ├── app/ │ ├── main.c # 入口:VTOR 重映射 → USART 初始化+banner → LED 初始化 → app_ble_init → 建队列/任务/CLI → vTaskStartScheduler -│ ├── bsp_usart.c/.h # USART1 初始化(PB6/PB7,1000000 8N1)+ fputc 重定向('\n' 前自动补 '\r')+ DMA TX(CH1,轮询完成)+ RXDNE 中断字节队列 + TX 互斥锁 +│ ├── bsp_usart.c/.h # USART1 初始化(PB6/PB7,115200 8N1)+ fputc 重定向('\n' 前自动补 '\r')+ DMA TX(CH1,轮询完成)+ RXDNE 中断字节队列 + TX 互斥锁 │ ├── bsp_led.c/.h # LED1(PB0)/LED2(PA6) 初始化、on/off/toggle │ ├── app_tasks.c/.h # 3 个 FreeRTOS 任务 + 日志队列(生产者-消费者模型)+ 主动打印开关(默认关) │ ├── app_cli.c/.h # CLI UART 前端:CliTask 行接收/编辑/历史/Tab/Ctrl+Z,分行后交 cli_core 执行 @@ -57,7 +57,7 @@ mcm-ddc-04/ SDK 源码(固件库、CMSIS、FreeRTOS V9.0.0、BLE 协议栈/profile/ns_library、启动文件)通过相对路径 `..\..\nations-tec\N32WB03x_SDK_V2.0.0` 被 uvprojx 引用,**不复制进工程**。Bootloader 共享代码(`Boot/src/dfu_layout.h`、`boot_crc32.c`)经 `..\..\Boot\src` 引用。因此 `mcm-ddc-04` 目录不能脱离仓库根单独移动。 -工程配置:器件 `N32WB031KEQ6-2`(512KB Flash),IROM 0x01008000 / 0x38000(APP1 区,前 32KB 留给 Bootloader),IRAM 0x20000000 / 0xC000,MicroLIB,全局宏 `N32WB03X, USE_STDPERIPH_DRIVER`;链接器 Misc 附加 BLE ROM 符号表 `symbol_g15.obj`。 +工程配置:器件 `N32WB031KEQ6-2`(512KB Flash),IROM 0x01008000 / 0x38000(APP1 区,前 32KB 留给 Bootloader),**IRAM 0x20004000 / 0xC000**(低 16KB 保留给芯片 ROM/BLE,见下),MicroLIB,全局宏 `N32WB03X, USE_STDPERIPH_DRIVER`;链接器 Misc 附加 BLE ROM 符号表 `symbol_g15.obj`。 ## 构建与烧录 @@ -70,14 +70,14 @@ SDK 源码(固件库、CMSIS、FreeRTOS V9.0.0、BLE 协议栈/profile/ns_libr ``` 构建成功后自动执行 `fromelf --bin --output=.\bin\embeddedSrc.bin .\Objects\embeddedSrc.axf`。 -当前基线结果:**0 Error(s), 0 Warning(s)**,体积 `Code=37996 RO-data=6856 RW-data=10600 ZI-data=33056`(RW+ZI≈42.6KB < 48KB,heap 22KB)。 +当前基线结果:**0 Error(s), 0 Warning(s)**,体积 `Code=38348 RO-data=6932 RW-data=10600 ZI-data=36128`(RW+ZI≈45.7KB < 48KB 可用窗口,heap 22KB)。 烧录与运行: 1. Keil 打开 `MDK-ARM/embeddedSrc.uvprojx`,F7 编译 -2. NS-LINK 接 SWD(PA4/PA5),F8 下载——Boot 跳转不校验镜像 CRC 后,Keil 直接下载 APP 即可正常启动调试;工程调试配置挂了 `MDK-ARM/debug_app.ini`(强制 SP/PC 从 APP1 向量表取,跳过 Boot 旁路,可选) -3. 独立运行(脱调试器)需烧整片包:`tools\flash_package.bat tools\out\caiic_full.bin`(改代码后先 `make_package.bat` 重新出包)。**板子上烧过其他 0x01000000 起步的程序会覆盖 Boot/bootsetting,恢复靠重烧整片包** -4. 串口助手接 PB6(TX)/PB7(RX),**1000000** 8N1(1Mbps,APB2=64MHz 分频 4.0 零误差),复位后应看到启动 banner 与 `caiic->` CLI 提示符(输入 `help` 查看命令;LED 滚动日志默认关闭,用 `log on` 打开) +2. NS-LINK 接 SWD(PA4/PA5),F8 下载——Boot 跳转不校验镜像 CRC,Keil 直接下载 APP 即可正常启动调试;**但 Keil 下载选项必须是"Erase Sectors",整片擦除会杀掉 Boot**(杀掉后独立运行不启动,需重烧整片包恢复) +3. 独立运行(脱调试器)需烧整片包:`tools\flash_package.bat tools\out\caiic_full.hex`(改代码后先 `make_package.bat` 重新出包)。**板子上烧过其他 0x01000000 起步的程序会覆盖 Boot/bootsetting,恢复靠重烧整片包** +4. 串口助手接 PB6(TX)/PB7(RX),115200 8N1,复位后应看到启动 banner 与 `caiic->` CLI 提示符(输入 `help` 查看命令;LED 滚动日志默认关闭,用 `log on` 打开) 5. BLE:手机 nRF Connect 应能搜到并连接 `CAIIC-MCM`,可见自定义服务(写特征 + notify 特征) ## 硬件引脚约束(重要) @@ -99,6 +99,7 @@ SDK 源码(固件库、CMSIS、FreeRTOS V9.0.0、BLE 协议栈/profile/ns_libr ## BLE 架构约定(重要) +- **RAM 布局(铁律)**:本芯片 SRAM 为 48KB+16KB。**低 16KB(0x20000000~0x20003FFF)由芯片 ROM/BLE 子系统占用**(rwip 堆描述符 0x20000118 起、patch 数组、中断中继表,由 ROM 启动代码预备,全 SDK 无源码重写)。任何工程的 IRAM 执行区必须从 **0x20004000** 起(含 Boot 和任何小工具),否则启动时代的 .data/.bss 初始化会冲掉 ROM 数据,BLE init 必然 HardFault(实测根因,开发日志第 21 节)。 - **VTOR**:Cortex-M0 无 SCB->VTOR,向量重映射用 `PWR->VTOR_REG`(bit31=EN|[30:0]=基址)。规则:**BLE 初始化之前** VTOR 指向 APP 自身向量表(`0x80000000|0x01008000`,main 开头设置,USART1 RX 中断需要);**`ns_ble_stack_init()` 之后 VTOR 必须为 0**——此后所有中断经芯片 ROM 跳板 + RAM 中继(`ns_ble_stack_vtor_init` 把 APP 的 `__Vectors` 拷到 0x200000e8/0x200009c0 并把 BLE_FIFO/BLE_SLP/EXTI4_12 指向 ROM/RAM handler)。绝对不要在 app_ble_init() 后重设 VTOR,否则 BLE FIFO 中断落入 weak Default_Handler 死循环(实测崩溃根因,见开发日志第 18 节)。 - **BLE 调度任务**(`app/ble/app_ble.c`,栈 512 字,优先级 2):循环 `rwip_schedule(); vTaskDelay(1ms);`。**ke_msg/ke_timer 只允许在该任务上下文运行**(SDK 约束),不要在其他任务或中断里直接调用。 - BLE 中断向量不在 `n32wb03x_it.c` 定义:启动文件中 BLE_*IRQHandler 为 weak,真正 handler 由 `symbol_g15.obj`(ROM)+ SDK RAM 重映射(0x200000e8/0x200009c0)提供。BLE_SW/FIFO IRQ 优先级 0,其 ISR 内禁止调用 FreeRTOS FromISR API。 diff --git a/Boot/MDK-ARM/Listings/caiic_boot.map b/Boot/MDK-ARM/Listings/caiic_boot.map index f89562e..81ed7bc 100644 --- a/Boot/MDK-ARM/Listings/caiic_boot.map +++ b/Boot/MDK-ARM/Listings/caiic_boot.map @@ -32,7 +32,6 @@ Section Cross References system_n32wb03x.o(i.read_flash_ID) refers to system_n32wb03x.o(.constdata) for CMD_RDID system_n32wb03x.o(i.system_delay_n_10us) refers to system_n32wb03x.o(.emb_text) for system_delay_cycles main.o(i.main) refers to boot_crc32.o(i.caiic_crc32) for caiic_crc32 - main.o(i.main) refers to main.o(i.bank_vector_ok) for bank_vector_ok main.o(i.main) refers to main.o(i.jump_to_app) for jump_to_app entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry10a.o(.ARM.Collect$$$$0000000D) for __rt_final_cpp entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry11a.o(.ARM.Collect$$$$0000000F) for __rt_final_exit @@ -75,19 +74,19 @@ Image Symbol Table Symbol Name Value Ov Type Size Object(Section) ../clib/microlib/division.c 0x00000000 Number 0 uidiv.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8b.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8a.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE + ../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry5.o ABSOLUTE - ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE ../clib/microlib/string/memcpy.c 0x00000000 Number 0 memcpyb.o ABSOLUTE ../clib/microlib/string/memcpy.c 0x00000000 Number 0 memcpya.o ABSOLUTE ../clib/microlib/string/memset.c 0x00000000 Number 0 memseta.o ABSOLUTE @@ -127,17 +126,15 @@ Image Symbol Table i.__scatterload_zeroinit 0x010004d4 Section 14 handlers.o(i.__scatterload_zeroinit) i.__set_PRIMASK 0x010004e2 Section 0 system_n32wb03x.o(i.__set_PRIMASK) __set_PRIMASK 0x010004e3 Thumb Code 6 system_n32wb03x.o(i.__set_PRIMASK) - i.bank_vector_ok 0x010004e8 Section 0 main.o(i.bank_vector_ok) - bank_vector_ok 0x010004e9 Thumb Code 46 main.o(i.bank_vector_ok) - i.caiic_crc32 0x01000518 Section 0 boot_crc32.o(i.caiic_crc32) - i.jump_to_app 0x0100055c Section 0 main.o(i.jump_to_app) - jump_to_app 0x0100055d Thumb Code 30 main.o(i.jump_to_app) - i.main 0x01000580 Section 0 main.o(i.main) - i.read_flash_ID 0x010005c4 Section 0 system_n32wb03x.o(i.read_flash_ID) - read_flash_ID 0x010005c5 Thumb Code 62 system_n32wb03x.o(i.read_flash_ID) - .constdata 0x01000608 Section 472 system_n32wb03x.o(.constdata) - .bss 0x20000000 Section 52 system_n32wb03x.o(.bss) - STACK 0x20000038 Section 2048 startup_n32wb03x.o(STACK) + i.caiic_crc32 0x010004e8 Section 0 boot_crc32.o(i.caiic_crc32) + i.jump_to_app 0x0100052c Section 0 main.o(i.jump_to_app) + jump_to_app 0x0100052d Thumb Code 30 main.o(i.jump_to_app) + i.main 0x01000550 Section 0 main.o(i.main) + i.read_flash_ID 0x010005a4 Section 0 system_n32wb03x.o(i.read_flash_ID) + read_flash_ID 0x010005a5 Thumb Code 62 system_n32wb03x.o(i.read_flash_ID) + .constdata 0x010005e8 Section 472 system_n32wb03x.o(.constdata) + .bss 0x20004000 Section 52 system_n32wb03x.o(.bss) + STACK 0x20004038 Section 2048 startup_n32wb03x.o(STACK) Global Symbols @@ -223,14 +220,14 @@ Image Symbol Table __scatterload_copy 0x010004c5 Thumb Code 14 handlers.o(i.__scatterload_copy) __scatterload_null 0x010004d3 Thumb Code 2 handlers.o(i.__scatterload_null) __scatterload_zeroinit 0x010004d5 Thumb Code 14 handlers.o(i.__scatterload_zeroinit) - caiic_crc32 0x01000519 Thumb Code 62 boot_crc32.o(i.caiic_crc32) - main 0x01000581 Thumb Code 56 main.o(i.main) - TRIM_READ_CMD_CODE 0x01000608 Data 320 system_n32wb03x.o(.constdata) - CMD_RDID 0x01000748 Data 152 system_n32wb03x.o(.constdata) - Region$$Table$$Base 0x010007e0 Number 0 anon$$obj.o(Region$$Table) - Region$$Table$$Limit 0x010007f0 Number 0 anon$$obj.o(Region$$Table) - trim_stored 0x20000000 Data 52 system_n32wb03x.o(.bss) - __initial_sp 0x20000838 Data 0 startup_n32wb03x.o(STACK) + caiic_crc32 0x010004e9 Thumb Code 62 boot_crc32.o(i.caiic_crc32) + main 0x01000551 Thumb Code 72 main.o(i.main) + TRIM_READ_CMD_CODE 0x010005e8 Data 320 system_n32wb03x.o(.constdata) + CMD_RDID 0x01000728 Data 152 system_n32wb03x.o(.constdata) + Region$$Table$$Base 0x010007c0 Number 0 anon$$obj.o(Region$$Table) + Region$$Table$$Limit 0x010007d0 Number 0 anon$$obj.o(Region$$Table) + trim_stored 0x20004000 Data 52 system_n32wb03x.o(.bss) + __initial_sp 0x20004838 Data 0 startup_n32wb03x.o(STACK) @@ -240,54 +237,52 @@ Memory Map of the image Image Entry point : 0x010000c1 - Load Region LR_IROM1 (Base: 0x01000000, Size: 0x000007f0, Max: 0x00004000, ABSOLUTE) + Load Region LR_IROM1 (Base: 0x01000000, Size: 0x000007d0, Max: 0x00004000, ABSOLUTE) - Execution Region ER_IROM1 (Exec base: 0x01000000, Load base: 0x01000000, Size: 0x000007f0, Max: 0x00004000, ABSOLUTE) + Execution Region ER_IROM1 (Exec base: 0x01000000, Load base: 0x01000000, Size: 0x000007d0, Max: 0x00004000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object 0x01000000 0x01000000 0x000000c0 Data RO 3 RESET startup_n32wb03x.o - 0x010000c0 0x010000c0 0x00000000 Code RO 227 * .ARM.Collect$$$$00000000 mc_p.l(entry.o) - 0x010000c0 0x010000c0 0x00000004 Code RO 238 .ARM.Collect$$$$00000001 mc_p.l(entry2.o) - 0x010000c4 0x010000c4 0x00000004 Code RO 241 .ARM.Collect$$$$00000004 mc_p.l(entry5.o) - 0x010000c8 0x010000c8 0x00000000 Code RO 243 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o) - 0x010000c8 0x010000c8 0x00000000 Code RO 245 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o) - 0x010000c8 0x010000c8 0x00000008 Code RO 246 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o) - 0x010000d0 0x010000d0 0x00000000 Code RO 248 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o) - 0x010000d0 0x010000d0 0x00000000 Code RO 250 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o) - 0x010000d0 0x010000d0 0x00000004 Code RO 239 .ARM.Collect$$$$00002712 mc_p.l(entry2.o) + 0x010000c0 0x010000c0 0x00000000 Code RO 222 * .ARM.Collect$$$$00000000 mc_p.l(entry.o) + 0x010000c0 0x010000c0 0x00000004 Code RO 233 .ARM.Collect$$$$00000001 mc_p.l(entry2.o) + 0x010000c4 0x010000c4 0x00000004 Code RO 236 .ARM.Collect$$$$00000004 mc_p.l(entry5.o) + 0x010000c8 0x010000c8 0x00000000 Code RO 238 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o) + 0x010000c8 0x010000c8 0x00000000 Code RO 240 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o) + 0x010000c8 0x010000c8 0x00000008 Code RO 241 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o) + 0x010000d0 0x010000d0 0x00000000 Code RO 243 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o) + 0x010000d0 0x010000d0 0x00000000 Code RO 245 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o) + 0x010000d0 0x010000d0 0x00000004 Code RO 234 .ARM.Collect$$$$00002712 mc_p.l(entry2.o) 0x010000d4 0x010000d4 0x0000000e Code RO 10 .emb_text system_n32wb03x.o 0x010000e2 0x010000e2 0x00000002 PAD 0x010000e4 0x010000e4 0x0000001c Code RO 4 .text startup_n32wb03x.o - 0x01000100 0x01000100 0x0000002c Code RO 230 .text mc_p.l(uidiv.o) - 0x0100012c 0x0100012c 0x00000024 Code RO 232 .text mc_p.l(memcpya.o) - 0x01000150 0x01000150 0x00000024 Code RO 234 .text mc_p.l(memseta.o) - 0x01000174 0x01000174 0x00000024 Code RO 252 .text mc_p.l(init.o) + 0x01000100 0x01000100 0x0000002c Code RO 225 .text mc_p.l(uidiv.o) + 0x0100012c 0x0100012c 0x00000024 Code RO 227 .text mc_p.l(memcpya.o) + 0x01000150 0x01000150 0x00000024 Code RO 229 .text mc_p.l(memseta.o) + 0x01000174 0x01000174 0x00000024 Code RO 247 .text mc_p.l(init.o) 0x01000198 0x01000198 0x000000cc Code RO 11 i.OTPTrim_Read system_n32wb03x.o 0x01000264 0x01000264 0x00000130 Code RO 12 i.RCC_HsiCalib system_n32wb03x.o 0x01000394 0x01000394 0x0000011c Code RO 16 i.SystemInit system_n32wb03x.o 0x010004b0 0x010004b0 0x00000014 Code RO 18 i.SystemTrimValueRead system_n32wb03x.o - 0x010004c4 0x010004c4 0x0000000e Code RO 256 i.__scatterload_copy mc_p.l(handlers.o) - 0x010004d2 0x010004d2 0x00000002 Code RO 257 i.__scatterload_null mc_p.l(handlers.o) - 0x010004d4 0x010004d4 0x0000000e Code RO 258 i.__scatterload_zeroinit mc_p.l(handlers.o) + 0x010004c4 0x010004c4 0x0000000e Code RO 251 i.__scatterload_copy mc_p.l(handlers.o) + 0x010004d2 0x010004d2 0x00000002 Code RO 252 i.__scatterload_null mc_p.l(handlers.o) + 0x010004d4 0x010004d4 0x0000000e Code RO 253 i.__scatterload_zeroinit mc_p.l(handlers.o) 0x010004e2 0x010004e2 0x00000006 Code RO 19 i.__set_PRIMASK system_n32wb03x.o - 0x010004e8 0x010004e8 0x0000002e Code RO 174 i.bank_vector_ok main.o - 0x01000516 0x01000516 0x00000002 PAD - 0x01000518 0x01000518 0x00000044 Code RO 215 i.caiic_crc32 boot_crc32.o - 0x0100055c 0x0100055c 0x00000024 Code RO 175 i.jump_to_app main.o - 0x01000580 0x01000580 0x00000044 Code RO 176 i.main main.o - 0x010005c4 0x010005c4 0x00000044 Code RO 20 i.read_flash_ID system_n32wb03x.o - 0x01000608 0x01000608 0x000001d8 Data RO 23 .constdata system_n32wb03x.o - 0x010007e0 0x010007e0 0x00000010 Data RO 254 Region$$Table anon$$obj.o + 0x010004e8 0x010004e8 0x00000044 Code RO 210 i.caiic_crc32 boot_crc32.o + 0x0100052c 0x0100052c 0x00000024 Code RO 174 i.jump_to_app main.o + 0x01000550 0x01000550 0x00000054 Code RO 175 i.main main.o + 0x010005a4 0x010005a4 0x00000044 Code RO 20 i.read_flash_ID system_n32wb03x.o + 0x010005e8 0x010005e8 0x000001d8 Data RO 23 .constdata system_n32wb03x.o + 0x010007c0 0x010007c0 0x00000010 Data RO 249 Region$$Table anon$$obj.o - Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x010007f0, Size: 0x00000838, Max: 0x0000c000, ABSOLUTE) + Execution Region RW_IRAM1 (Exec base: 0x20004000, Load base: 0x010007d0, Size: 0x00000838, Max: 0x0000c000, ABSOLUTE) Exec Addr Load Addr Size Type Attr Idx E Section Name Object - 0x20000000 - 0x00000034 Zero RW 22 .bss system_n32wb03x.o - 0x20000034 0x010007f0 0x00000004 PAD - 0x20000038 - 0x00000800 Zero RW 1 STACK startup_n32wb03x.o + 0x20004000 - 0x00000034 Zero RW 22 .bss system_n32wb03x.o + 0x20004034 0x010007d0 0x00000004 PAD + 0x20004038 - 0x00000800 Zero RW 1 STACK startup_n32wb03x.o ============================================================================== @@ -298,14 +293,14 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug Object Name 68 6 0 0 0 874 boot_crc32.o - 150 18 0 0 0 4115 main.o + 120 18 0 0 0 3627 main.o 28 8 192 0 2048 744 startup_n32wb03x.o 900 60 472 0 52 95112 system_n32wb03x.o ---------------------------------------------------------------------- - 1150 92 680 0 2104 100845 Object Totals + 1118 92 680 0 2104 100357 Object Totals 0 0 16 0 0 0 (incl. Generated) - 4 0 0 0 4 0 (incl. Padding) + 2 0 0 0 4 0 (incl. Padding) ---------------------------------------------------------------------- @@ -345,15 +340,15 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug - 1352 108 680 0 2104 100761 Grand Totals - 1352 108 680 0 2104 100761 ELF Image Totals - 1352 108 680 0 0 0 ROM Totals + 1320 108 680 0 2104 100317 Grand Totals + 1320 108 680 0 2104 100317 ELF Image Totals + 1320 108 680 0 0 0 ROM Totals ============================================================================== - Total RO Size (Code + RO Data) 2032 ( 1.98kB) + Total RO Size (Code + RO Data) 2000 ( 1.95kB) Total RW Size (RW Data + ZI Data) 2104 ( 2.05kB) - Total ROM Size (Code + RO Data + RW Data) 2032 ( 1.98kB) + Total ROM Size (Code + RO Data + RW Data) 2000 ( 1.95kB) ============================================================================== diff --git a/Boot/MDK-ARM/Objects/boot_crc32.o b/Boot/MDK-ARM/Objects/boot_crc32.o index cceff18..77d064d 100644 Binary files a/Boot/MDK-ARM/Objects/boot_crc32.o and b/Boot/MDK-ARM/Objects/boot_crc32.o differ diff --git a/Boot/MDK-ARM/Objects/caiic_boot.axf b/Boot/MDK-ARM/Objects/caiic_boot.axf index cb63cde..fee5938 100644 Binary files a/Boot/MDK-ARM/Objects/caiic_boot.axf and b/Boot/MDK-ARM/Objects/caiic_boot.axf differ diff --git a/Boot/MDK-ARM/Objects/caiic_boot.build_log.htm b/Boot/MDK-ARM/Objects/caiic_boot.build_log.htm index 0bc79f4..eae9338 100644 --- a/Boot/MDK-ARM/Objects/caiic_boot.build_log.htm +++ b/Boot/MDK-ARM/Objects/caiic_boot.build_log.htm @@ -26,10 +26,13 @@ Project File Date: 09/02/2026

Output:

*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin' -Build target 'caiic_boot' +Rebuild target 'caiic_boot' +assembling startup_n32wb03x.s... +compiling boot_crc32.c... compiling main.c... +compiling system_n32wb03x.c... linking... -Program Size: Code=1352 RO-data=680 RW-data=0 ZI-data=2104 +Program Size: Code=1320 RO-data=680 RW-data=0 ZI-data=2104 FromELF: creating hex file... After Build - User command #1: fromelf --bin --output=.\bin\caiic_boot.bin .\Objects\caiic_boot.axf ".\Objects\caiic_boot.axf" - 0 Error(s), 0 Warning(s). @@ -45,7 +48,7 @@ Package Vendor: Nationstech D:\Keil_v5\Arm\Packs\Nationstech\N32WB03X_DFP\1.4.0\firmware\CMSIS\device

Collection of Component Files used:

-Build Time Elapsed: 00:00:00 +Build Time Elapsed: 00:00:01 diff --git a/Boot/MDK-ARM/Objects/caiic_boot.hex b/Boot/MDK-ARM/Objects/caiic_boot.hex index a4bf890..640b4a0 100644 --- a/Boot/MDK-ARM/Objects/caiic_boot.hex +++ b/Boot/MDK-ARM/Objects/caiic_boot.hex @@ -1,5 +1,5 @@ :020000040100F9 -:1000000038080020E5000001ED000001EF000001CC +:1000000038480020E5000001ED000001EF0000018C :1000100000000000000000000000000000000000E0 :10002000000000000000000000000000F1000001DE :100030000000000000000000F3000001F5000001D6 @@ -11,8 +11,8 @@ :10009000F7000001F7000001F7000001F700000180 :1000A000F7000001F7000001F7000001F700000170 :1000B000F7000001F7000001F7000001F700000160 -:1000C0000348854600F056F80048004781050001C6 -:1000D0003808002040BA7047C0BA70470138FDD1D7 +:1000C0000348854600F056F80048004751050001F6 +:1000D0003848002040BA7047C0BA70470138FDD197 :1000E000704700000448804704480047FEE7FEE7E9 :1000F000FEE7FEE7FEE7FEE795030001C100000111 :1001000030B50B46014600202022012409E00D46AF @@ -24,10 +24,10 @@ :10016000F6E710B513460A4604461946FFF7F0FFB6 :10017000204610BD064C0125064E05E0E36807CC7D :100180002B430C3C98471034B442F7D3FFF79CFF45 -:10019000E0070001F0070001F7B5D4B004460E46B1 +:10019000C0070001D0070001F7B5D4B004460E46F1 :1001A00000205390052052900025002700BFEFF358 :1001B00010800090FF21453101A8FFF7D0FF00F02B -:1001C00001FA05462448854218D1012000038442E3 +:1001C000F1F905462448854218D1012000038442F4 :1001D00002D1002053902AE001204003844202D142 :1001E0004011539023E003200003844203D10120F7 :1001F000400253901BE0529857B0F0BD174885421B @@ -37,7 +37,7 @@ :100230000137FF2241320A4901A8FFF777FF012069 :1002400000F04FF93146569A5398B84752900098AB :1002500000F047F95298CFE7C440130085601300BF -:1002600008060001F1B58AB0002009907D20C00089 +:10026000E8050001F1B58AB0002009907D20C000AA :1002700008900125AD020027002007907F200690FE :1002800040240026002005900390200102900020C9 :1002900001903E490A98884206D83D4800686102AC @@ -73,58 +73,56 @@ :100470000846006A0D490840054908620846006AB6 :100480000849C968090208430149086210BD000013 :1004900000100240007000400F0800001800020029 -:1004A00000100140000000200090D003FF00F8FF82 +:1004A00000100140004000200090D003FF00F8FF42 :1004B00070B504460D462A46214601200003FFF789 :1004C0006BFE70BD02E008C8121F08C1002AFAD1F5 :1004D00070477047002001E001C1121F002AFBD1C4 -:1004E000704780F31088704710B501460B68486864 -:1004F00042085200180C000401246407A04208D1ED -:100500008A4206D30720C0030818824201D2012084 -:1005100010BD0020FCE7000030B502460B4600216C -:10052000C94312E01078521C414000240BE04808F7 -:10053000CD07ED0F002D01D0074D00E000256840EC -:100540000146601CC4B2082CF1DB18465B1E002873 -:10055000E8D1C84330BD00002083B8ED044672B630 -:100560000120C007204305490863206880F30888FC -:1005700000BF6068804700BFFEE7000000700040D9 -:100580000D4C0E4D0E49206888420BD1202120468B -:10059000FFF7C2FF216A884204D16068022801D1B6 -:1005A0004125AD042846FFF79FFF002802D02846CA -:1005B000FFF7D4FF00BFFEE700400001008000010C -:1005C00011C011CA70B5D2B00024002500BFEFF3EE -:1005D00010800646FF21453101A8FFF7C0FD01ACA0 -:1005E00001349822074901A8FFF7A0FD0120FFF779 -:1005F00078FFA04705463046FFF773FF284652B004 -:1006000070BD00004807000140BA7047C0BA70478B -:100610000138FDD170470000F7B50325AD06286A03 -:1006200082B016460C46400840002862286A022123 -:1006300008432862286A8007FCD466206860012786 -:100640002F61A86AC005FCD5992068602F61A86A4F -:10065000C005FCD5FF209130FFF7DAFFFF230133FF -:10066000AB626846EF60352169602F61A96AC905F0 -:10067000FCD5AB62A969EF60C9B205226A602F613F -:10068000AA6AD205FCD5AB62AA690902D2B21143AB -:100690000180C80702D0032005B0F0BDAB626869D5 -:1006A000FF210831884368616869C91E0843686191 -:1006B00002980002483068600820A860EE602F6150 -:1006C000A86AC005FCD5FF200130A8620023F61CF3 -:1006D000B0080ED0B2081148006899006054060AAC -:1006E00009194E70060C000E8E705B1CC8709A4281 -:1006F000F1D8FF200130A8626869FF2108318843E2 -:100700006861686938436861286A800880002862E7 -:10071000286A38432862002005B0F0BD8000000C34 -:10072000032080064169FF220832914341614269FA -:1007300001210A434261026A920892000262026A3F -:100740000A43026270470000002003218906096AFB -:10075000490849000322920611621146096A0222E1 -:10076000114303229206116200BF03218906096A20 -:10077000022211400229F8D0D1010322920691628F -:100780000321D1609F2151600121116100BF03212C -:100790008906896AFF22013211409142F7D1032272 -:1007A00092069162114688694969FF220832914395 -:1007B0000322920651611146496901221143032225 -:1007C000920651611146096A890889001162114631 -:1007D000096A012211430322920611627047000048 -:1007E000F00700010000002038080000D4040001D8 +:1004E000704780F31088704730B502460B460021F4 +:1004F000C94312E01078521C414000240BE0480828 +:10050000CD07ED0F002D01D0074D00E0002568401C +:100510000146601CC4B2082CF1DB18465B1E0028A3 +:10052000E8D1C84330BD00002083B8ED0446012067 +:10053000C007204305490863206880F3088800BF8E +:1005400062B66068804700BFFEE7000000700040B0 +:10055000114C124D1249206888421AD12821204698 +:10056000FFF7C2FFA16A884213D16168022902D154 +:100570002146183101E0214608310846074A016842 +:10058000914205D32122D2040168914200D205682C +:1005900000BF2846FFF7CAFF0040000100800001AD +:1005A00011C011CA70B5D2B00024002500BFEFF30E +:1005B00010800646FF21453101A8FFF7D0FD01ACB0 +:1005C00001349822074901A8FFF7B0FD0120FFF789 +:1005D00088FFA04705463046FFF783FF284652B004 +:1005E00070BD00002807000140BA7047C0BA7047CC +:1005F0000138FDD170470000F7B50325AD06286A24 +:1006000082B016460C46400840002862286A022143 +:1006100008432862286A8007FCD4662068600127A6 +:100620002F61A86AC005FCD5992068602F61A86A6F +:10063000C005FCD5FF209130FFF7DAFFFF2301331F +:10064000AB626846EF60352169602F61A96AC90510 +:10065000FCD5AB62A969EF60C9B205226A602F615F +:10066000AA6AD205FCD5AB62AA690902D2B21143CB +:100670000180C80702D0032005B0F0BDAB626869F5 +:10068000FF210831884368616869C91E08436861B1 +:1006900002980002483068600820A860EE602F6170 +:1006A000A86AC005FCD5FF200130A8620023F61C13 +:1006B000B0080ED0B2081148006899006054060ACC +:1006C00009194E70060C000E8E705B1CC8709A42A1 +:1006D000F1D8FF200130A8626869FF210831884302 +:1006E0006861686938436861286A80088000286208 +:1006F000286A38432862002005B0F0BD8000000C55 +:10070000032080064169FF2208329143416142691A +:1007100001210A434261026A920892000262026A5F +:100720000A43026270470000002003218906096A1B +:10073000490849000322920611621146096A022201 +:10074000114303229206116200BF03218906096A40 +:10075000022211400229F8D0D101032292069162AF +:100760000321D1609F2151600121116100BF03214C +:100770008906896AFF22013211409142F7D1032292 +:1007800092069162114688694969FF2208329143B5 +:100790000322920651611146496901221143032245 +:1007A000920651611146096A890889001162114651 +:1007B000096A012211430322920611627047000068 +:1007C000D00700010040002038080000D4040001D8 :04000005010000C135 :00000001FF diff --git a/Boot/MDK-ARM/Objects/caiic_boot.htm b/Boot/MDK-ARM/Objects/caiic_boot.htm index 633a104..c34941b 100644 --- a/Boot/MDK-ARM/Objects/caiic_boot.htm +++ b/Boot/MDK-ARM/Objects/caiic_boot.htm @@ -3,7 +3,7 @@ Static Call Graph - [.\Objects\caiic_boot.axf]

Static Call Graph for image .\Objects\caiic_boot.axf


-

#<CALLGRAPH># ARM Linker, 5060750: Last Updated: Wed Sep 02 08:07:05 2026 +

#<CALLGRAPH># ARM Linker, 5060750: Last Updated: Wed Sep 02 20:49:49 2026

Maximum Stack Usage = 736 bytes + Unknown(Cycles, Untraceable Function Pointers)

Call chain for Maximum Stack Depth:

@@ -72,7 +72,7 @@ Global Symbols

__main (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
[Address Reference Count : 1]

-

_main_stk (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001)) +

_main_stk (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))

_main_scatterload (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))

[Calls]