boot V1.01.02: 3.3V strap 进入 download + CLI TAB 命令补全

- Boot/src/main.c: PB5 3.3V strap 引脚 (输入+内部下拉), 拉高即进 download 并跳过 2s 回车窗口 (dev log §53)
- Boot/src/boot_cli.c: 从 APP 移植 TAB 命令名自动补全 (单匹配补全+空格, 多匹配公共前缀/列候选) (dev log §54)
- Boot/src/boot_version.h: V1.01.00 -> V1.01.02
- docs/开发日志.md: 新增 §53/§54
- 出包: mothercup_ble_prod.hex/bin 更新 (boot bin 13580B)
This commit is contained in:
evan.liu 2026-09-06 06:40:55 +08:00
parent b38ad3dd5a
commit 9dad3daf61
9 changed files with 1446 additions and 1153 deletions

View File

@ -31,9 +31,14 @@ 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(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.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 system_n32wb03x.o(i.system_delay_n_10us) refers to system_n32wb03x.o(.emb_text) for system_delay_cycles
main.o(i.boot_dl_strap_active) refers to n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphClk) for RCC_EnableAPB2PeriphClk
main.o(i.boot_dl_strap_active) refers to n32wb03x_gpio.o(i.GPIO_InitStruct) for GPIO_InitStruct
main.o(i.boot_dl_strap_active) refers to n32wb03x_gpio.o(i.GPIO_InitPeripheral) for GPIO_InitPeripheral
main.o(i.boot_dl_strap_active) refers to n32wb03x_gpio.o(i.GPIO_ReadInputDataBit) for GPIO_ReadInputDataBit
main.o(i.main) 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 boot_usart.o(i.boot_usart_init) for boot_usart_init main.o(i.main) refers to boot_usart.o(i.boot_usart_init) for boot_usart_init
main.o(i.main) refers to main.o(i.puts_boot) for puts_boot main.o(i.main) refers to main.o(i.puts_boot) for puts_boot
main.o(i.main) refers to main.o(i.boot_dl_strap_active) for boot_dl_strap_active
main.o(i.main) refers to boot_usart.o(i.boot_millis) for boot_millis main.o(i.main) refers to boot_usart.o(i.boot_millis) for boot_millis
main.o(i.main) refers to boot_usart.o(i.boot_usart_read) for boot_usart_read main.o(i.main) refers to boot_usart.o(i.boot_usart_read) for boot_usart_read
main.o(i.main) refers to main.o(i.image_sane) for image_sane main.o(i.main) refers to main.o(i.image_sane) for image_sane
@ -79,6 +84,9 @@ Section Cross References
boot_cli.o(i.CmdUartInfo) refers to boot_cli.o(i.cli_write) for cli_write boot_cli.o(i.CmdUartInfo) refers to boot_cli.o(i.cli_write) for cli_write
boot_cli.o(i.CmdVersion) refers to boot_cli.o(i.cli_printf) for cli_printf boot_cli.o(i.CmdVersion) refers to boot_cli.o(i.cli_printf) for cli_printf
boot_cli.o(i.CmdVersion) refers to system_n32wb03x.o(.data) for SystemCoreClock boot_cli.o(i.CmdVersion) refers to system_n32wb03x.o(.data) for SystemCoreClock
boot_cli.o(i.boot_cli_redraw) refers to strlen.o(.text) for strlen
boot_cli.o(i.boot_cli_redraw) refers to boot_cli.o(i.cli_write) for cli_write
boot_cli.o(i.boot_cli_redraw) refers to boot_usart.o(i.boot_usart_write) for boot_usart_write
boot_cli.o(i.boot_cli_run) refers to boot_cli.o(i.cli_write) for cli_write boot_cli.o(i.boot_cli_run) refers to boot_cli.o(i.cli_write) for cli_write
boot_cli.o(i.boot_cli_run) refers to app_ota.o(i.app_ota_reset_poll) for app_ota_reset_poll boot_cli.o(i.boot_cli_run) refers to app_ota.o(i.app_ota_reset_poll) for app_ota_reset_poll
boot_cli.o(i.boot_cli_run) refers to boot_usart.o(i.boot_millis) for boot_millis boot_cli.o(i.boot_cli_run) refers to boot_usart.o(i.boot_millis) for boot_millis
@ -86,10 +94,19 @@ Section Cross References
boot_cli.o(i.boot_cli_run) refers to boot_usart.o(i.boot_usart_read) for boot_usart_read boot_cli.o(i.boot_cli_run) refers to boot_usart.o(i.boot_usart_read) for boot_usart_read
boot_cli.o(i.boot_cli_run) refers to app_ota.o(i.app_ota_chan_rx_uart) for app_ota_chan_rx_uart boot_cli.o(i.boot_cli_run) refers to app_ota.o(i.app_ota_chan_rx_uart) for app_ota_chan_rx_uart
boot_cli.o(i.boot_cli_run) refers to boot_cli.o(i.cli_exec_line) for cli_exec_line boot_cli.o(i.boot_cli_run) refers to boot_cli.o(i.cli_exec_line) for cli_exec_line
boot_cli.o(i.boot_cli_run) refers to boot_cli.o(i.boot_cli_tab_complete) for boot_cli_tab_complete
boot_cli.o(i.boot_cli_run) refers to boot_usart.o(i.boot_usart_write) for boot_usart_write boot_cli.o(i.boot_cli_run) refers to boot_usart.o(i.boot_usart_write) for boot_usart_write
boot_cli.o(i.boot_cli_run) refers to boot_cli.o(.conststring) for .conststring boot_cli.o(i.boot_cli_run) refers to boot_cli.o(.conststring) for .conststring
boot_cli.o(i.boot_cli_run) refers to boot_cli.o(.data) for s_otaMode boot_cli.o(i.boot_cli_run) refers to boot_cli.o(.data) for s_otaMode
boot_cli.o(i.boot_cli_run) refers to boot_cli.o(.bss) for s_line boot_cli.o(i.boot_cli_run) refers to boot_cli.o(.bss) for s_line
boot_cli.o(i.boot_cli_tab_complete) refers to memchr.o(.text) for memchr
boot_cli.o(i.boot_cli_tab_complete) refers to strncmp.o(.text) for strncmp
boot_cli.o(i.boot_cli_tab_complete) refers to strcpy.o(.text) for strcpy
boot_cli.o(i.boot_cli_tab_complete) refers to strlen.o(.text) for strlen
boot_cli.o(i.boot_cli_tab_complete) refers to boot_usart.o(i.boot_usart_write) for boot_usart_write
boot_cli.o(i.boot_cli_tab_complete) refers to boot_cli.o(i.cli_write) for cli_write
boot_cli.o(i.boot_cli_tab_complete) refers to boot_cli.o(i.boot_cli_redraw) for boot_cli_redraw
boot_cli.o(i.boot_cli_tab_complete) refers to boot_cli.o(.constdata) for s_cmds
boot_cli.o(i.cli_exec_line) refers to strcmp.o(.text) for strcmp boot_cli.o(i.cli_exec_line) refers to strcmp.o(.text) for strcmp
boot_cli.o(i.cli_exec_line) refers to boot_cli.o(i.cli_printf) for cli_printf boot_cli.o(i.cli_exec_line) refers to boot_cli.o(i.cli_printf) for cli_printf
boot_cli.o(i.cli_exec_line) refers to boot_cli.o(.constdata) for s_cmds boot_cli.o(i.cli_exec_line) refers to boot_cli.o(.constdata) for s_cmds
@ -318,7 +335,6 @@ Removing Unused input sections from the image.
Removing n32wb03x_gpio.o(i.GPIO_DeInit), (68 bytes). Removing n32wb03x_gpio.o(i.GPIO_DeInit), (68 bytes).
Removing n32wb03x_gpio.o(i.GPIO_DeInitPin), (126 bytes). Removing n32wb03x_gpio.o(i.GPIO_DeInitPin), (126 bytes).
Removing n32wb03x_gpio.o(i.GPIO_ReadInputData), (8 bytes). Removing n32wb03x_gpio.o(i.GPIO_ReadInputData), (8 bytes).
Removing n32wb03x_gpio.o(i.GPIO_ReadInputDataBit), (20 bytes).
Removing n32wb03x_gpio.o(i.GPIO_ReadOutputData), (8 bytes). Removing n32wb03x_gpio.o(i.GPIO_ReadOutputData), (8 bytes).
Removing n32wb03x_gpio.o(i.GPIO_ReadOutputDataBit), (20 bytes). Removing n32wb03x_gpio.o(i.GPIO_ReadOutputDataBit), (20 bytes).
Removing n32wb03x_gpio.o(i.GPIO_ResetBits), (4 bytes). Removing n32wb03x_gpio.o(i.GPIO_ResetBits), (4 bytes).
@ -361,7 +377,7 @@ Removing Unused input sections from the image.
Removing n32wb03x_qflash.o(i.Qflash_Read), (68 bytes). Removing n32wb03x_qflash.o(i.Qflash_Read), (68 bytes).
Removing n32wb03x_gpio.o(i.__ARM_common_switch8), (28 bytes). Removing n32wb03x_gpio.o(i.__ARM_common_switch8), (28 bytes).
98 unused section(s) (total 3926 bytes) removed from the image. 97 unused section(s) (total 3906 bytes) removed from the image.
============================================================================== ==============================================================================
@ -371,43 +387,46 @@ Image Symbol Table
Symbol Name Value Ov Type Size Object(Section) Symbol Name Value Ov Type Size Object(Section)
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isspace_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isgraph_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 ctype_o.o ABSOLUTE ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 ctype_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isalnum_o.o ABSOLUTE ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isalnum_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isalpha_o.o ABSOLUTE ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isalpha_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isblank_o.o ABSOLUTE ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isblank_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 iscntrl_o.o ABSOLUTE ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 iscntrl_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isdigit_o.o ABSOLUTE ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isdigit_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isgraph_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isupper_o.o ABSOLUTE ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isupper_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 islower_o.o ABSOLUTE ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 islower_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isprint_o.o ABSOLUTE ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isprint_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 ispunct_o.o ABSOLUTE ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 ispunct_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isspace_o.o ABSOLUTE
../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isxdigit_o.o ABSOLUTE ../clib/microlib/ctype/ctype.c 0x00000000 Number 0 isxdigit_o.o ABSOLUTE
../clib/microlib/division.c 0x00000000 Number 0 uidiv.o ABSOLUTE ../clib/microlib/division.c 0x00000000 Number 0 uidiv.o ABSOLUTE
../clib/microlib/errno.c 0x00000000 Number 0 errno.o ABSOLUTE ../clib/microlib/errno.c 0x00000000 Number 0 errno.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry5.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.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/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry8a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.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 entry10b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry8b.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.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 entry.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.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/string/memchr.c 0x00000000 Number 0 memchr.o ABSOLUTE
../clib/microlib/string/memcmp.c 0x00000000 Number 0 memcmp.o ABSOLUTE ../clib/microlib/string/memcmp.c 0x00000000 Number 0 memcmp.o ABSOLUTE
../clib/microlib/string/memcpy.c 0x00000000 Number 0 memcpyb.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/memcpy.c 0x00000000 Number 0 memcpya.o ABSOLUTE
../clib/microlib/string/memset.c 0x00000000 Number 0 memseta.o ABSOLUTE ../clib/microlib/string/memset.c 0x00000000 Number 0 memseta.o ABSOLUTE
../clib/microlib/string/strcmp.c 0x00000000 Number 0 strcmp.o ABSOLUTE ../clib/microlib/string/strcmp.c 0x00000000 Number 0 strcmp.o ABSOLUTE
../clib/microlib/string/strcpy.c 0x00000000 Number 0 strcpy.o ABSOLUTE
../clib/microlib/string/strlen.c 0x00000000 Number 0 strlen.o ABSOLUTE ../clib/microlib/string/strlen.c 0x00000000 Number 0 strlen.o ABSOLUTE
../clib/scanf.c 0x00000000 Number 0 _strtoul.o ABSOLUTE ../clib/microlib/string/strncmp.c 0x00000000 Number 0 strncmp.o ABSOLUTE
../clib/scanf.c 0x00000000 Number 0 _chval.o ABSOLUTE
../clib/scanf.c 0x00000000 Number 0 strtoul.o ABSOLUTE ../clib/scanf.c 0x00000000 Number 0 strtoul.o ABSOLUTE
../clib/scanf.c 0x00000000 Number 0 _chval.o ABSOLUTE
../clib/scanf.c 0x00000000 Number 0 _strtoul.o ABSOLUTE
..\..\mcm-ddc-ble\src\app_bootset.c 0x00000000 Number 0 app_bootset.o ABSOLUTE ..\..\mcm-ddc-ble\src\app_bootset.c 0x00000000 Number 0 app_bootset.o ABSOLUTE
..\..\mcm-ddc-ble\src\app_ota.c 0x00000000 Number 0 app_ota.o ABSOLUTE ..\..\mcm-ddc-ble\src\app_ota.c 0x00000000 Number 0 app_ota.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\startup\startup_n32wb03x.s 0x00000000 Number 0 startup_n32wb03x.o ABSOLUTE
@ -453,134 +472,144 @@ Image Symbol Table
.text 0x01000150 Section 0 memseta.o(.text) .text 0x01000150 Section 0 memseta.o(.text)
.text 0x01000174 Section 0 strlen.o(.text) .text 0x01000174 Section 0 strlen.o(.text)
.text 0x01000182 Section 0 strcmp.o(.text) .text 0x01000182 Section 0 strcmp.o(.text)
.text 0x0100019e Section 0 memcmp.o(.text) .text 0x0100019e Section 0 memchr.o(.text)
.text 0x010001b8 Section 0 strtoul.o(.text) .text 0x010001b2 Section 0 memcmp.o(.text)
.text 0x01000230 Section 0 ctype_o.o(.text) .text 0x010001cc Section 0 strcpy.o(.text)
.text 0x01000238 Section 0 _strtoul.o(.text) .text 0x010001de Section 0 strncmp.o(.text)
.text 0x010002e0 Section 36 init.o(.text) .text 0x010001fc Section 0 strtoul.o(.text)
.text 0x01000304 Section 0 _chval.o(.text) .text 0x01000274 Section 0 ctype_o.o(.text)
i.AppBootset_CmdAppswitch 0x01000324 Section 0 app_bootset.o(i.AppBootset_CmdAppswitch) .text 0x0100027c Section 0 _strtoul.o(.text)
i.AppBootset_CmdBsdump 0x010005fc Section 0 app_bootset.o(i.AppBootset_CmdBsdump) .text 0x01000324 Section 36 init.o(.text)
i.AppBootset_CmdBsset 0x0100061c Section 0 app_bootset.o(i.AppBootset_CmdBsset) .text 0x01000348 Section 0 _chval.o(.text)
i.CmdDevInfo 0x01000914 Section 0 boot_cli.o(i.CmdDevInfo) i.AppBootset_CmdAppswitch 0x01000368 Section 0 app_bootset.o(i.AppBootset_CmdAppswitch)
CmdDevInfo 0x01000915 Thumb Code 90 boot_cli.o(i.CmdDevInfo) i.AppBootset_CmdBsdump 0x01000640 Section 0 app_bootset.o(i.AppBootset_CmdBsdump)
i.CmdHelp 0x010009f4 Section 0 boot_cli.o(i.CmdHelp) i.AppBootset_CmdBsset 0x01000660 Section 0 app_bootset.o(i.AppBootset_CmdBsset)
CmdHelp 0x010009f5 Thumb Code 114 boot_cli.o(i.CmdHelp) i.CmdDevInfo 0x01000958 Section 0 boot_cli.o(i.CmdDevInfo)
i.CmdOta 0x01000aa8 Section 0 boot_cli.o(i.CmdOta) CmdDevInfo 0x01000959 Thumb Code 90 boot_cli.o(i.CmdDevInfo)
CmdOta 0x01000aa9 Thumb Code 20 boot_cli.o(i.CmdOta) i.CmdHelp 0x01000a38 Section 0 boot_cli.o(i.CmdHelp)
i.CmdReset 0x01000ac4 Section 0 boot_cli.o(i.CmdReset) CmdHelp 0x01000a39 Thumb Code 114 boot_cli.o(i.CmdHelp)
CmdReset 0x01000ac5 Thumb Code 34 boot_cli.o(i.CmdReset) i.CmdOta 0x01000aec Section 0 boot_cli.o(i.CmdOta)
i.CmdUartInfo 0x01000b00 Section 0 boot_cli.o(i.CmdUartInfo) CmdOta 0x01000aed Thumb Code 20 boot_cli.o(i.CmdOta)
CmdUartInfo 0x01000b01 Thumb Code 26 boot_cli.o(i.CmdUartInfo) i.CmdReset 0x01000b08 Section 0 boot_cli.o(i.CmdReset)
i.CmdVersion 0x01000bb0 Section 0 boot_cli.o(i.CmdVersion) CmdReset 0x01000b09 Thumb Code 34 boot_cli.o(i.CmdReset)
CmdVersion 0x01000bb1 Thumb Code 26 boot_cli.o(i.CmdVersion) i.CmdUartInfo 0x01000b44 Section 0 boot_cli.o(i.CmdUartInfo)
i.DMA_DeInit 0x01000c24 Section 0 n32wb03x_dma.o(i.DMA_DeInit) CmdUartInfo 0x01000b45 Thumb Code 26 boot_cli.o(i.CmdUartInfo)
i.DMA_EnableChannel 0x01000cc4 Section 0 n32wb03x_dma.o(i.DMA_EnableChannel) i.CmdVersion 0x01000bf4 Section 0 boot_cli.o(i.CmdVersion)
i.DMA_GetCurrDataCounter 0x01000ce0 Section 0 n32wb03x_dma.o(i.DMA_GetCurrDataCounter) CmdVersion 0x01000bf5 Thumb Code 26 boot_cli.o(i.CmdVersion)
i.DMA_Init 0x01000ce8 Section 0 n32wb03x_dma.o(i.DMA_Init) i.DMA_DeInit 0x01000c68 Section 0 n32wb03x_dma.o(i.DMA_DeInit)
i.DMA_RequestRemap 0x01000d28 Section 0 n32wb03x_dma.o(i.DMA_RequestRemap) i.DMA_EnableChannel 0x01000d08 Section 0 n32wb03x_dma.o(i.DMA_EnableChannel)
i.GPIO_InitPeripheral 0x01000d38 Section 0 n32wb03x_gpio.o(i.GPIO_InitPeripheral) i.DMA_GetCurrDataCounter 0x01000d24 Section 0 n32wb03x_dma.o(i.DMA_GetCurrDataCounter)
i.GPIO_InitStruct 0x01000e40 Section 0 n32wb03x_gpio.o(i.GPIO_InitStruct) i.DMA_Init 0x01000d2c Section 0 n32wb03x_dma.o(i.DMA_Init)
i.OTPTrim_Read 0x01000e5c Section 0 system_n32wb03x.o(i.OTPTrim_Read) i.DMA_RequestRemap 0x01000d6c Section 0 n32wb03x_dma.o(i.DMA_RequestRemap)
i.Qflash_Erase_Sector 0x01000f28 Section 0 n32wb03x_qflash.o(i.Qflash_Erase_Sector) i.GPIO_InitPeripheral 0x01000d7c Section 0 n32wb03x_gpio.o(i.GPIO_InitPeripheral)
i.Qflash_Init 0x01000f64 Section 0 n32wb03x_qflash.o(i.Qflash_Init) i.GPIO_InitStruct 0x01000e84 Section 0 n32wb03x_gpio.o(i.GPIO_InitStruct)
i.Qflash_Write 0x01000f9c Section 0 n32wb03x_qflash.o(i.Qflash_Write) i.GPIO_ReadInputDataBit 0x01000ea0 Section 0 n32wb03x_gpio.o(i.GPIO_ReadInputDataBit)
i.RCC_EnableAHBPeriphClk 0x01000fe0 Section 0 n32wb03x_rcc.o(i.RCC_EnableAHBPeriphClk) i.OTPTrim_Read 0x01000eb4 Section 0 system_n32wb03x.o(i.OTPTrim_Read)
i.RCC_EnableAPB2PeriphClk 0x01001000 Section 0 n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphClk) i.Qflash_Erase_Sector 0x01000f80 Section 0 n32wb03x_qflash.o(i.Qflash_Erase_Sector)
i.RCC_GetClocksFreqValue 0x01001020 Section 0 n32wb03x_rcc.o(i.RCC_GetClocksFreqValue) i.Qflash_Init 0x01000fbc Section 0 n32wb03x_qflash.o(i.Qflash_Init)
i.RCC_HsiCalib 0x010010c4 Section 0 system_n32wb03x.o(i.RCC_HsiCalib) i.Qflash_Write 0x01000ff4 Section 0 n32wb03x_qflash.o(i.Qflash_Write)
RCC_HsiCalib 0x010010c5 Thumb Code 296 system_n32wb03x.o(i.RCC_HsiCalib) i.RCC_EnableAHBPeriphClk 0x01001038 Section 0 n32wb03x_rcc.o(i.RCC_EnableAHBPeriphClk)
i.SystemInit 0x010011f4 Section 0 system_n32wb03x.o(i.SystemInit) i.RCC_EnableAPB2PeriphClk 0x01001058 Section 0 n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphClk)
i.SystemTrimValueRead 0x01001310 Section 0 system_n32wb03x.o(i.SystemTrimValueRead) i.RCC_GetClocksFreqValue 0x01001078 Section 0 n32wb03x_rcc.o(i.RCC_GetClocksFreqValue)
i.USART_Enable 0x01001324 Section 0 n32wb03x_usart.o(i.USART_Enable) i.RCC_HsiCalib 0x0100111c Section 0 system_n32wb03x.o(i.RCC_HsiCalib)
i.USART_EnableDMA 0x01001344 Section 0 n32wb03x_usart.o(i.USART_EnableDMA) RCC_HsiCalib 0x0100111d Thumb Code 296 system_n32wb03x.o(i.RCC_HsiCalib)
i.USART_GetFlagStatus 0x01001358 Section 0 n32wb03x_usart.o(i.USART_GetFlagStatus) i.SystemInit 0x0100124c Section 0 system_n32wb03x.o(i.SystemInit)
i.USART_Init 0x01001378 Section 0 n32wb03x_usart.o(i.USART_Init) i.SystemTrimValueRead 0x01001368 Section 0 system_n32wb03x.o(i.SystemTrimValueRead)
i.USART_SendData 0x0100142c Section 0 n32wb03x_usart.o(i.USART_SendData) i.USART_Enable 0x0100137c Section 0 n32wb03x_usart.o(i.USART_Enable)
i.__aeabi_errno_addr 0x01001434 Section 0 errno.o(i.__aeabi_errno_addr) i.USART_EnableDMA 0x0100139c Section 0 n32wb03x_usart.o(i.USART_EnableDMA)
i.__scatterload_copy 0x0100143c Section 14 handlers.o(i.__scatterload_copy) i.USART_GetFlagStatus 0x010013b0 Section 0 n32wb03x_usart.o(i.USART_GetFlagStatus)
i.__scatterload_null 0x0100144a Section 2 handlers.o(i.__scatterload_null) i.USART_Init 0x010013d0 Section 0 n32wb03x_usart.o(i.USART_Init)
i.__scatterload_zeroinit 0x0100144c Section 14 handlers.o(i.__scatterload_zeroinit) i.USART_SendData 0x01001484 Section 0 n32wb03x_usart.o(i.USART_SendData)
i.__set_PRIMASK 0x0100145a Section 0 system_n32wb03x.o(i.__set_PRIMASK) i.__aeabi_errno_addr 0x0100148c Section 0 errno.o(i.__aeabi_errno_addr)
__set_PRIMASK 0x0100145b Thumb Code 6 system_n32wb03x.o(i.__set_PRIMASK) i.__scatterload_copy 0x01001494 Section 14 handlers.o(i.__scatterload_copy)
i.__set_PRIMASK 0x01001460 Section 0 n32wb03x_qflash.o(i.__set_PRIMASK) i.__scatterload_null 0x010014a2 Section 2 handlers.o(i.__scatterload_null)
__set_PRIMASK 0x01001461 Thumb Code 6 n32wb03x_qflash.o(i.__set_PRIMASK) i.__scatterload_zeroinit 0x010014a4 Section 14 handlers.o(i.__scatterload_zeroinit)
i.app_ota_abort 0x01001468 Section 0 app_ota.o(i.app_ota_abort) i.__set_PRIMASK 0x010014b2 Section 0 system_n32wb03x.o(i.__set_PRIMASK)
i.app_ota_chan_idle 0x010014a4 Section 0 app_ota.o(i.app_ota_chan_idle) __set_PRIMASK 0x010014b3 Thumb Code 6 system_n32wb03x.o(i.__set_PRIMASK)
i.app_ota_chan_rx 0x010014b8 Section 0 app_ota.o(i.app_ota_chan_rx) i.__set_PRIMASK 0x010014b8 Section 0 n32wb03x_qflash.o(i.__set_PRIMASK)
i.app_ota_chan_rx_uart 0x010015f8 Section 0 app_ota.o(i.app_ota_chan_rx_uart) __set_PRIMASK 0x010014b9 Thumb Code 6 n32wb03x_qflash.o(i.__set_PRIMASK)
i.app_ota_handle_frame 0x0100161c Section 0 app_ota.o(i.app_ota_handle_frame) i.app_ota_abort 0x010014c0 Section 0 app_ota.o(i.app_ota_abort)
i.app_ota_reset_poll 0x01001698 Section 0 app_ota.o(i.app_ota_reset_poll) i.app_ota_chan_idle 0x010014fc Section 0 app_ota.o(i.app_ota_chan_idle)
i.boot_cli_run 0x010016f4 Section 0 boot_cli.o(i.boot_cli_run) i.app_ota_chan_rx 0x01001510 Section 0 app_ota.o(i.app_ota_chan_rx)
i.boot_delay_ms 0x0100183c Section 0 boot_usart.o(i.boot_delay_ms) i.app_ota_chan_rx_uart 0x01001650 Section 0 app_ota.o(i.app_ota_chan_rx_uart)
i.boot_millis 0x01001854 Section 0 boot_usart.o(i.boot_millis) i.app_ota_handle_frame 0x01001674 Section 0 app_ota.o(i.app_ota_handle_frame)
i.boot_usart_init 0x0100187c Section 0 boot_usart.o(i.boot_usart_init) i.app_ota_reset_poll 0x010016f0 Section 0 app_ota.o(i.app_ota_reset_poll)
i.boot_usart_read 0x0100198c Section 0 boot_usart.o(i.boot_usart_read) i.boot_cli_redraw 0x0100174c Section 0 boot_cli.o(i.boot_cli_redraw)
i.boot_usart_rx_head 0x010019cc Section 0 boot_usart.o(i.boot_usart_rx_head) boot_cli_redraw 0x0100174d Thumb Code 60 boot_cli.o(i.boot_cli_redraw)
boot_usart_rx_head 0x010019cd Thumb Code 18 boot_usart.o(i.boot_usart_rx_head) i.boot_cli_run 0x01001798 Section 0 boot_cli.o(i.boot_cli_run)
i.boot_usart_write 0x010019e4 Section 0 boot_usart.o(i.boot_usart_write) i.boot_cli_tab_complete 0x010018f4 Section 0 boot_cli.o(i.boot_cli_tab_complete)
i.bootset_commit 0x01001a14 Section 0 app_bootset.o(i.bootset_commit) boot_cli_tab_complete 0x010018f5 Thumb Code 306 boot_cli.o(i.boot_cli_tab_complete)
bootset_commit 0x01001a15 Thumb Code 74 app_bootset.o(i.bootset_commit) i.boot_delay_ms 0x01001a38 Section 0 boot_usart.o(i.boot_delay_ms)
i.bootset_crc 0x01001a68 Section 0 app_bootset.o(i.bootset_crc) i.boot_dl_strap_active 0x01001a50 Section 0 main.o(i.boot_dl_strap_active)
bootset_crc 0x01001a69 Thumb Code 14 app_bootset.o(i.bootset_crc) boot_dl_strap_active 0x01001a51 Thumb Code 58 main.o(i.boot_dl_strap_active)
i.bootset_ensure_qflash 0x01001a78 Section 0 app_bootset.o(i.bootset_ensure_qflash) i.boot_millis 0x01001a90 Section 0 boot_usart.o(i.boot_millis)
bootset_ensure_qflash 0x01001a79 Thumb Code 22 app_bootset.o(i.bootset_ensure_qflash) i.boot_usart_init 0x01001ab8 Section 0 boot_usart.o(i.boot_usart_init)
i.bootset_print 0x01001a94 Section 0 app_bootset.o(i.bootset_print) i.boot_usart_read 0x01001bc8 Section 0 boot_usart.o(i.boot_usart_read)
bootset_print 0x01001a95 Thumb Code 98 app_bootset.o(i.bootset_print) i.boot_usart_rx_head 0x01001c08 Section 0 boot_usart.o(i.boot_usart_rx_head)
i.bootset_valid 0x01001c00 Section 0 app_bootset.o(i.bootset_valid) boot_usart_rx_head 0x01001c09 Thumb Code 18 boot_usart.o(i.boot_usart_rx_head)
bootset_valid 0x01001c01 Thumb Code 32 app_bootset.o(i.bootset_valid) i.boot_usart_write 0x01001c20 Section 0 boot_usart.o(i.boot_usart_write)
i.caiic_crc32 0x01001c24 Section 0 boot_crc32.o(i.caiic_crc32) i.bootset_commit 0x01001c50 Section 0 app_bootset.o(i.bootset_commit)
i.cli_exec_line 0x01001c68 Section 0 boot_cli.o(i.cli_exec_line) bootset_commit 0x01001c51 Thumb Code 74 app_bootset.o(i.bootset_commit)
cli_exec_line 0x01001c69 Thumb Code 162 boot_cli.o(i.cli_exec_line) i.bootset_crc 0x01001ca4 Section 0 app_bootset.o(i.bootset_crc)
i.cli_printf 0x01001d34 Section 0 boot_cli.o(i.cli_printf) bootset_crc 0x01001ca5 Thumb Code 14 app_bootset.o(i.bootset_crc)
i.cli_write 0x01001ed0 Section 0 boot_cli.o(i.cli_write) i.bootset_ensure_qflash 0x01001cb4 Section 0 app_bootset.o(i.bootset_ensure_qflash)
i.image_sane 0x01001ee8 Section 0 main.o(i.image_sane) bootset_ensure_qflash 0x01001cb5 Thumb Code 22 app_bootset.o(i.bootset_ensure_qflash)
image_sane 0x01001ee9 Thumb Code 44 main.o(i.image_sane) i.bootset_print 0x01001cd0 Section 0 app_bootset.o(i.bootset_print)
i.jump_to_app 0x01001f1c Section 0 main.o(i.jump_to_app) bootset_print 0x01001cd1 Thumb Code 98 app_bootset.o(i.bootset_print)
jump_to_app 0x01001f1d Thumb Code 30 main.o(i.jump_to_app) i.bootset_valid 0x01001e3c Section 0 app_bootset.o(i.bootset_valid)
i.main 0x01001f40 Section 0 main.o(i.main) bootset_valid 0x01001e3d Thumb Code 32 app_bootset.o(i.bootset_valid)
i.ota_crc16 0x010020c0 Section 0 app_ota.o(i.ota_crc16) i.caiic_crc32 0x01001e60 Section 0 boot_crc32.o(i.caiic_crc32)
ota_crc16 0x010020c1 Thumb Code 68 app_ota.o(i.ota_crc16) i.cli_exec_line 0x01001ea4 Section 0 boot_cli.o(i.cli_exec_line)
i.ota_erase_up_to 0x0100210c Section 0 app_ota.o(i.ota_erase_up_to) cli_exec_line 0x01001ea5 Thumb Code 162 boot_cli.o(i.cli_exec_line)
ota_erase_up_to 0x0100210d Thumb Code 54 app_ota.o(i.ota_erase_up_to) i.cli_printf 0x01001f70 Section 0 boot_cli.o(i.cli_printf)
i.ota_on_begin 0x0100214c Section 0 app_ota.o(i.ota_on_begin) i.cli_write 0x0100210c Section 0 boot_cli.o(i.cli_write)
ota_on_begin 0x0100214d Thumb Code 294 app_ota.o(i.ota_on_begin) i.image_sane 0x01002124 Section 0 main.o(i.image_sane)
i.ota_on_data 0x010022bc Section 0 app_ota.o(i.ota_on_data) image_sane 0x01002125 Thumb Code 44 main.o(i.image_sane)
ota_on_data 0x010022bd Thumb Code 396 app_ota.o(i.ota_on_data) i.jump_to_app 0x01002158 Section 0 main.o(i.jump_to_app)
i.ota_on_end 0x01002464 Section 0 app_ota.o(i.ota_on_end) jump_to_app 0x01002159 Thumb Code 30 main.o(i.jump_to_app)
ota_on_end 0x01002465 Thumb Code 326 app_ota.o(i.ota_on_end) i.main 0x0100217c Section 0 main.o(i.main)
i.ota_program 0x010025d4 Section 0 app_ota.o(i.ota_program) i.ota_crc16 0x01002340 Section 0 app_ota.o(i.ota_crc16)
ota_program 0x010025d5 Thumb Code 46 app_ota.o(i.ota_program) ota_crc16 0x01002341 Thumb Code 68 app_ota.o(i.ota_crc16)
i.ota_rd32 0x0100260c Section 0 app_ota.o(i.ota_rd32) i.ota_erase_up_to 0x0100238c Section 0 app_ota.o(i.ota_erase_up_to)
ota_rd32 0x0100260d Thumb Code 24 app_ota.o(i.ota_rd32) ota_erase_up_to 0x0100238d Thumb Code 54 app_ota.o(i.ota_erase_up_to)
i.ota_respond 0x01002624 Section 0 app_ota.o(i.ota_respond) i.ota_on_begin 0x010023cc Section 0 app_ota.o(i.ota_on_begin)
ota_respond 0x01002625 Thumb Code 118 app_ota.o(i.ota_respond) ota_on_begin 0x010023cd Thumb Code 294 app_ota.o(i.ota_on_begin)
i.ota_uart_sink 0x010026a0 Section 0 app_ota.o(i.ota_uart_sink) i.ota_on_data 0x0100253c Section 0 app_ota.o(i.ota_on_data)
ota_uart_sink 0x010026a1 Thumb Code 22 app_ota.o(i.ota_uart_sink) ota_on_data 0x0100253d Thumb Code 396 app_ota.o(i.ota_on_data)
i.ota_update_bootsetting 0x010026bc Section 0 app_ota.o(i.ota_update_bootsetting) i.ota_on_end 0x010026e4 Section 0 app_ota.o(i.ota_on_end)
ota_update_bootsetting 0x010026bd Thumb Code 174 app_ota.o(i.ota_update_bootsetting) ota_on_end 0x010026e5 Thumb Code 326 app_ota.o(i.ota_on_end)
i.parse_u32 0x01002788 Section 0 app_bootset.o(i.parse_u32) i.ota_program 0x01002854 Section 0 app_ota.o(i.ota_program)
parse_u32 0x01002789 Thumb Code 46 app_bootset.o(i.parse_u32) ota_program 0x01002855 Thumb Code 46 app_ota.o(i.ota_program)
i.puts_boot 0x010027b6 Section 0 main.o(i.puts_boot) i.ota_rd32 0x0100288c Section 0 app_ota.o(i.ota_rd32)
puts_boot 0x010027b7 Thumb Code 24 main.o(i.puts_boot) ota_rd32 0x0100288d Thumb Code 24 app_ota.o(i.ota_rd32)
i.read_flash_ID 0x010027d0 Section 0 system_n32wb03x.o(i.read_flash_ID) i.ota_respond 0x010028a4 Section 0 app_ota.o(i.ota_respond)
read_flash_ID 0x010027d1 Thumb Code 62 system_n32wb03x.o(i.read_flash_ID) ota_respond 0x010028a5 Thumb Code 118 app_ota.o(i.ota_respond)
i.str_pad 0x01002814 Section 0 boot_cli.o(i.str_pad) i.ota_uart_sink 0x01002920 Section 0 app_ota.o(i.ota_uart_sink)
str_pad 0x01002815 Thumb Code 78 boot_cli.o(i.str_pad) ota_uart_sink 0x01002921 Thumb Code 22 app_ota.o(i.ota_uart_sink)
i.u32_to_str 0x01002862 Section 0 boot_cli.o(i.u32_to_str) i.ota_update_bootsetting 0x0100293c Section 0 app_ota.o(i.ota_update_bootsetting)
u32_to_str 0x01002863 Thumb Code 108 boot_cli.o(i.u32_to_str) ota_update_bootsetting 0x0100293d Thumb Code 174 app_ota.o(i.ota_update_bootsetting)
.constdata 0x010028ce Section 472 system_n32wb03x.o(.constdata) i.parse_u32 0x01002a08 Section 0 app_bootset.o(i.parse_u32)
.constdata 0x01002aa8 Section 108 boot_cli.o(.constdata) parse_u32 0x01002a09 Thumb Code 46 app_bootset.o(i.parse_u32)
s_cmds 0x01002aa8 Data 108 boot_cli.o(.constdata) i.puts_boot 0x01002a36 Section 0 main.o(i.puts_boot)
.constdata 0x01002b14 Section 12 n32wb03x_rcc.o(.constdata) puts_boot 0x01002a37 Thumb Code 24 main.o(i.puts_boot)
s_ApbPresTable 0x01002b14 Data 8 n32wb03x_rcc.o(.constdata) i.read_flash_ID 0x01002a50 Section 0 system_n32wb03x.o(i.read_flash_ID)
s_AhbPresTable 0x01002b1c Data 4 n32wb03x_rcc.o(.constdata) read_flash_ID 0x01002a51 Thumb Code 62 system_n32wb03x.o(i.read_flash_ID)
.constdata 0x01002b20 Section 804 n32wb03x_qflash.o(.constdata) i.str_pad 0x01002a94 Section 0 boot_cli.o(i.str_pad)
.constdata 0x01002e44 Section 129 ctype_o.o(.constdata) str_pad 0x01002a95 Thumb Code 78 boot_cli.o(i.str_pad)
.constdata 0x01002ec8 Section 4 ctype_o.o(.constdata) i.u32_to_str 0x01002ae2 Section 0 boot_cli.o(i.u32_to_str)
table 0x01002ec8 Data 4 ctype_o.o(.constdata) u32_to_str 0x01002ae3 Thumb Code 108 boot_cli.o(i.u32_to_str)
.conststring 0x01002ecc Section 666 boot_cli.o(.conststring) .constdata 0x01002b4e Section 472 system_n32wb03x.o(.constdata)
.conststring 0x01003168 Section 145 app_bootset.o(.conststring) .constdata 0x01002d28 Section 108 boot_cli.o(.constdata)
s_cmds 0x01002d28 Data 108 boot_cli.o(.constdata)
.constdata 0x01002d94 Section 12 n32wb03x_rcc.o(.constdata)
s_ApbPresTable 0x01002d94 Data 8 n32wb03x_rcc.o(.constdata)
s_AhbPresTable 0x01002d9c Data 4 n32wb03x_rcc.o(.constdata)
.constdata 0x01002da0 Section 804 n32wb03x_qflash.o(.constdata)
.constdata 0x010030c4 Section 129 ctype_o.o(.constdata)
.constdata 0x01003148 Section 4 ctype_o.o(.constdata)
table 0x01003148 Data 4 ctype_o.o(.constdata)
.conststring 0x0100314c Section 682 boot_cli.o(.conststring)
.conststring 0x010033f8 Section 145 app_bootset.o(.conststring)
.data 0x20004000 Section 4 system_n32wb03x.o(.data) .data 0x20004000 Section 4 system_n32wb03x.o(.data)
.data 0x20004004 Section 8 boot_usart.o(.data) .data 0x20004004 Section 8 boot_usart.o(.data)
s_rxTail 0x20004004 Data 2 boot_usart.o(.data) s_rxTail 0x20004004 Data 2 boot_usart.o(.data)
@ -705,64 +734,68 @@ Image Symbol Table
_memset$wrapper 0x01000163 Thumb Code 18 memseta.o(.text) _memset$wrapper 0x01000163 Thumb Code 18 memseta.o(.text)
strlen 0x01000175 Thumb Code 14 strlen.o(.text) strlen 0x01000175 Thumb Code 14 strlen.o(.text)
strcmp 0x01000183 Thumb Code 28 strcmp.o(.text) strcmp 0x01000183 Thumb Code 28 strcmp.o(.text)
memcmp 0x0100019f Thumb Code 26 memcmp.o(.text) memchr 0x0100019f Thumb Code 20 memchr.o(.text)
strtoul 0x010001b9 Thumb Code 118 strtoul.o(.text) memcmp 0x010001b3 Thumb Code 26 memcmp.o(.text)
__rt_ctype_table 0x01000231 Thumb Code 4 ctype_o.o(.text) strcpy 0x010001cd Thumb Code 18 strcpy.o(.text)
_strtoul 0x01000239 Thumb Code 166 _strtoul.o(.text) strncmp 0x010001df Thumb Code 30 strncmp.o(.text)
__scatterload 0x010002e1 Thumb Code 28 init.o(.text) strtoul 0x010001fd Thumb Code 118 strtoul.o(.text)
__scatterload_rt2 0x010002e1 Thumb Code 0 init.o(.text) __rt_ctype_table 0x01000275 Thumb Code 4 ctype_o.o(.text)
_chval 0x01000305 Thumb Code 30 _chval.o(.text) _strtoul 0x0100027d Thumb Code 166 _strtoul.o(.text)
AppBootset_CmdAppswitch 0x01000325 Thumb Code 282 app_bootset.o(i.AppBootset_CmdAppswitch) __scatterload 0x01000325 Thumb Code 28 init.o(.text)
AppBootset_CmdBsdump 0x010005fd Thumb Code 28 app_bootset.o(i.AppBootset_CmdBsdump) __scatterload_rt2 0x01000325 Thumb Code 0 init.o(.text)
AppBootset_CmdBsset 0x0100061d Thumb Code 348 app_bootset.o(i.AppBootset_CmdBsset) _chval 0x01000349 Thumb Code 30 _chval.o(.text)
DMA_DeInit 0x01000c25 Thumb Code 152 n32wb03x_dma.o(i.DMA_DeInit) AppBootset_CmdAppswitch 0x01000369 Thumb Code 282 app_bootset.o(i.AppBootset_CmdAppswitch)
DMA_EnableChannel 0x01000cc5 Thumb Code 24 n32wb03x_dma.o(i.DMA_EnableChannel) AppBootset_CmdBsdump 0x01000641 Thumb Code 28 app_bootset.o(i.AppBootset_CmdBsdump)
DMA_GetCurrDataCounter 0x01000ce1 Thumb Code 8 n32wb03x_dma.o(i.DMA_GetCurrDataCounter) AppBootset_CmdBsset 0x01000661 Thumb Code 348 app_bootset.o(i.AppBootset_CmdBsset)
DMA_Init 0x01000ce9 Thumb Code 58 n32wb03x_dma.o(i.DMA_Init) DMA_DeInit 0x01000c69 Thumb Code 152 n32wb03x_dma.o(i.DMA_DeInit)
DMA_RequestRemap 0x01000d29 Thumb Code 16 n32wb03x_dma.o(i.DMA_RequestRemap) DMA_EnableChannel 0x01000d09 Thumb Code 24 n32wb03x_dma.o(i.DMA_EnableChannel)
GPIO_InitPeripheral 0x01000d39 Thumb Code 262 n32wb03x_gpio.o(i.GPIO_InitPeripheral) DMA_GetCurrDataCounter 0x01000d25 Thumb Code 8 n32wb03x_dma.o(i.DMA_GetCurrDataCounter)
GPIO_InitStruct 0x01000e41 Thumb Code 24 n32wb03x_gpio.o(i.GPIO_InitStruct) DMA_Init 0x01000d2d Thumb Code 58 n32wb03x_dma.o(i.DMA_Init)
OTPTrim_Read 0x01000e5d Thumb Code 192 system_n32wb03x.o(i.OTPTrim_Read) DMA_RequestRemap 0x01000d6d Thumb Code 16 n32wb03x_dma.o(i.DMA_RequestRemap)
Qflash_Erase_Sector 0x01000f29 Thumb Code 54 n32wb03x_qflash.o(i.Qflash_Erase_Sector) GPIO_InitPeripheral 0x01000d7d Thumb Code 262 n32wb03x_gpio.o(i.GPIO_InitPeripheral)
Qflash_Init 0x01000f65 Thumb Code 36 n32wb03x_qflash.o(i.Qflash_Init) GPIO_InitStruct 0x01000e85 Thumb Code 24 n32wb03x_gpio.o(i.GPIO_InitStruct)
Qflash_Write 0x01000f9d Thumb Code 62 n32wb03x_qflash.o(i.Qflash_Write) GPIO_ReadInputDataBit 0x01000ea1 Thumb Code 20 n32wb03x_gpio.o(i.GPIO_ReadInputDataBit)
RCC_EnableAHBPeriphClk 0x01000fe1 Thumb Code 28 n32wb03x_rcc.o(i.RCC_EnableAHBPeriphClk) OTPTrim_Read 0x01000eb5 Thumb Code 192 system_n32wb03x.o(i.OTPTrim_Read)
RCC_EnableAPB2PeriphClk 0x01001001 Thumb Code 28 n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphClk) Qflash_Erase_Sector 0x01000f81 Thumb Code 54 n32wb03x_qflash.o(i.Qflash_Erase_Sector)
RCC_GetClocksFreqValue 0x01001021 Thumb Code 140 n32wb03x_rcc.o(i.RCC_GetClocksFreqValue) Qflash_Init 0x01000fbd Thumb Code 36 n32wb03x_qflash.o(i.Qflash_Init)
SystemInit 0x010011f5 Thumb Code 250 system_n32wb03x.o(i.SystemInit) Qflash_Write 0x01000ff5 Thumb Code 62 n32wb03x_qflash.o(i.Qflash_Write)
SystemTrimValueRead 0x01001311 Thumb Code 20 system_n32wb03x.o(i.SystemTrimValueRead) RCC_EnableAHBPeriphClk 0x01001039 Thumb Code 28 n32wb03x_rcc.o(i.RCC_EnableAHBPeriphClk)
USART_Enable 0x01001325 Thumb Code 26 n32wb03x_usart.o(i.USART_Enable) RCC_EnableAPB2PeriphClk 0x01001059 Thumb Code 28 n32wb03x_rcc.o(i.RCC_EnableAPB2PeriphClk)
USART_EnableDMA 0x01001345 Thumb Code 20 n32wb03x_usart.o(i.USART_EnableDMA) RCC_GetClocksFreqValue 0x01001079 Thumb Code 140 n32wb03x_rcc.o(i.RCC_GetClocksFreqValue)
USART_GetFlagStatus 0x01001359 Thumb Code 30 n32wb03x_usart.o(i.USART_GetFlagStatus) SystemInit 0x0100124d Thumb Code 250 system_n32wb03x.o(i.SystemInit)
USART_Init 0x01001379 Thumb Code 162 n32wb03x_usart.o(i.USART_Init) SystemTrimValueRead 0x01001369 Thumb Code 20 system_n32wb03x.o(i.SystemTrimValueRead)
USART_SendData 0x0100142d Thumb Code 8 n32wb03x_usart.o(i.USART_SendData) USART_Enable 0x0100137d Thumb Code 26 n32wb03x_usart.o(i.USART_Enable)
__aeabi_errno_addr 0x01001435 Thumb Code 4 errno.o(i.__aeabi_errno_addr) USART_EnableDMA 0x0100139d Thumb Code 20 n32wb03x_usart.o(i.USART_EnableDMA)
__rt_errno_addr 0x01001435 Thumb Code 0 errno.o(i.__aeabi_errno_addr) USART_GetFlagStatus 0x010013b1 Thumb Code 30 n32wb03x_usart.o(i.USART_GetFlagStatus)
__scatterload_copy 0x0100143d Thumb Code 14 handlers.o(i.__scatterload_copy) USART_Init 0x010013d1 Thumb Code 162 n32wb03x_usart.o(i.USART_Init)
__scatterload_null 0x0100144b Thumb Code 2 handlers.o(i.__scatterload_null) USART_SendData 0x01001485 Thumb Code 8 n32wb03x_usart.o(i.USART_SendData)
__scatterload_zeroinit 0x0100144d Thumb Code 14 handlers.o(i.__scatterload_zeroinit) __aeabi_errno_addr 0x0100148d Thumb Code 4 errno.o(i.__aeabi_errno_addr)
app_ota_abort 0x01001469 Thumb Code 32 app_ota.o(i.app_ota_abort) __rt_errno_addr 0x0100148d Thumb Code 0 errno.o(i.__aeabi_errno_addr)
app_ota_chan_idle 0x010014a5 Thumb Code 12 app_ota.o(i.app_ota_chan_idle) __scatterload_copy 0x01001495 Thumb Code 14 handlers.o(i.__scatterload_copy)
app_ota_chan_rx 0x010014b9 Thumb Code 298 app_ota.o(i.app_ota_chan_rx) __scatterload_null 0x010014a3 Thumb Code 2 handlers.o(i.__scatterload_null)
app_ota_chan_rx_uart 0x010015f9 Thumb Code 26 app_ota.o(i.app_ota_chan_rx_uart) __scatterload_zeroinit 0x010014a5 Thumb Code 14 handlers.o(i.__scatterload_zeroinit)
app_ota_handle_frame 0x0100161d Thumb Code 106 app_ota.o(i.app_ota_handle_frame) app_ota_abort 0x010014c1 Thumb Code 32 app_ota.o(i.app_ota_abort)
app_ota_reset_poll 0x01001699 Thumb Code 70 app_ota.o(i.app_ota_reset_poll) app_ota_chan_idle 0x010014fd Thumb Code 12 app_ota.o(i.app_ota_chan_idle)
boot_cli_run 0x010016f5 Thumb Code 220 boot_cli.o(i.boot_cli_run) app_ota_chan_rx 0x01001511 Thumb Code 298 app_ota.o(i.app_ota_chan_rx)
boot_delay_ms 0x0100183d Thumb Code 24 boot_usart.o(i.boot_delay_ms) app_ota_chan_rx_uart 0x01001651 Thumb Code 26 app_ota.o(i.app_ota_chan_rx_uart)
boot_millis 0x01001855 Thumb Code 30 boot_usart.o(i.boot_millis) app_ota_handle_frame 0x01001675 Thumb Code 106 app_ota.o(i.app_ota_handle_frame)
boot_usart_init 0x0100187d Thumb Code 238 boot_usart.o(i.boot_usart_init) app_ota_reset_poll 0x010016f1 Thumb Code 70 app_ota.o(i.app_ota_reset_poll)
boot_usart_read 0x0100198d Thumb Code 54 boot_usart.o(i.boot_usart_read) boot_cli_run 0x01001799 Thumb Code 240 boot_cli.o(i.boot_cli_run)
boot_usart_write 0x010019e5 Thumb Code 42 boot_usart.o(i.boot_usart_write) boot_delay_ms 0x01001a39 Thumb Code 24 boot_usart.o(i.boot_delay_ms)
caiic_crc32 0x01001c25 Thumb Code 62 boot_crc32.o(i.caiic_crc32) boot_millis 0x01001a91 Thumb Code 30 boot_usart.o(i.boot_millis)
cli_printf 0x01001d35 Thumb Code 408 boot_cli.o(i.cli_printf) boot_usart_init 0x01001ab9 Thumb Code 238 boot_usart.o(i.boot_usart_init)
cli_write 0x01001ed1 Thumb Code 22 boot_cli.o(i.cli_write) boot_usart_read 0x01001bc9 Thumb Code 54 boot_usart.o(i.boot_usart_read)
main 0x01001f41 Thumb Code 190 main.o(i.main) boot_usart_write 0x01001c21 Thumb Code 42 boot_usart.o(i.boot_usart_write)
TRIM_READ_CMD_CODE 0x010028ce Data 320 system_n32wb03x.o(.constdata) caiic_crc32 0x01001e61 Thumb Code 62 boot_crc32.o(i.caiic_crc32)
CMD_RDID 0x01002a0e Data 152 system_n32wb03x.o(.constdata) cli_printf 0x01001f71 Thumb Code 408 boot_cli.o(i.cli_printf)
const_qflash_cmd 0x01002b20 Data 804 n32wb03x_qflash.o(.constdata) cli_write 0x0100210d Thumb Code 22 boot_cli.o(i.cli_write)
__ctype_table 0x01002e44 Data 129 ctype_o.o(.constdata) main 0x0100217d Thumb Code 210 main.o(i.main)
Region$$Table$$Base 0x010031fc Number 0 anon$$obj.o(Region$$Table) TRIM_READ_CMD_CODE 0x01002b4e Data 320 system_n32wb03x.o(.constdata)
Region$$Table$$Limit 0x0100321c Number 0 anon$$obj.o(Region$$Table) CMD_RDID 0x01002c8e Data 152 system_n32wb03x.o(.constdata)
const_qflash_cmd 0x01002da0 Data 804 n32wb03x_qflash.o(.constdata)
__ctype_table 0x010030c4 Data 129 ctype_o.o(.constdata)
Region$$Table$$Base 0x0100348c Number 0 anon$$obj.o(Region$$Table)
Region$$Table$$Limit 0x010034ac Number 0 anon$$obj.o(Region$$Table)
SystemCoreClock 0x20004000 Data 4 system_n32wb03x.o(.data) SystemCoreClock 0x20004000 Data 4 system_n32wb03x.o(.data)
CMD_FLASH_SE 0x20004050 Data 4 n32wb03x_qflash.o(.data) CMD_FLASH_SE 0x20004050 Data 4 n32wb03x_qflash.o(.data)
CMD_FLASH_WRITE 0x20004054 Data 4 n32wb03x_qflash.o(.data) CMD_FLASH_WRITE 0x20004054 Data 4 n32wb03x_qflash.o(.data)
@ -778,157 +811,164 @@ Memory Map of the image
Image Entry point : 0x010000c1 Image Entry point : 0x010000c1
Load Region LR_IROM1 (Base: 0x01000000, Size: 0x0000327c, Max: 0x00004000, ABSOLUTE) Load Region LR_IROM1 (Base: 0x01000000, Size: 0x0000350c, Max: 0x00004000, ABSOLUTE)
Execution Region ER_IROM1 (Exec base: 0x01000000, Load base: 0x01000000, Size: 0x0000321c, Max: 0x00004000, ABSOLUTE) Execution Region ER_IROM1 (Exec base: 0x01000000, Load base: 0x01000000, Size: 0x000034ac, Max: 0x00004000, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x01000000 0x01000000 0x000000c0 Data RO 3 RESET startup_n32wb03x.o 0x01000000 0x01000000 0x000000c0 Data RO 3 RESET startup_n32wb03x.o
0x010000c0 0x010000c0 0x00000000 Code RO 1210 * .ARM.Collect$$$$00000000 mc_p.l(entry.o) 0x010000c0 0x010000c0 0x00000000 Code RO 1225 * .ARM.Collect$$$$00000000 mc_p.l(entry.o)
0x010000c0 0x010000c0 0x00000004 Code RO 1229 .ARM.Collect$$$$00000001 mc_p.l(entry2.o) 0x010000c0 0x010000c0 0x00000004 Code RO 1250 .ARM.Collect$$$$00000001 mc_p.l(entry2.o)
0x010000c4 0x010000c4 0x00000004 Code RO 1232 .ARM.Collect$$$$00000004 mc_p.l(entry5.o) 0x010000c4 0x010000c4 0x00000004 Code RO 1253 .ARM.Collect$$$$00000004 mc_p.l(entry5.o)
0x010000c8 0x010000c8 0x00000000 Code RO 1234 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o) 0x010000c8 0x010000c8 0x00000000 Code RO 1255 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o)
0x010000c8 0x010000c8 0x00000000 Code RO 1236 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o) 0x010000c8 0x010000c8 0x00000000 Code RO 1257 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o)
0x010000c8 0x010000c8 0x00000008 Code RO 1237 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o) 0x010000c8 0x010000c8 0x00000008 Code RO 1258 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o)
0x010000d0 0x010000d0 0x00000000 Code RO 1239 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o) 0x010000d0 0x010000d0 0x00000000 Code RO 1260 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o)
0x010000d0 0x010000d0 0x00000000 Code RO 1241 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o) 0x010000d0 0x010000d0 0x00000000 Code RO 1262 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o)
0x010000d0 0x010000d0 0x00000004 Code RO 1230 .ARM.Collect$$$$00002712 mc_p.l(entry2.o) 0x010000d0 0x010000d0 0x00000004 Code RO 1251 .ARM.Collect$$$$00002712 mc_p.l(entry2.o)
0x010000d4 0x010000d4 0x0000000e Code RO 10 .emb_text system_n32wb03x.o 0x010000d4 0x010000d4 0x0000000e Code RO 10 .emb_text system_n32wb03x.o
0x010000e2 0x010000e2 0x00000002 PAD 0x010000e2 0x010000e2 0x00000002 PAD
0x010000e4 0x010000e4 0x0000001c Code RO 4 .text startup_n32wb03x.o 0x010000e4 0x010000e4 0x0000001c Code RO 4 .text startup_n32wb03x.o
0x01000100 0x01000100 0x0000002c Code RO 1213 .text mc_p.l(uidiv.o) 0x01000100 0x01000100 0x0000002c Code RO 1228 .text mc_p.l(uidiv.o)
0x0100012c 0x0100012c 0x00000024 Code RO 1215 .text mc_p.l(memcpya.o) 0x0100012c 0x0100012c 0x00000024 Code RO 1230 .text mc_p.l(memcpya.o)
0x01000150 0x01000150 0x00000024 Code RO 1217 .text mc_p.l(memseta.o) 0x01000150 0x01000150 0x00000024 Code RO 1232 .text mc_p.l(memseta.o)
0x01000174 0x01000174 0x0000000e Code RO 1219 .text mc_p.l(strlen.o) 0x01000174 0x01000174 0x0000000e Code RO 1234 .text mc_p.l(strlen.o)
0x01000182 0x01000182 0x0000001c Code RO 1221 .text mc_p.l(strcmp.o) 0x01000182 0x01000182 0x0000001c Code RO 1236 .text mc_p.l(strcmp.o)
0x0100019e 0x0100019e 0x0000001a Code RO 1223 .text mc_p.l(memcmp.o) 0x0100019e 0x0100019e 0x00000014 Code RO 1238 .text mc_p.l(memchr.o)
0x010001b8 0x010001b8 0x00000076 Code RO 1227 .text mc_p.l(strtoul.o) 0x010001b2 0x010001b2 0x0000001a Code RO 1240 .text mc_p.l(memcmp.o)
0x0100022e 0x0100022e 0x00000002 PAD 0x010001cc 0x010001cc 0x00000012 Code RO 1242 .text mc_p.l(strcpy.o)
0x01000230 0x01000230 0x00000008 Code RO 1243 .text mc_p.l(ctype_o.o) 0x010001de 0x010001de 0x0000001e Code RO 1244 .text mc_p.l(strncmp.o)
0x01000238 0x01000238 0x000000a6 Code RO 1278 .text mc_p.l(_strtoul.o) 0x010001fc 0x010001fc 0x00000076 Code RO 1248 .text mc_p.l(strtoul.o)
0x010002de 0x010002de 0x00000002 PAD 0x01000272 0x01000272 0x00000002 PAD
0x010002e0 0x010002e0 0x00000024 Code RO 1280 .text mc_p.l(init.o) 0x01000274 0x01000274 0x00000008 Code RO 1264 .text mc_p.l(ctype_o.o)
0x01000304 0x01000304 0x0000001e Code RO 1282 .text mc_p.l(_chval.o) 0x0100027c 0x0100027c 0x000000a6 Code RO 1299 .text mc_p.l(_strtoul.o)
0x01000322 0x01000322 0x00000002 PAD 0x01000322 0x01000322 0x00000002 PAD
0x01000324 0x01000324 0x000002d8 Code RO 495 i.AppBootset_CmdAppswitch app_bootset.o 0x01000324 0x01000324 0x00000024 Code RO 1301 .text mc_p.l(init.o)
0x010005fc 0x010005fc 0x00000020 Code RO 496 i.AppBootset_CmdBsdump app_bootset.o 0x01000348 0x01000348 0x0000001e Code RO 1303 .text mc_p.l(_chval.o)
0x0100061c 0x0100061c 0x000002f8 Code RO 497 i.AppBootset_CmdBsset app_bootset.o 0x01000366 0x01000366 0x00000002 PAD
0x01000914 0x01000914 0x000000e0 Code RO 290 i.CmdDevInfo boot_cli.o 0x01000368 0x01000368 0x000002d8 Code RO 510 i.AppBootset_CmdAppswitch app_bootset.o
0x010009f4 0x010009f4 0x000000b4 Code RO 291 i.CmdHelp boot_cli.o 0x01000640 0x01000640 0x00000020 Code RO 511 i.AppBootset_CmdBsdump app_bootset.o
0x01000aa8 0x01000aa8 0x0000001c Code RO 292 i.CmdOta boot_cli.o 0x01000660 0x01000660 0x000002f8 Code RO 512 i.AppBootset_CmdBsset app_bootset.o
0x01000ac4 0x01000ac4 0x0000003c Code RO 293 i.CmdReset boot_cli.o 0x01000958 0x01000958 0x000000e0 Code RO 295 i.CmdDevInfo boot_cli.o
0x01000b00 0x01000b00 0x000000b0 Code RO 294 i.CmdUartInfo boot_cli.o 0x01000a38 0x01000a38 0x000000b4 Code RO 296 i.CmdHelp boot_cli.o
0x01000bb0 0x01000bb0 0x00000074 Code RO 295 i.CmdVersion boot_cli.o 0x01000aec 0x01000aec 0x0000001c Code RO 297 i.CmdOta boot_cli.o
0x01000c24 0x01000c24 0x000000a0 Code RO 1088 i.DMA_DeInit n32wb03x_dma.o 0x01000b08 0x01000b08 0x0000003c Code RO 298 i.CmdReset boot_cli.o
0x01000cc4 0x01000cc4 0x0000001c Code RO 1089 i.DMA_EnableChannel n32wb03x_dma.o 0x01000b44 0x01000b44 0x000000b0 Code RO 299 i.CmdUartInfo boot_cli.o
0x01000ce0 0x01000ce0 0x00000008 Code RO 1090 i.DMA_GetCurrDataCounter n32wb03x_dma.o 0x01000bf4 0x01000bf4 0x00000074 Code RO 300 i.CmdVersion boot_cli.o
0x01000ce8 0x01000ce8 0x00000040 Code RO 1093 i.DMA_Init n32wb03x_dma.o 0x01000c68 0x01000c68 0x000000a0 Code RO 1103 i.DMA_DeInit n32wb03x_dma.o
0x01000d28 0x01000d28 0x00000010 Code RO 1094 i.DMA_RequestRemap n32wb03x_dma.o 0x01000d08 0x01000d08 0x0000001c Code RO 1104 i.DMA_EnableChannel n32wb03x_dma.o
0x01000d38 0x01000d38 0x00000106 Code RO 800 i.GPIO_InitPeripheral n32wb03x_gpio.o 0x01000d24 0x01000d24 0x00000008 Code RO 1105 i.DMA_GetCurrDataCounter n32wb03x_dma.o
0x01000e3e 0x01000e3e 0x00000002 PAD 0x01000d2c 0x01000d2c 0x00000040 Code RO 1108 i.DMA_Init n32wb03x_dma.o
0x01000e40 0x01000e40 0x0000001c Code RO 801 i.GPIO_InitStruct n32wb03x_gpio.o 0x01000d6c 0x01000d6c 0x00000010 Code RO 1109 i.DMA_RequestRemap n32wb03x_dma.o
0x01000e5c 0x01000e5c 0x000000cc Code RO 11 i.OTPTrim_Read system_n32wb03x.o 0x01000d7c 0x01000d7c 0x00000106 Code RO 815 i.GPIO_InitPeripheral n32wb03x_gpio.o
0x01000f28 0x01000f28 0x0000003c Code RO 1167 i.Qflash_Erase_Sector n32wb03x_qflash.o 0x01000e82 0x01000e82 0x00000002 PAD
0x01000f64 0x01000f64 0x00000038 Code RO 1168 i.Qflash_Init n32wb03x_qflash.o 0x01000e84 0x01000e84 0x0000001c Code RO 816 i.GPIO_InitStruct n32wb03x_gpio.o
0x01000f9c 0x01000f9c 0x00000044 Code RO 1170 i.Qflash_Write n32wb03x_qflash.o 0x01000ea0 0x01000ea0 0x00000014 Code RO 818 i.GPIO_ReadInputDataBit n32wb03x_gpio.o
0x01000fe0 0x01000fe0 0x00000020 Code RO 576 i.RCC_EnableAHBPeriphClk n32wb03x_rcc.o 0x01000eb4 0x01000eb4 0x000000cc Code RO 11 i.OTPTrim_Read system_n32wb03x.o
0x01001000 0x01001000 0x00000020 Code RO 580 i.RCC_EnableAPB2PeriphClk n32wb03x_rcc.o 0x01000f80 0x01000f80 0x0000003c Code RO 1182 i.Qflash_Erase_Sector n32wb03x_qflash.o
0x01001020 0x01001020 0x000000a4 Code RO 588 i.RCC_GetClocksFreqValue n32wb03x_rcc.o 0x01000fbc 0x01000fbc 0x00000038 Code RO 1183 i.Qflash_Init n32wb03x_qflash.o
0x010010c4 0x010010c4 0x00000130 Code RO 12 i.RCC_HsiCalib system_n32wb03x.o 0x01000ff4 0x01000ff4 0x00000044 Code RO 1185 i.Qflash_Write n32wb03x_qflash.o
0x010011f4 0x010011f4 0x0000011c Code RO 16 i.SystemInit system_n32wb03x.o 0x01001038 0x01001038 0x00000020 Code RO 591 i.RCC_EnableAHBPeriphClk n32wb03x_rcc.o
0x01001310 0x01001310 0x00000014 Code RO 18 i.SystemTrimValueRead system_n32wb03x.o 0x01001058 0x01001058 0x00000020 Code RO 595 i.RCC_EnableAPB2PeriphClk n32wb03x_rcc.o
0x01001324 0x01001324 0x00000020 Code RO 922 i.USART_Enable n32wb03x_usart.o 0x01001078 0x01001078 0x000000a4 Code RO 603 i.RCC_GetClocksFreqValue n32wb03x_rcc.o
0x01001344 0x01001344 0x00000014 Code RO 923 i.USART_EnableDMA n32wb03x_usart.o 0x0100111c 0x0100111c 0x00000130 Code RO 12 i.RCC_HsiCalib system_n32wb03x.o
0x01001358 0x01001358 0x0000001e Code RO 929 i.USART_GetFlagStatus n32wb03x_usart.o 0x0100124c 0x0100124c 0x0000011c Code RO 16 i.SystemInit system_n32wb03x.o
0x01001376 0x01001376 0x00000002 PAD 0x01001368 0x01001368 0x00000014 Code RO 18 i.SystemTrimValueRead system_n32wb03x.o
0x01001378 0x01001378 0x000000b4 Code RO 931 i.USART_Init n32wb03x_usart.o 0x0100137c 0x0100137c 0x00000020 Code RO 937 i.USART_Enable n32wb03x_usart.o
0x0100142c 0x0100142c 0x00000008 Code RO 934 i.USART_SendData n32wb03x_usart.o 0x0100139c 0x0100139c 0x00000014 Code RO 938 i.USART_EnableDMA n32wb03x_usart.o
0x01001434 0x01001434 0x00000008 Code RO 1271 i.__aeabi_errno_addr mc_p.l(errno.o) 0x010013b0 0x010013b0 0x0000001e Code RO 944 i.USART_GetFlagStatus n32wb03x_usart.o
0x0100143c 0x0100143c 0x0000000e Code RO 1286 i.__scatterload_copy mc_p.l(handlers.o) 0x010013ce 0x010013ce 0x00000002 PAD
0x0100144a 0x0100144a 0x00000002 Code RO 1287 i.__scatterload_null mc_p.l(handlers.o) 0x010013d0 0x010013d0 0x000000b4 Code RO 946 i.USART_Init n32wb03x_usart.o
0x0100144c 0x0100144c 0x0000000e Code RO 1288 i.__scatterload_zeroinit mc_p.l(handlers.o) 0x01001484 0x01001484 0x00000008 Code RO 949 i.USART_SendData n32wb03x_usart.o
0x0100145a 0x0100145a 0x00000006 Code RO 19 i.__set_PRIMASK system_n32wb03x.o 0x0100148c 0x0100148c 0x00000008 Code RO 1292 i.__aeabi_errno_addr mc_p.l(errno.o)
0x01001460 0x01001460 0x00000006 Code RO 1171 i.__set_PRIMASK n32wb03x_qflash.o 0x01001494 0x01001494 0x0000000e Code RO 1307 i.__scatterload_copy mc_p.l(handlers.o)
0x01001466 0x01001466 0x00000002 PAD 0x010014a2 0x010014a2 0x00000002 Code RO 1308 i.__scatterload_null mc_p.l(handlers.o)
0x01001468 0x01001468 0x0000003c Code RO 386 i.app_ota_abort app_ota.o 0x010014a4 0x010014a4 0x0000000e Code RO 1309 i.__scatterload_zeroinit mc_p.l(handlers.o)
0x010014a4 0x010014a4 0x00000014 Code RO 387 i.app_ota_chan_idle app_ota.o 0x010014b2 0x010014b2 0x00000006 Code RO 19 i.__set_PRIMASK system_n32wb03x.o
0x010014b8 0x010014b8 0x00000140 Code RO 388 i.app_ota_chan_rx app_ota.o 0x010014b8 0x010014b8 0x00000006 Code RO 1186 i.__set_PRIMASK n32wb03x_qflash.o
0x010015f8 0x010015f8 0x00000024 Code RO 389 i.app_ota_chan_rx_uart app_ota.o 0x010014be 0x010014be 0x00000002 PAD
0x0100161c 0x0100161c 0x0000007c Code RO 391 i.app_ota_handle_frame app_ota.o 0x010014c0 0x010014c0 0x0000003c Code RO 401 i.app_ota_abort app_ota.o
0x01001698 0x01001698 0x0000005c Code RO 392 i.app_ota_reset_poll app_ota.o 0x010014fc 0x010014fc 0x00000014 Code RO 402 i.app_ota_chan_idle app_ota.o
0x010016f4 0x010016f4 0x00000148 Code RO 296 i.boot_cli_run boot_cli.o 0x01001510 0x01001510 0x00000140 Code RO 403 i.app_ota_chan_rx app_ota.o
0x0100183c 0x0100183c 0x00000018 Code RO 239 i.boot_delay_ms boot_usart.o 0x01001650 0x01001650 0x00000024 Code RO 404 i.app_ota_chan_rx_uart app_ota.o
0x01001854 0x01001854 0x00000028 Code RO 240 i.boot_millis boot_usart.o 0x01001674 0x01001674 0x0000007c Code RO 406 i.app_ota_handle_frame app_ota.o
0x0100187c 0x0100187c 0x00000110 Code RO 241 i.boot_usart_init boot_usart.o 0x010016f0 0x010016f0 0x0000005c Code RO 407 i.app_ota_reset_poll app_ota.o
0x0100198c 0x0100198c 0x00000040 Code RO 242 i.boot_usart_read boot_usart.o 0x0100174c 0x0100174c 0x0000004c Code RO 301 i.boot_cli_redraw boot_cli.o
0x010019cc 0x010019cc 0x00000018 Code RO 243 i.boot_usart_rx_head boot_usart.o 0x01001798 0x01001798 0x0000015c Code RO 302 i.boot_cli_run boot_cli.o
0x010019e4 0x010019e4 0x00000030 Code RO 244 i.boot_usart_write boot_usart.o 0x010018f4 0x010018f4 0x00000144 Code RO 303 i.boot_cli_tab_complete boot_cli.o
0x01001a14 0x01001a14 0x00000054 Code RO 498 i.bootset_commit app_bootset.o 0x01001a38 0x01001a38 0x00000018 Code RO 244 i.boot_delay_ms boot_usart.o
0x01001a68 0x01001a68 0x0000000e Code RO 499 i.bootset_crc app_bootset.o 0x01001a50 0x01001a50 0x00000040 Code RO 174 i.boot_dl_strap_active main.o
0x01001a76 0x01001a76 0x00000002 PAD 0x01001a90 0x01001a90 0x00000028 Code RO 245 i.boot_millis boot_usart.o
0x01001a78 0x01001a78 0x0000001c Code RO 500 i.bootset_ensure_qflash app_bootset.o 0x01001ab8 0x01001ab8 0x00000110 Code RO 246 i.boot_usart_init boot_usart.o
0x01001a94 0x01001a94 0x0000016c Code RO 501 i.bootset_print app_bootset.o 0x01001bc8 0x01001bc8 0x00000040 Code RO 247 i.boot_usart_read boot_usart.o
0x01001c00 0x01001c00 0x00000024 Code RO 502 i.bootset_valid app_bootset.o 0x01001c08 0x01001c08 0x00000018 Code RO 248 i.boot_usart_rx_head boot_usart.o
0x01001c24 0x01001c24 0x00000044 Code RO 226 i.caiic_crc32 boot_crc32.o 0x01001c20 0x01001c20 0x00000030 Code RO 249 i.boot_usart_write boot_usart.o
0x01001c68 0x01001c68 0x000000cc Code RO 297 i.cli_exec_line boot_cli.o 0x01001c50 0x01001c50 0x00000054 Code RO 513 i.bootset_commit app_bootset.o
0x01001d34 0x01001d34 0x0000019c Code RO 298 i.cli_printf boot_cli.o 0x01001ca4 0x01001ca4 0x0000000e Code RO 514 i.bootset_crc app_bootset.o
0x01001ed0 0x01001ed0 0x00000016 Code RO 299 i.cli_write boot_cli.o 0x01001cb2 0x01001cb2 0x00000002 PAD
0x01001ee6 0x01001ee6 0x00000002 PAD 0x01001cb4 0x01001cb4 0x0000001c Code RO 515 i.bootset_ensure_qflash app_bootset.o
0x01001ee8 0x01001ee8 0x00000034 Code RO 174 i.image_sane main.o 0x01001cd0 0x01001cd0 0x0000016c Code RO 516 i.bootset_print app_bootset.o
0x01001f1c 0x01001f1c 0x00000024 Code RO 175 i.jump_to_app main.o 0x01001e3c 0x01001e3c 0x00000024 Code RO 517 i.bootset_valid app_bootset.o
0x01001f40 0x01001f40 0x00000180 Code RO 176 i.main main.o 0x01001e60 0x01001e60 0x00000044 Code RO 231 i.caiic_crc32 boot_crc32.o
0x010020c0 0x010020c0 0x0000004c Code RO 393 i.ota_crc16 app_ota.o 0x01001ea4 0x01001ea4 0x000000cc Code RO 304 i.cli_exec_line boot_cli.o
0x0100210c 0x0100210c 0x00000040 Code RO 394 i.ota_erase_up_to app_ota.o 0x01001f70 0x01001f70 0x0000019c Code RO 305 i.cli_printf boot_cli.o
0x0100214c 0x0100214c 0x00000170 Code RO 395 i.ota_on_begin app_ota.o 0x0100210c 0x0100210c 0x00000016 Code RO 306 i.cli_write boot_cli.o
0x010022bc 0x010022bc 0x000001a8 Code RO 396 i.ota_on_data app_ota.o 0x01002122 0x01002122 0x00000002 PAD
0x01002464 0x01002464 0x00000170 Code RO 397 i.ota_on_end app_ota.o 0x01002124 0x01002124 0x00000034 Code RO 175 i.image_sane main.o
0x010025d4 0x010025d4 0x00000038 Code RO 398 i.ota_program app_ota.o 0x01002158 0x01002158 0x00000024 Code RO 176 i.jump_to_app main.o
0x0100260c 0x0100260c 0x00000018 Code RO 399 i.ota_rd32 app_ota.o 0x0100217c 0x0100217c 0x000001c4 Code RO 177 i.main main.o
0x01002624 0x01002624 0x0000007c Code RO 400 i.ota_respond app_ota.o 0x01002340 0x01002340 0x0000004c Code RO 408 i.ota_crc16 app_ota.o
0x010026a0 0x010026a0 0x0000001c Code RO 401 i.ota_uart_sink app_ota.o 0x0100238c 0x0100238c 0x00000040 Code RO 409 i.ota_erase_up_to app_ota.o
0x010026bc 0x010026bc 0x000000cc Code RO 402 i.ota_update_bootsetting app_ota.o 0x010023cc 0x010023cc 0x00000170 Code RO 410 i.ota_on_begin app_ota.o
0x01002788 0x01002788 0x0000002e Code RO 503 i.parse_u32 app_bootset.o 0x0100253c 0x0100253c 0x000001a8 Code RO 411 i.ota_on_data app_ota.o
0x010027b6 0x010027b6 0x00000018 Code RO 177 i.puts_boot main.o 0x010026e4 0x010026e4 0x00000170 Code RO 412 i.ota_on_end app_ota.o
0x010027ce 0x010027ce 0x00000002 PAD 0x01002854 0x01002854 0x00000038 Code RO 413 i.ota_program app_ota.o
0x010027d0 0x010027d0 0x00000044 Code RO 20 i.read_flash_ID system_n32wb03x.o 0x0100288c 0x0100288c 0x00000018 Code RO 414 i.ota_rd32 app_ota.o
0x01002814 0x01002814 0x0000004e Code RO 300 i.str_pad boot_cli.o 0x010028a4 0x010028a4 0x0000007c Code RO 415 i.ota_respond app_ota.o
0x01002862 0x01002862 0x0000006c Code RO 301 i.u32_to_str boot_cli.o 0x01002920 0x01002920 0x0000001c Code RO 416 i.ota_uart_sink app_ota.o
0x010028ce 0x010028ce 0x000001d8 Data RO 23 .constdata system_n32wb03x.o 0x0100293c 0x0100293c 0x000000cc Code RO 417 i.ota_update_bootsetting app_ota.o
0x01002aa6 0x01002aa6 0x00000002 PAD 0x01002a08 0x01002a08 0x0000002e Code RO 518 i.parse_u32 app_bootset.o
0x01002aa8 0x01002aa8 0x0000006c Data RO 303 .constdata boot_cli.o 0x01002a36 0x01002a36 0x00000018 Code RO 178 i.puts_boot main.o
0x01002b14 0x01002b14 0x0000000c Data RO 596 .constdata n32wb03x_rcc.o 0x01002a4e 0x01002a4e 0x00000002 PAD
0x01002b20 0x01002b20 0x00000324 Data RO 1173 .constdata n32wb03x_qflash.o 0x01002a50 0x01002a50 0x00000044 Code RO 20 i.read_flash_ID system_n32wb03x.o
0x01002e44 0x01002e44 0x00000081 Data RO 1244 .constdata mc_p.l(ctype_o.o) 0x01002a94 0x01002a94 0x0000004e Code RO 307 i.str_pad boot_cli.o
0x01002ec5 0x01002ec5 0x00000003 PAD 0x01002ae2 0x01002ae2 0x0000006c Code RO 308 i.u32_to_str boot_cli.o
0x01002ec8 0x01002ec8 0x00000004 Data RO 1245 .constdata mc_p.l(ctype_o.o) 0x01002b4e 0x01002b4e 0x000001d8 Data RO 23 .constdata system_n32wb03x.o
0x01002ecc 0x01002ecc 0x0000029a Data RO 304 .conststring boot_cli.o 0x01002d26 0x01002d26 0x00000002 PAD
0x01003166 0x01003166 0x00000002 PAD 0x01002d28 0x01002d28 0x0000006c Data RO 310 .constdata boot_cli.o
0x01003168 0x01003168 0x00000091 Data RO 504 .conststring app_bootset.o 0x01002d94 0x01002d94 0x0000000c Data RO 611 .constdata n32wb03x_rcc.o
0x010031f9 0x010031f9 0x00000003 PAD 0x01002da0 0x01002da0 0x00000324 Data RO 1188 .constdata n32wb03x_qflash.o
0x010031fc 0x010031fc 0x00000020 Data RO 1284 Region$$Table anon$$obj.o 0x010030c4 0x010030c4 0x00000081 Data RO 1265 .constdata mc_p.l(ctype_o.o)
0x01003145 0x01003145 0x00000003 PAD
0x01003148 0x01003148 0x00000004 Data RO 1266 .constdata mc_p.l(ctype_o.o)
0x0100314c 0x0100314c 0x000002aa Data RO 311 .conststring boot_cli.o
0x010033f6 0x010033f6 0x00000002 PAD
0x010033f8 0x010033f8 0x00000091 Data RO 519 .conststring app_bootset.o
0x01003489 0x01003489 0x00000003 PAD
0x0100348c 0x0100348c 0x00000020 Data RO 1305 Region$$Table anon$$obj.o
Execution Region RW_IRAM1 (Exec base: 0x20004000, Load base: 0x0100321c, Size: 0x00001a58, Max: 0x0000c000, ABSOLUTE) Execution Region RW_IRAM1 (Exec base: 0x20004000, Load base: 0x010034ac, Size: 0x00001a58, Max: 0x0000c000, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x20004000 0x0100321c 0x00000004 Data RW 24 .data system_n32wb03x.o 0x20004000 0x010034ac 0x00000004 Data RW 24 .data system_n32wb03x.o
0x20004004 0x01003220 0x00000008 Data RW 246 .data boot_usart.o 0x20004004 0x010034b0 0x00000008 Data RW 251 .data boot_usart.o
0x2000400c 0x01003228 0x00000001 Data RW 305 .data boot_cli.o 0x2000400c 0x010034b8 0x00000001 Data RW 312 .data boot_cli.o
0x2000400d 0x01003229 0x00000003 PAD 0x2000400d 0x010034b9 0x00000003 PAD
0x20004010 0x0100322c 0x0000003d Data RW 404 .data app_ota.o 0x20004010 0x010034bc 0x0000003d Data RW 419 .data app_ota.o
0x2000404d 0x01003269 0x00000001 Data RW 505 .data app_bootset.o 0x2000404d 0x010034f9 0x00000001 Data RW 520 .data app_bootset.o
0x2000404e 0x0100326a 0x00000002 PAD 0x2000404e 0x010034fa 0x00000002 PAD
0x20004050 0x0100326c 0x0000000c Data RW 1174 .data n32wb03x_qflash.o 0x20004050 0x010034fc 0x0000000c Data RW 1189 .data n32wb03x_qflash.o
0x2000405c 0x01003278 0x00000004 Data RW 1274 .data mc_p.l(errno.o) 0x2000405c 0x01003508 0x00000004 Data RW 1295 .data mc_p.l(errno.o)
0x20004060 - 0x00000034 Zero RW 22 .bss system_n32wb03x.o 0x20004060 - 0x00000034 Zero RW 22 .bss system_n32wb03x.o
0x20004094 - 0x00000c00 Zero RW 245 .bss boot_usart.o 0x20004094 - 0x00000c00 Zero RW 250 .bss boot_usart.o
0x20004c94 - 0x000000b0 Zero RW 302 .bss boot_cli.o 0x20004c94 - 0x000000b0 Zero RW 309 .bss boot_cli.o
0x20004d44 - 0x000001e7 Zero RW 403 .bss app_ota.o 0x20004d44 - 0x000001e7 Zero RW 418 .bss app_ota.o
0x20004f2b 0x0100327c 0x00000001 PAD 0x20004f2b 0x0100350c 0x00000001 PAD
0x20004f2c - 0x00000328 Zero RW 1172 .bss n32wb03x_qflash.o 0x20004f2c - 0x00000328 Zero RW 1187 .bss n32wb03x_qflash.o
0x20005254 0x0100327c 0x00000004 PAD 0x20005254 0x0100350c 0x00000004 PAD
0x20005258 - 0x00000800 Zero RW 1 STACK startup_n32wb03x.o 0x20005258 - 0x00000800 Zero RW 1 STACK startup_n32wb03x.o
@ -941,12 +981,12 @@ Image component sizes
2092 1148 145 1 0 6739 app_bootset.o 2092 1148 145 1 0 6739 app_bootset.o
2388 322 0 61 487 12597 app_ota.o 2388 322 0 61 487 12597 app_ota.o
1936 628 774 1 176 15380 boot_cli.o 2356 662 790 1 176 17108 boot_cli.o
68 6 0 0 0 874 boot_crc32.o 68 6 0 0 0 874 boot_crc32.o
472 66 0 8 3072 4161 boot_usart.o 472 66 0 8 3072 4161 boot_usart.o
496 208 0 0 0 5011 main.o 628 262 0 0 0 5643 main.o
276 18 0 0 0 4372 n32wb03x_dma.o 276 18 0 0 0 4372 n32wb03x_dma.o
290 4 0 0 0 2252 n32wb03x_gpio.o 310 4 0 0 0 2948 n32wb03x_gpio.o
190 32 804 12 808 4258 n32wb03x_qflash.o 190 32 804 12 808 4258 n32wb03x_qflash.o
228 32 12 0 0 2848 n32wb03x_rcc.o 228 32 12 0 0 2848 n32wb03x_rcc.o
270 24 0 0 0 5093 n32wb03x_usart.o 270 24 0 0 0 5093 n32wb03x_usart.o
@ -954,7 +994,7 @@ Image component sizes
900 60 472 4 52 124580 system_n32wb03x.o 900 60 472 4 52 124580 system_n32wb03x.o
---------------------------------------------------------------------- ----------------------------------------------------------------------
9648 2556 2438 92 6648 188909 Object Totals 10220 2644 2454 92 6648 191965 Object Totals
0 0 32 0 0 0 (incl. Generated) 0 0 32 0 0 0 (incl. Generated)
14 0 7 5 5 0 (incl. Padding) 14 0 7 5 5 0 (incl. Padding)
@ -976,26 +1016,29 @@ Image component sizes
8 4 0 4 0 60 errno.o 8 4 0 4 0 60 errno.o
30 0 0 0 0 0 handlers.o 30 0 0 0 0 0 handlers.o
36 8 0 0 0 68 init.o 36 8 0 0 0 68 init.o
20 0 0 0 0 60 memchr.o
26 0 0 0 0 72 memcmp.o 26 0 0 0 0 72 memcmp.o
36 0 0 0 0 60 memcpya.o 36 0 0 0 0 60 memcpya.o
36 0 0 0 0 100 memseta.o 36 0 0 0 0 100 memseta.o
28 0 0 0 0 68 strcmp.o 28 0 0 0 0 68 strcmp.o
18 0 0 0 0 60 strcpy.o
14 0 0 0 0 60 strlen.o 14 0 0 0 0 60 strlen.o
30 0 0 0 0 72 strncmp.o
118 0 0 0 0 84 strtoul.o 118 0 0 0 0 84 strtoul.o
44 0 0 0 0 72 uidiv.o 44 0 0 0 0 72 uidiv.o
---------------------------------------------------------------------- ----------------------------------------------------------------------
606 24 136 4 0 848 Library Totals 674 24 136 4 0 1040 Library Totals
6 0 3 0 0 0 (incl. Padding) 6 0 3 0 0 0 (incl. Padding)
---------------------------------------------------------------------- ----------------------------------------------------------------------
Code (inc. data) RO Data RW Data ZI Data Debug Library Name Code (inc. data) RO Data RW Data ZI Data Debug Library Name
600 24 133 4 0 848 mc_p.l 668 24 133 4 0 1040 mc_p.l
---------------------------------------------------------------------- ----------------------------------------------------------------------
606 24 136 4 0 848 Library Totals 674 24 136 4 0 1040 Library Totals
---------------------------------------------------------------------- ----------------------------------------------------------------------
@ -1004,15 +1047,15 @@ Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug Code (inc. data) RO Data RW Data ZI Data Debug
10254 2580 2574 96 6648 186425 Grand Totals 10894 2668 2590 96 6648 189365 Grand Totals
10254 2580 2574 96 6648 186425 ELF Image Totals 10894 2668 2590 96 6648 189365 ELF Image Totals
10254 2580 2574 96 0 0 ROM Totals 10894 2668 2590 96 0 0 ROM Totals
============================================================================== ==============================================================================
Total RO Size (Code + RO Data) 12828 ( 12.53kB) Total RO Size (Code + RO Data) 13484 ( 13.17kB)
Total RW Size (RW Data + ZI Data) 6744 ( 6.59kB) Total RW Size (RW Data + ZI Data) 6744 ( 6.59kB)
Total ROM Size (Code + RO Data + RW Data) 12924 ( 12.62kB) Total ROM Size (Code + RO Data + RW Data) 13580 ( 13.26kB)
============================================================================== ==============================================================================

Binary file not shown.

View File

@ -2,19 +2,19 @@
Rebuild target 'caiic_boot' Rebuild target 'caiic_boot'
assembling startup_n32wb03x.s... assembling startup_n32wb03x.s...
compiling boot_crc32.c... compiling boot_crc32.c...
compiling system_n32wb03x.c...
compiling boot_cli.c...
compiling app_ota.c...
compiling app_bootset.c...
compiling main.c... compiling main.c...
compiling boot_usart.c... compiling boot_usart.c...
compiling system_n32wb03x.c...
compiling app_bootset.c...
compiling n32wb03x_gpio.c... compiling n32wb03x_gpio.c...
compiling n32wb03x_usart.c...
compiling n32wb03x_rcc.c... compiling n32wb03x_rcc.c...
compiling boot_cli.c... compiling n32wb03x_usart.c...
compiling n32wb03x_dma.c... compiling n32wb03x_dma.c...
compiling app_ota.c...
compiling n32wb03x_qflash.c... compiling n32wb03x_qflash.c...
linking... linking...
Program Size: Code=10254 RO-data=2574 RW-data=96 ZI-data=6648 Program Size: Code=10894 RO-data=2590 RW-data=96 ZI-data=6648
FromELF: creating hex file... FromELF: creating hex file...
After Build - User command #1: fromelf --bin --output=.\bin\caiic_boot.bin .\Objects\caiic_boot.axf 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). ".\Objects\caiic_boot.axf" - 0 Error(s), 0 Warning(s).

View File

@ -1,7 +1,8 @@
/** /**
* @file boot_cli.c * @file boot_cli.c
* @brief Bootloader download-mode CLI: bare-metal polled line editor + * @brief Bootloader download-mode CLI: bare-metal polled line editor
* command table, and the UART OTA binary frame mode. * (echo, backspace, TAB command-name completion) + command table,
* and the UART OTA binary frame mode.
* *
* Wire-compatible with the application's UART CLI so that * Wire-compatible with the application's UART CLI so that
* tools/ble_ota_update.py works unchanged against the bootloader: * tools/ble_ota_update.py works unchanged against the bootloader:
@ -31,6 +32,7 @@
#define CLI_LINE_SIZE 80 #define CLI_LINE_SIZE 80
#define CLI_MAX_ARGS 8 #define CLI_MAX_ARGS 8
#define OTA_IDLE_EXIT_MS 3000u /* binary mode fallback exit */ #define OTA_IDLE_EXIT_MS 3000u /* binary mode fallback exit */
#define CLI_KEY_TAB 0x09 /* TAB: command-name completion */
/* ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ */
/* Output (cli_core.h shim implementation) */ /* Output (cli_core.h shim implementation) */
@ -359,17 +361,134 @@ static int cli_exec_line(char* line)
#define BOOT_CLI_PROMPT "caiic->" /* wire-compatible with the app CLI */ #define BOOT_CLI_PROMPT "caiic->" /* wire-compatible with the app CLI */
/**
* @brief Redraw the input line: erase `shownLen` chars, print prompt + line.
* @return new shown length (in the boot CLI this always equals strlen(line)).
*/
static uint16_t boot_cli_redraw(const char* line, uint16_t shownLen)
{
uint16_t i;
uint16_t len = (uint16_t)strlen(line);
cli_write("\r" BOOT_CLI_PROMPT);
for (i = 0; i < shownLen; i++)
{
cli_write(" ");
}
cli_write("\r" BOOT_CLI_PROMPT);
if (len > 0u)
{
boot_usart_write((const uint8_t*)line, len);
}
return len;
}
/**
* @brief TAB completion on the first token of the line (command name only).
* Single match: complete it and append a space.
* Multiple matches: extend to the common prefix, or list candidates.
* Ported from the application CLI (mcm-ddc-ble/src/app_cli.c).
*/
static uint16_t boot_cli_tab_complete(char* line, uint16_t len)
{
char common[CLI_LINE_SIZE];
uint16_t commonLen = 0;
int matchCount = 0;
uint32_t i;
/* Only complete the first token (no space typed yet) */
if (memchr(line, ' ', len) != NULL)
{
return len;
}
line[len] = '\0';
for (i = 0; i < CLI_CMD_COUNT; i++)
{
const char* name = s_cmds[i].name;
if (strncmp(name, line, len) == 0)
{
if (matchCount == 0)
{
strcpy(common, name);
commonLen = (uint16_t)strlen(common);
}
else
{
/* shrink common to the shared prefix */
while (commonLen > len && strncmp(common, name, commonLen) != 0)
{
commonLen--;
}
common[commonLen] = '\0';
}
matchCount++;
}
}
if (matchCount == 0)
{
return len;
}
if (matchCount == 1)
{
/* complete the command name + one space */
while (len < CLI_LINE_SIZE - 1u && len < commonLen)
{
boot_usart_write((const uint8_t*)&common[len], 1);
line[len] = common[len];
len++;
}
if (len < CLI_LINE_SIZE - 1u)
{
line[len] = ' ';
len++;
cli_write(" ");
}
return len;
}
if (commonLen > len)
{
/* extend to the common prefix */
while (len < CLI_LINE_SIZE - 1u && len < commonLen)
{
boot_usart_write((const uint8_t*)&common[len], 1);
line[len] = common[len];
len++;
}
}
else
{
/* ambiguous: list the candidates and redraw */
cli_write("\r\n");
for (i = 0; i < CLI_CMD_COUNT; i++)
{
const char* name = s_cmds[i].name;
if (strncmp(name, line, len) == 0)
{
cli_write(name);
cli_write(" ");
}
}
cli_write("\r\n");
boot_cli_redraw(line, len);
}
return len;
}
/** /**
* @brief Download-mode main loop. Never returns (leaves via reset only). * @brief Download-mode main loop. Never returns (leaves via reset only).
*/ */
void boot_cli_run(void) void boot_cli_run(void)
{ {
static char s_line[CLI_LINE_SIZE]; static char s_line[CLI_LINE_SIZE];
uint8_t len = 0; uint16_t len = 0;
uint32_t otaLastRx = 0; uint32_t otaLastRx = 0;
cli_write("\r\nCLI ready (bootloader download mode). Type 'help' for commands.\r\n" cli_write("\r\nCLI ready (bootloader download mode). Type 'help' for commands "
BOOT_CLI_PROMPT); "(TAB = complete).\r\n" BOOT_CLI_PROMPT);
for (;;) for (;;)
{ {
@ -424,6 +543,10 @@ void boot_cli_run(void)
} }
break; break;
case CLI_KEY_TAB:
len = boot_cli_tab_complete(s_line, len);
break;
default: default:
if (ch >= 0x20u && len < CLI_LINE_SIZE - 1u) if (ch >= 0x20u && len < CLI_LINE_SIZE - 1u)
{ {

View File

@ -6,6 +6,6 @@
#ifndef __BOOT_VERSION_H__ #ifndef __BOOT_VERSION_H__
#define __BOOT_VERSION_H__ #define __BOOT_VERSION_H__
#define BOOT_FW_VERSION "V1.01.00" #define BOOT_FW_VERSION "V1.01.02"
#endif /* __BOOT_VERSION_H__ */ #endif /* __BOOT_VERSION_H__ */

View File

@ -7,6 +7,8 @@
* production download and bricked-device recovery. * production download and bricked-device recovery.
* *
* Download mode entry: * Download mode entry:
* 0. strap pin held HIGH (3.3 V) at reset - forces download mode
* deterministically, no host on the UART needed,
* 1. press Enter within the 2 s window printed in the boot banner, or * 1. press Enter within the 2 s window printed in the boot banner, or
* 2. automatic when there is no jumpable image: the bootsetting record * 2. automatic when there is no jumpable image: the bootsetting record
* is invalid AND the APP1 vector table fails sanity (SP outside the * is invalid AND the APP1 vector table fails sanity (SP outside the
@ -34,6 +36,16 @@
#define SRAM_SP_MIN 0x20004001u #define SRAM_SP_MIN 0x20004001u
#define SRAM_SP_MAX 0x2000C000u #define SRAM_SP_MAX 0x2000C000u
/* Download-mode strap pin: tie it HIGH (the board's 3.3 V rail) at reset to
* force download mode. PB5 is free on the STB board (not SWD PA4/PA5, not
* USART1 PB6/PB7, not LED PB0/PA6, not 32.768 kHz crystal PB8/PB9, not the
* user keys PB1/PB2) and is broken out on header J3 next to the UART pins.
* The internal pull-down keeps the un-strapped state LOW (normal boot); an
* external 3.3 V drive overrides that weak pull-down cleanly. */
#define BOOT_DL_STRAP_GPIO GPIOB
#define BOOT_DL_STRAP_CLK RCC_APB2_PERIPH_GPIOB
#define BOOT_DL_STRAP_PIN GPIO_PIN_5
extern void boot_cli_run(void); /* boot_cli.c - never returns */ extern void boot_cli_run(void); /* boot_cli.c - never returns */
/** /**
@ -82,6 +94,24 @@ static void puts_boot(const char* s)
} }
} }
/**
* @brief Configure the download strap pin as a pull-down input and read it.
* @return 1 when the pin is HIGH (3.3 V applied -> enter download mode).
*/
static int boot_dl_strap_active(void)
{
GPIO_InitType s;
RCC_EnableAPB2PeriphClk(BOOT_DL_STRAP_CLK, ENABLE);
GPIO_InitStruct(&s);
s.Pin = BOOT_DL_STRAP_PIN;
s.GPIO_Mode = GPIO_MODE_INPUT;
s.GPIO_Pull = GPIO_PULL_DOWN;
GPIO_InitPeripheral(BOOT_DL_STRAP_GPIO, &s);
return (GPIO_ReadInputDataBit(BOOT_DL_STRAP_GPIO, BOOT_DL_STRAP_PIN) == Bit_SET) ? 1 : 0;
}
/** /**
* @brief Main program. * @brief Main program.
*/ */
@ -114,7 +144,16 @@ int main(void)
puts_boot("\r\n[boot] CAIIC-BOOT " BOOT_FW_VERSION puts_boot("\r\n[boot] CAIIC-BOOT " BOOT_FW_VERSION
" - Enter within 2s: download mode\r\n"); " - Enter within 2s: download mode\r\n");
/* Entry 1: Enter key inside the window */ /* Entry 0 (strap): 3.3 V held on the strap pin forces download mode */
if (boot_dl_strap_active())
{
enter_dl = 1;
puts_boot("[boot] strap pin HIGH (3V3): download mode\r\n");
}
/* Entry 1: Enter key inside the window (skipped when strap already set) */
if (!enter_dl)
{
window_start = boot_millis(); window_start = boot_millis();
while ((boot_millis() - window_start) < BOOT_DL_WINDOW_MS) while ((boot_millis() - window_start) < BOOT_DL_WINDOW_MS)
{ {
@ -125,6 +164,7 @@ int main(void)
break; break;
} }
} }
}
/* Entry 2 (recovery): no jumpable image at all */ /* Entry 2 (recovery): no jumpable image at all */
if (!enter_dl && !bs_ok && !image_sane(CAIIC_APP1_BASE)) if (!enter_dl && !bs_ok && !image_sane(CAIIC_APP1_BASE))

View File

@ -1372,3 +1372,49 @@ APP2 链接的镜像发向 APP1 区。设备端 END 校验(向量表 Reset PC
- 协议文档:`docs/ble_protocol.md` §6.8。注意 **Boot 本身不能被 OTA 更新** - 协议文档:`docs/ble_protocol.md` §6.8。注意 **Boot 本身不能被 OTA 更新**
(OTA 只写 APP bank),升级 Boot 只能 SWD 整片包;已出厂设备的旧 Boot (OTA 只写 APP bank),升级 Boot 只能 SWD 整片包;已出厂设备的旧 Boot
无 download 模式,功能不受影响。 无 download 模式,功能不受影响。
## 53. Boot 新增 3.3V 拉高下载 strapping 机制(2026-09-06,Boot V1.01.01)
- 需求:在不动原有 2s 回车窗口 / 救砖自动进入两条入口的前提下,**新增一条
纯硬件入口**——上电/复位时把某一 IO 脚接 3.3V(板载 VDD 轨),Boot 即进入
download 模式,无需 PC 串口在 2s 内回车,方便产线/现场用一根跳线强制进入。
- 引脚选型(依据 STB 开发板原理图 `nations-tec/N32WB031_STB_V1.3` + SDK
EVAL 例程按键定义):
- 占用脚(必须避开):SWD=PA4/PA5、LED1=PB0(D1)、LED2=PA6(D2)、
USART1=PB6(TX)/PB7(RX)、32.768K 晶振=PB8/PB9、用户键 KEY1=PB1/KEY2=PB2
(SDK `central_hogprh`/`EXTI/KeyInterrupt` 等例程均定义 PB1/PB2);
PA0 为 WKUP 唤醒脚,也避开。
- **选定 PB5**:空闲、纯 GPIO、无板载按键/LED/晶振/SWD/串口占用,且在
排针 J3 上与 PB6(TX)/PB7(RX) 相邻,接跳线最方便。
- 实现(`Boot/src/main.c`):
- 新增宏 `BOOT_DL_STRAP_GPIO=GPIOB` / `BOOT_DL_STRAP_PIN=GPIO_PIN_5` /
`BOOT_DL_STRAP_CLK=RCC_APB2_PERIPH_GPIOB`;
- `boot_dl_strap_active()`:使能 GPIOB 时钟 → 配为**输入 + 内部下拉**
(`GPIO_MODE_INPUT` + `GPIO_PULL_DOWN`)→ 读 `GPIO_ReadInputDataBit`,
为高返回 1。不接跳线时内部弱下拉把脚拉低 → 正常启动;外接 3.3V 强驱动
覆盖弱下拉 → 读高 → 进 download;
- 主流程:banner 后**先查 strap**(置 enter_dl 并打印
`[boot] strap pin HIGH (3V3): download mode`),strap 生效时**跳过 2s
回车窗口**直接进 download;未生效则继续走原有 2s 窗口 + 救砖判断,
两条旧入口行为不变。
- 版本:`Boot/src/boot_version.h` `BOOT_FW_VERSION` V1.01.00 → V1.01.01。
- 用法:板子断电 → 用跳线把 J3 的 PB5 接到 3.3V(J3 上有 VDD_U1/3.3V 脚)→
上电/复位 → 看到 `strap pin HIGH (3V3)` 即进入 download 模式(CLI + OTA)。
- 注意:PB5 与 LPUART 无冲突(本工程未用 LPUART 日志);若日后产品板复用
PB5,只需改上述三个宏即可换脚。
## 54. Boot download CLI 移植 TAB 命令补全(2026-09-06,Boot V1.01.02)
- 从 APP 的 `mcm-ddc-ble/src/app_cli.c` 把 **TAB 命令名自动补全**移植到
`Boot/src/boot_cli.c`(Boot 侧为裸机轮询行编辑器,命令表是本地 `s_cmds[]`,
直接引用本地表而非 cli_core 的枚举函数):
- `boot_cli_tab_complete()`:只补全首 token(已含空格则不补);单匹配→补全
命令名并追加一个空格;多匹配→先扩展到公共前缀,再按 TAB 列出候选;
- `boot_cli_redraw()`:多匹配列出候选后重画 `caiic->` 提示符 + 当前行
(Boot 无历史导航,`shownLen` 恒等于当前行长);
- `boot_cli_run()`:switch 新增 `CLI_KEY_TAB(0x09)` 分支,`len` 由
`uint8_t` 改 `uint16_t`;ready banner 提示 `(TAB = complete)`。
- 行为与 APP 一致:`b`+TAB → 扩到 `bs`(bsdump/bsset 公共前缀),再 TAB 列出
`bsdump bsset`;`d`+TAB → `devinfo `;空行+TAB → 列出全部命令。
- 版本:`Boot/src/boot_version.h` V1.01.01 → V1.01.02;构建 0E/0W,
`Code=10894 RO-data=2590 RW-data=96 ZI-data=6648`,bin 13580B(16KB 区内)。

Binary file not shown.

File diff suppressed because it is too large Load Diff