You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

dsPIC33EP64GP503 Flash擦除失效问题求助

dsPIC33EP64GP503 Flash页擦除失效排查方案

结合你描述的情况(可写入Flash但擦除无效果、无调试器仅靠CAN验证、已调整页边界并使用官方汇编擦除函数),以下是针对性的排查点:

核心排查方向

  • 解锁序列与操作流程正确性
    dsPIC的Flash擦除必须严格遵循解锁流程,任何步骤顺序错误都会导致操作失效:

    1. 确认汇编函数中是否先设置NVMCON为页擦除模式(低5位操作码设为0x04,ERASE位置1);
    2. 检查解锁序列的写入顺序:必须先写0x0000到NVMKEY,再依次写入0xAA99、0x5566,最后置NVMCON的WR位启动擦除;
    3. 擦除完成后必须等待NVMCON的WR位自动清零,才能执行后续操作——如果没等待就读取,会读到旧数据误以为擦除失败。
  • 目标页地址与存储器区域合法性

    1. 确认结构体所在页的起始地址属于程序Flash区域,而非配置位、引导区等受保护区域(参考器件存储器映射表);
    2. 检查NVMADRU和NVMADR寄存器是否正确加载了目标页的24位起始地址——dsPIC33的程序地址是24位,高8位存于NVMADRU,低16位存于NVMADR,漏设高位会导致擦除错误区域。
  • 写保护与寄存器配置检查

    1. 确认NVMCON的WREN位(写使能)在解锁前已置1;
    2. 检查器件写保护相关寄存器(如WPEND、WPCFG),确保目标页未被纳入写保护范围;
    3. 排查是否误设CFGS位,导致操作指向配置空间而非程序Flash。
  • 擦除操作的执行触发检查
    由于无法用调试器,可通过CAN输出以下信息验证:

    1. 擦除操作调用前后,输出NVMCON的寄存器值,确认擦除模式、写使能位是否正确配置;
    2. 擦除完成后立刻读取byStructValid的值:若仍为0x11,说明擦除未执行;若变为0xFF后又被改写,需排查是否擦除后未正确执行写入逻辑,或擦除函数未被正确调用。

汇编擦除函数的关键核对点

以下是dsPIC33EP页擦除的标准流程(对照你的代码片段检查):

; 1. 设置页擦除模式
MOV     #0x4004, W0       ; NVMCON = 0x4004 (ERASE=1, 操作码0x04=页擦除)
MOV     W0, NVMCON
; 2. 加载目标页24位地址(示例:页起始地址0x120000)
MOV     #0x00, W1         ; NVMADRU = 0x00(高8位)
MOV     W1, NVMADRU
MOV     #0x1200, W0       ; NVMADR = 0x1200(低16位)
MOV     W0, NVMADR
; 3. 开启写使能
BSR     NVMCON, #WREN
; 4. 执行解锁序列
MOV     #0x0000, W0
MOV     W0, NVMKEY
MOV     #0xAA99, W0
MOV     W0, NVMKEY
MOV     #0x5566, W0
MOV     W0, NVMKEY
; 5. 启动擦除
BSR     NVMCON, #WR
; 6. 等待擦除完成(WR位自动清零)
WAIT_ERASE:
BTSS    NVMCON, #WR
BRA     WAIT_ERASE
; 7. 关闭写使能
BCLR    NVMCON, #WREN

内容的提问来源于stack exchange,提问作者A Mir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 05:35:21