diff --git a/AGENTS.md b/AGENTS.md index c0569ac..ceff56e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -7,11 +7,13 @@ 当前活跃工程: - **`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 裁决 + 镜像 CRC32 校验 + VTOR 重映射跳转;首次无 bootsetting 时向量检查后直跳 APP1。 +- **`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`。 仓库顶层目录: - `mcm-ddc-04/` — 主工程(应用代码、MDK 工程文件、开发日志) +- `mcm-ddc-ble/` — 独立 BLE 工程(rdtss 蓝本 + FreeRTOS,0x01000000 直跑) - `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/` - `nations-tec/` — 厂商资源:SDK V2.0.0、DFP 器件包、STB 开发板资料、官方 PDF 文档。**这些内容为只读参考资料,不要修改。** @@ -73,11 +75,10 @@ SDK 源码(固件库、CMSIS、FreeRTOS V9.0.0、BLE 协议栈/profile/ns_libr 烧录与运行: 1. Keil 打开 `MDK-ARM/embeddedSrc.uvprojx`,F7 编译 -2. NS-LINK 接 SWD(PA4/PA5),F8 下载 -3. 串口助手接 PB6(TX)/PB7(RX),115200 8N1,复位后应看到启动 banner 与 `caiic->` CLI 提示符(输入 `help` 查看命令;LED 滚动日志默认关闭,用 `log on` 打开) -4. BLE:手机 nRF Connect 应能搜到并连接 `CAIIC-MCM`,可见自定义服务(写特征 + notify 特征) - -注意:本工程当前尚未在真实硬件上实测(见开发日志第 8、9、10、15 节)。 +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),115200 8N1,复位后应看到启动 banner 与 `caiic->` CLI 提示符(输入 `help` 查看命令;LED 滚动日志默认关闭,用 `log on` 打开) +5. BLE:手机 nRF Connect 应能搜到并连接 `CAIIC-MCM`,可见自定义服务(写特征 + notify 特征) ## 硬件引脚约束(重要) diff --git a/Boot/MDK-ARM/Listings/caiic_boot.map b/Boot/MDK-ARM/Listings/caiic_boot.map index bc2cecf..f89562e 100644 --- a/Boot/MDK-ARM/Listings/caiic_boot.map +++ b/Boot/MDK-ARM/Listings/caiic_boot.map @@ -31,9 +31,7 @@ Section Cross References system_n32wb03x.o(i.read_flash_ID) refers to system_n32wb03x.o(i.__set_PRIMASK) for __set_PRIMASK 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.bank_crc_ok) refers to boot_crc32.o(i.caiic_crc32) for caiic_crc32 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_crc_ok) for bank_crc_ok 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 @@ -77,8 +75,9 @@ 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 entry10a.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 entry9a.o ABSOLUTE @@ -88,10 +87,9 @@ Image Symbol Table ../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 entry10b.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE - ../clib/microlib/string/memcpy.c 0x00000000 Number 0 memcpya.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 ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\startup\startup_n32wb03x.s 0x00000000 Number 0 startup_n32wb03x.o ABSOLUTE ..\..\nations-tec\N32WB03x_SDK_V2.0.0\firmware\CMSIS\device\system_n32wb03x.c 0x00000000 Number 0 system_n32wb03x.o ABSOLUTE @@ -129,17 +127,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_crc_ok 0x010004e8 Section 0 main.o(i.bank_crc_ok) - bank_crc_ok 0x010004e9 Thumb Code 48 main.o(i.bank_crc_ok) - i.bank_vector_ok 0x01000518 Section 0 main.o(i.bank_vector_ok) - bank_vector_ok 0x01000519 Thumb Code 46 main.o(i.bank_vector_ok) - i.caiic_crc32 0x01000548 Section 0 boot_crc32.o(i.caiic_crc32) - i.jump_to_app 0x0100058c Section 0 main.o(i.jump_to_app) - jump_to_app 0x0100058d Thumb Code 30 main.o(i.jump_to_app) - i.main 0x010005b0 Section 0 main.o(i.main) - i.read_flash_ID 0x01000660 Section 0 system_n32wb03x.o(i.read_flash_ID) - read_flash_ID 0x01000661 Thumb Code 62 system_n32wb03x.o(i.read_flash_ID) - .constdata 0x010006a4 Section 472 system_n32wb03x.o(.constdata) + 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) @@ -227,12 +223,12 @@ 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 0x01000549 Thumb Code 62 boot_crc32.o(i.caiic_crc32) - main 0x010005b1 Thumb Code 162 main.o(i.main) - TRIM_READ_CMD_CODE 0x010006a4 Data 320 system_n32wb03x.o(.constdata) - CMD_RDID 0x010007e4 Data 152 system_n32wb03x.o(.constdata) - Region$$Table$$Base 0x0100087c Number 0 anon$$obj.o(Region$$Table) - Region$$Table$$Limit 0x0100088c Number 0 anon$$obj.o(Region$$Table) + 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) @@ -244,54 +240,53 @@ Memory Map of the image Image Entry point : 0x010000c1 - Load Region LR_IROM1 (Base: 0x01000000, Size: 0x0000088c, Max: 0x00004000, ABSOLUTE) + Load Region LR_IROM1 (Base: 0x01000000, Size: 0x000007f0, Max: 0x00004000, ABSOLUTE) - Execution Region ER_IROM1 (Exec base: 0x01000000, Load base: 0x01000000, Size: 0x0000088c, Max: 0x00004000, ABSOLUTE) + Execution Region ER_IROM1 (Exec base: 0x01000000, Load base: 0x01000000, Size: 0x000007f0, 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 232 * .ARM.Collect$$$$00000000 mc_p.l(entry.o) - 0x010000c0 0x010000c0 0x00000004 Code RO 243 .ARM.Collect$$$$00000001 mc_p.l(entry2.o) - 0x010000c4 0x010000c4 0x00000004 Code RO 246 .ARM.Collect$$$$00000004 mc_p.l(entry5.o) - 0x010000c8 0x010000c8 0x00000000 Code RO 248 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o) - 0x010000c8 0x010000c8 0x00000000 Code RO 250 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o) - 0x010000c8 0x010000c8 0x00000008 Code RO 251 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o) - 0x010000d0 0x010000d0 0x00000000 Code RO 253 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o) - 0x010000d0 0x010000d0 0x00000000 Code RO 255 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o) - 0x010000d0 0x010000d0 0x00000004 Code RO 244 .ARM.Collect$$$$00002712 mc_p.l(entry2.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) 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 235 .text mc_p.l(uidiv.o) - 0x0100012c 0x0100012c 0x00000024 Code RO 237 .text mc_p.l(memcpya.o) - 0x01000150 0x01000150 0x00000024 Code RO 239 .text mc_p.l(memseta.o) - 0x01000174 0x01000174 0x00000024 Code RO 257 .text mc_p.l(init.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) 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 261 i.__scatterload_copy mc_p.l(handlers.o) - 0x010004d2 0x010004d2 0x00000002 Code RO 262 i.__scatterload_null mc_p.l(handlers.o) - 0x010004d4 0x010004d4 0x0000000e Code RO 263 i.__scatterload_zeroinit mc_p.l(handlers.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) 0x010004e2 0x010004e2 0x00000006 Code RO 19 i.__set_PRIMASK system_n32wb03x.o - 0x010004e8 0x010004e8 0x00000030 Code RO 174 i.bank_crc_ok main.o - 0x01000518 0x01000518 0x0000002e Code RO 175 i.bank_vector_ok main.o - 0x01000546 0x01000546 0x00000002 PAD - 0x01000548 0x01000548 0x00000044 Code RO 220 i.caiic_crc32 boot_crc32.o - 0x0100058c 0x0100058c 0x00000024 Code RO 176 i.jump_to_app main.o - 0x010005b0 0x010005b0 0x000000b0 Code RO 177 i.main main.o - 0x01000660 0x01000660 0x00000044 Code RO 20 i.read_flash_ID system_n32wb03x.o - 0x010006a4 0x010006a4 0x000001d8 Data RO 23 .constdata system_n32wb03x.o - 0x0100087c 0x0100087c 0x00000010 Data RO 259 Region$$Table anon$$obj.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 - Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x0100088c, Size: 0x00000838, Max: 0x0000c000, ABSOLUTE) + Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x010007f0, 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 0x0100088c 0x00000004 PAD + 0x20000034 0x010007f0 0x00000004 PAD 0x20000038 - 0x00000800 Zero RW 1 STACK startup_n32wb03x.o @@ -303,12 +298,12 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug Object Name 68 6 0 0 0 874 boot_crc32.o - 306 20 0 0 0 4735 main.o + 150 18 0 0 0 4115 main.o 28 8 192 0 2048 744 startup_n32wb03x.o 900 60 472 0 52 95112 system_n32wb03x.o ---------------------------------------------------------------------- - 1306 94 680 0 2104 101465 Object Totals + 1150 92 680 0 2104 100845 Object Totals 0 0 16 0 0 0 (incl. Generated) 4 0 0 0 4 0 (incl. Padding) @@ -350,15 +345,15 @@ Image component sizes Code (inc. data) RO Data RW Data ZI Data Debug - 1508 110 680 0 2104 101337 Grand Totals - 1508 110 680 0 2104 101337 ELF Image Totals - 1508 110 680 0 0 0 ROM Totals + 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 ============================================================================== - Total RO Size (Code + RO Data) 2188 ( 2.14kB) + Total RO Size (Code + RO Data) 2032 ( 1.98kB) Total RW Size (RW Data + ZI Data) 2104 ( 2.05kB) - Total ROM Size (Code + RO Data + RW Data) 2188 ( 2.14kB) + Total ROM Size (Code + RO Data + RW Data) 2032 ( 1.98kB) ============================================================================== diff --git a/Boot/MDK-ARM/Objects/caiic_boot.axf b/Boot/MDK-ARM/Objects/caiic_boot.axf index fe6e020..cb63cde 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 2b4309d..0bc79f4 100644 --- a/Boot/MDK-ARM/Objects/caiic_boot.build_log.htm +++ b/Boot/MDK-ARM/Objects/caiic_boot.build_log.htm @@ -17,7 +17,7 @@ Library Manager: ArmAr.exe V5.06 update 6 (build 750) Hex Converter: FromElf.exe V5.06 update 6 (build 750) CPU DLL: SARMCM3.DLL V5.31.0.0 Dialog DLL: DARMCM1.DLL V1.19.3.0 -Target DLL: UL2CM3.DLL V1.163.4.0 +Target DLL: CMSIS_AGDI.dll V1.32.6.0 Dialog DLL: TARMCM1.DLL V1.14.2.0