关于云途MCAL支持劳德巴赫调试修改说明
-
TRACE32 / Lauterbach 调试下载问题修改说明
日期:2026-07-13
工程目录:
C:\Users\xiangye\Desktop\trace32\YTMicro\ytm32b1ha0\testScript\Spi_Master_Demo_YTM32B1HA01. 问题现象
在 YTM32B1HA0 的 MCAL SPI demo 工程中,使用 Lauterbach TRACE32 下载/调试时出现异常,而使用 Ozone 调试可以正常运行。
过程中出现过的典型现象包括:
FLASH programming error around address ST:0x200FC10--0x200FC1F target reset detected DAP: DebugPortFail: CTRLSTAT=0x00000000 running (core power down)其中
ST:0x200FC10实际应理解为0x0200FC10,该地址位于 PFlash0 的.TEXT段中,对应函数:Spi_Lld_ReadRXBuffer() Mcal/Spi/src/Spi_Lld.c:1425因此该问题不是普通 RAM 地址访问问题,而是 Flash 下载/运行后调试口连接稳定性问题。
2. 原因分析
本次问题主要分为两个阶段。
2.1 下载阶段问题
HA0 PFlash 的 program page 为 32 Byte。原 linker 配置中,部分 load segment 的起始地址或长度没有完全按照 32 Byte 对齐,可能导致 TRACE32 target flash algorithm 在烧写 ELF 时遇到非整页烧写场景,从而在
.TEXT区域附近报 flash programming error。2.2 运行后 DAP 掉线问题
Ozone 工程使用的是 SWD:
Project.SetTargetIF ("SWD")原 TRACE32 脚本使用的是 JTAG:
SYStem.CONFIG DEBUGPORTTYPE JTAGMCAL 程序运行后会执行:
Port_Init(&Port_Config);该配置可能会重新配置部分非 SWD 的 JTAG 复用引脚,导致 TRACE32 使用 JTAG 时,在点击 Go 后调试口失联,出现:
DAP: DebugPortFail: CTRLSTAT=0x00000000 running (core power down)将 TRACE32 调试接口切换为 SWD 后,与 Ozone 保持一致,问题消失。
3. 修改文件清单
本次主要修改以下文件:
board\yt_linker.ld cmake\targets\GENERATED_SDK_TARGET.cmake ..\ytm32b1ha0-debug.cmm其中
ytm32b1ha0-debug.cmm位于 testScript 目录:C:\Users\xiangye\Desktop\trace32\YTMicro\ytm32b1ha0\testScript\ytm32b1ha0-debug.cmm4. 具体修改内容
4.1 修改
board\yt_linker.ld新增 Flash page 对齐宏:
FLASH_PAGE_SIZE = 32;对 Flash 中的 loadable section 结尾进行 32 Byte 对齐:
.BVT .IVT .NC_TEXT .TEXT .ARM对带 ROM copy image 的 RAM section 进行 32 Byte 对齐:
.CODE_RAM .D_DATA .NC_DATA .DATA_RAM重点修改包括:
CODE_RAM_rom_start = ((CODE_RAM_rom_start_not_align + FLASH_PAGE_SIZE - 1) / FLASH_PAGE_SIZE) * FLASH_PAGE_SIZE; D_DATA_rom_start = ((D_DATA_rom_start_not_align + FLASH_PAGE_SIZE - 1) / FLASH_PAGE_SIZE) * FLASH_PAGE_SIZE; NC_DATA_rom_start = ((NC_DATA_rom_start_not_align + FLASH_PAGE_SIZE - 1) / FLASH_PAGE_SIZE) * FLASH_PAGE_SIZE; DATA_RAM_rom_start = ((DATA_RAM_rom_start_not_align + FLASH_PAGE_SIZE - 1) / FLASH_PAGE_SIZE) * FLASH_PAGE_SIZE;并对 section 本身增加对齐:
.CODE_RAM ALIGN(FLASH_PAGE_SIZE) : AT(CODE_RAM_rom_start) .D_DATA ALIGN(FLASH_PAGE_SIZE) : AT(D_DATA_rom_start) .NC_DATA ALIGN(FLASH_PAGE_SIZE) : AT(NC_DATA_rom_start) .DATA_RAM ALIGN(FLASH_PAGE_SIZE) : AT(DATA_RAM_rom_start)修改目的:
- 保证 ELF 中 Flash load segment 的起始地址按 32 Byte 对齐;
- 保证 Flash load segment 的 FileSiz 按 32 Byte 对齐;
- 避免 TRACE32 flash algorithm 处理非整页烧写时失败。
修改后确认的 ELF Program Header 关键段如下:
LOAD 0x02000000 size 0x000a0 LOAD 0x02000800 size 0x003e0 LOAD 0x0200c000 size 0x05d20 LOAD 0x02011d20 size 0x00020 LOAD 0x02011d40 size 0x003c0这些段的起始地址和长度均满足 32 Byte 对齐。
4.2 修改
ytm32b1ha0-debug.cmm4.2.1 降低调试口时钟
由原先较高 JTAG 时钟调整为:
SYStem.JtagClock CTCK 2MHz说明:TRACE32 命令名仍为
JtagClock,但这里用于配置调试口访问速度。降低速度可以提高 reset / flash / run 阶段 DAP 访问稳定性。4.2.2 调试接口由 JTAG 改为 SWD
原配置:
SYStem.CONFIG DEBUGPORTTYPE JTAG修改为:
SYStem.CONFIG DEBUGPORTTYPE SWD修改目的:
- 与 Ozone 工程保持一致;
- 避免 MCAL
Port_Init()运行后复用 JTAG 相关引脚导致 TRACE32 失联; - 解决点击 Go 后出现
DAP: DebugPortFail: CTRLSTAT=0x00000000的问题。
4.2.3 增加看门狗处理
脚本中增加 WDG 解锁和配置操作:
&WDG_SVCR = 0x401A8000 &WDG_CR = 0x401A8004 &WDG_TOVR = 0x401A800C并执行相关
Data.Set操作。修改目的:
- 避免 TRACE32 flash algorithm 运行过程中目标芯片被看门狗复位;
- 减少下载过程中出现
target reset detected的概率。
4.2.4 Flash algorithm 装载地址恢复为原厂推荐区域
当前配置:
FLASH.TARGET 0x20020000 0x20021000 0x1000 ~~~~\..\flashAlgorithm\ytm32b1ha0.bin修改目的:
- 使用 OCRAM 区域执行 flash algorithm;
- 避免与 DTCM / stack / application RAM 区域冲突。
4.2.5 下载文件改为当前 build ELF
当前配置:
FLASH.Program.ALL Data.LOAD.Elf ~~~~\Spi_Master_Demo_YTM32B1HA0\build\Spi_Master_Demo_YTM32B1HA0.elf FLASH.Program.off修改目的:
- 使用修正后的 linker 生成的 ELF;
- 让 TRACE32 按 ELF Program Header 进行 Flash 下载;
- 避免旧 HEX 文件或非当前 build 产物影响验证结果。
4.3.6 烧录后重新加载符号并设置入口
新增:
Data.LOAD.Elf ~~~~\Spi_Master_Demo_YTM32B1HA0\build\Spi_Master_Demo_YTM32B1HA0.elf /NoCODE Register.Set MSP STACK_end Register.Set PSP STACK_end Register.Set PC Reset_Handler修改目的:
- 烧录结束后只加载符号,不重复写 Flash;
- 将 MSP / PSP 设置到应用栈顶;
- 将 PC 设置到
Reset_Handler; - 保证点击 Go 后程序从应用启动入口运行,而不是从 TRACE32 flash algorithm 的上下文继续执行。
4.3.7 关闭非必要窗口操作
注释:
;per.view ~~~~\..\ytm32b1ha0.per ;Data.List修改目的:
- 减少脚本执行后的额外外设访问;
- 避免在目标状态不稳定时触发不必要的 DAP 访问。
5. 验证结果
修改后重新编译工程成功。
Build size:
text 24992 data 992 bss 6224 dec 32208 hex 7dd0ELF load segment 已确认 32 Byte 对齐。
使用修改后的 TRACE32 脚本:
C:\Users\xiangye\Desktop\trace32\YTMicro\ytm32b1ha0\testScript\ytm32b1ha0-debug.cmm执行下载后点击 Go,程序可以正常运行,未再出现 DAP 失联问题。
6. 推荐使用方式
建议使用以下流程:
- 重新编译工程;
- 板子断电重上电;
- 在 TRACE32 中执行:
DO C:\Users\xiangye\Desktop\trace32\YTMicro\ytm32b1ha0\testScript\ytm32b1ha0-debug.cmm- 脚本执行完成后点击 Go。
7. 注意事项
- 当前验证使用的是
ytm32b1ha0-debug.cmm。 ytm32b1ha0-trace.cmm如果后续也要使用,需要同步修改为 SWD,并同步 ELF 下载方式及FLASH.TARGET配置。- 如果后续重新通过配置工具生成工程,
GENERATED_SDK_TARGET.cmake或yt_linker.ld可能被覆盖,需要重新确认本说明中的修改是否仍然保留。 - 主要集中在 linker 对齐、编译配置和 TRACE32 调试下载脚本。
82ad020a-e80a-4c52-b238-d90db2a8be21-HA Trace32 test okt.zip
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...