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

Pic18F67K22无法读取0x10000地址以上程序存储器问题求助

问题根因与修复方案

按照触发概率从高到低排列可能的原因:

  • 配置位读保护开启
    PIC18F67K22的EBTR(扩展表读保护)系列配置位会限制CPU通过TBLRD指令读取指定区域的程序Flash,被保护区域读取返回固定值0x00,但ICD3这类调试器可以绕过读保护直接读取Flash物理内容,完全匹配你描述的现象。请检查MPLAB工程的配置位设置,关闭所有程序存储区的表读保护,尤其是0x10000以上高位区域对应的保护选项。

  • TBLPTR寄存器赋值时Bank选择错误
    你在Verify_Next_Block段给TBLPTRU赋值前,没有切换到TBLPTR寄存器所在的特殊功能寄存器Bank:此前你执行过banksel EE_25LC_addr_L切换到了自定义变量所在的通用寄存器Bank,此时直接执行movwf TBLPTRU实际写入的是通用寄存器区的对应地址,并未真正修改TBLPTRU的值,导致TBLPTRU一直停留在初始值0x00,访问超过0xFFFF的地址时直接回卷到低位地址,无法读取高位内容。
    修复方案:在给TBLPTR系列寄存器赋值前显式切换Bank,示例如下:

Verify_Next_Block
 banksel TBLPTRL ; 新增:切换到TBLPTR寄存器所在Bank
 movf File_byte_Counter_Low,w
 movwf TBLPTRL 
 movf File_byte_Counter_High,w
 movwf TBLPTRH
 movf File_byte_Counter_Upper,w
 movwf TBLPTRU
  • EEPGD/CFGS位配置错误
    TBLRD指令访问程序Flash要求EECON1寄存器的EEPGD=1、CFGS=0,如果之前操作EEPROM、配置位的逻辑修改过这两个位,校验阶段没有重新配置,就会导致TBLRD实际访问的是EEPROM或配置位空间,返回值为0x00。
    修复方案:在校验循环开始前显式配置EECON1:
Jmp_V
 ; 新增:配置EECON1指向程序Flash
 BSF EECON1, EEPGD
 BCF EECON1, CFGS
 banksel EE_25LC_addr_L
 ...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:54:03