一、问题背景

        开发环境:keil 5 v5.36

        MCU型号:AT32F437(国产MCU,和STM32F4是一样的)

        下载器:DAP-Link

二、问题现象

        我在给AT32F437这个MCU成功烧录一次程序之后,后面再烧录程序就Keil 报错:CMSIS-DAP-Cortex-M ErrorCannot access Memory (@ Oxe00ffff0, Read, Acc Size: 4 Byte),如图:

三、解决办法

1.进入 AT32 原厂 Bootloader(STM32也一样)

        先断电MCU,短接BOOT0到VCC 3.3V ,BOOT1到GND 0V:

2.检查下载器是否正常连接

        MCU 上电,尝试用 DAP-Link (ST-LINK/Jlink等)连接,在keil的Dbug菜单查看:

3.全片擦除FLASH

        执行 “全片擦除”,清除所有用户代码(理论上不用切片擦除也可以,以防万一就全片擦除)

4.重新烧录程序

        找到一个配套的确定之前可以正常烧录的程序烧录好程序后,再断开BOOT0,按下复位或者重新上点MCU,此时MCU已经恢复正常了!!

        解决问题后,我经过分析发现我出现这个下载失败的根本原因:我下载了一个8M晶振的程序到我这个24M晶振的开发板上面。。。。导致的MCU系统时钟配置错误导致启动异常造成无法下载程序了。

四、常见的下载失败的原因

硬件与连接问题

  1. SWDIO / SWCLK 接反或未连接

  2. GND 未共地或接触不良

  3. Vref 未连接或电压错误

  4. 目标板未上电

  5. 排线过长、信号质量差

  6. 外部电路拉死 SWD 引脚


DAPLink 本体问题

  1. DAPLink 固件过旧或不支持目标 MCU

  2. DAPLink 工作模式错误(MSD / CMSIS-DAP 不匹配)

  3. DAPLink 被其他软件或端口占用


MCU 调试接口问题

  1. 程序中关闭或重映射了 SWD/JTAG

  2. GPIO 复用导致 SWD 引脚失效

  3. 需要 “Connect under Reset” 才能连接


启动与运行状态异常

  1. BOOT0 / BOOT1 配置异常

  2. 程序上电即死循环或 HardFault

  3. 系统时钟配置错误(HSE / PLL)

  4. MCU 进入低功耗模式(STOP / STANDBY)


Flash / 安全相关

  1. Flash 写保护开启

  2. 读保护(RDP Level 1 / 2)

  3. Option Bytes 配置异常


下载工具配置问题

  1. 选择了错误的 MCU 型号

  2. 调试接口模式(SWD / JTAG)不匹配

  3. SWD 下载频率过高

  4. Keil / OpenOCD 配置错误


其他较少见问题

  1. MCU 芯片已损坏

  2. 电源电压不稳定或上电时序异常


工程经验速记

  • 优先查 Vref 和 SWD 接线

  • 下载失败先降 SWD 频率

  • 连不上就复位下连接

  • 怀疑程序干死调试口就全片擦除

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐