请问YTM32B1MD1要使用A/B Swap功能,那A面程序和B面程序要怎么透过IDE刻录呢?
-
YTM32B1MD1 这颗料可以按 512KB PFlash 来划分,A/B 各 256KB:
A 面 / PFLASH0:0x00000000 ~ 0x0003FFFF
B 面 / PFLASH1:0x00040000 ~ 0x0007FFFF使用 A/B Swap 时,建议 A、B 两份程序都按 0x00000000 链接,也就是工程的 linker/scatter 不需要为了 B 面改成 0x40000。原因是执行 Boot Swap 后,硬件会把 PFLASH1 映射到启动地址,程序看到的仍然是 0x00000000 起始地址。
烧录方式可以这样做:
-
烧 A 面:
- 使用默认工程地址,直接下载/烧录到 0x00000000。
-
烧 B 面:
- 工程仍按 0x00000000 编译。
- 在 IDE/J-Flash 的下载设置里加地址偏移 0x00040000,或对 bin 文件指定下载起始地址 0x00040000。
- 注意不要再执行整片擦除,否则会把 A 面也擦掉;只擦/写 B 面对应区域。
-
执行 Boot Swap 后:
- 硬件会交换 PFLASH0/PFLASH1 的地址映射。
- 可通过 EFM->STS.BOOT_INFO 判断当前是否从 B 面启动。
- SVD 中也能看到 Boot Swap 命令为 EFM CMD = 0x30。
所以总结就是:A、B 程序都按 0 地址链接;A 面正常烧录,B 面通过烧录工具的 offset/下载地址写到 0x40000。版本号如果只是放在程序内容里,分别编译两份镜像后按上述地址烧录即可。
可参考这篇 AB Swap 说明:
https://forum.ytmicro.com/topic/1163/md14_ab_swap-fee -
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...