Checksum结果目标与校验范围重叠及Bootloader异常排查
问题分析与解决方案
警告与复位异常的关联
这个Checksum result destination overlaps with checksum range警告直接导致设备持续复位。原因是校验和的存储地址被包含在需要计算校验和的内存范围内,每次计算校验和时都会覆盖存储的校验值,Bootloader验证应用校验和时必然不匹配,触发复位机制。
修复步骤
1. 调整校验和存储地址
- 打开MCC的Bootloader配置界面,找到
Checksum Configuration区域 - 确保
Checksum Result Address(校验和存储地址)不在Checksum Calculation Range(校验和计算范围)内。通常校验和应存放在应用程序区之外,比如Bootloader专属区域或Flash空闲页 - 举个例子:dsPIC33CK512MP608总Flash为512KB,若Bootloader占用前8KB(0x000000-0x001FFF),应用从0x002000开始,校验和可设为0x001F00(Bootloader内空闲地址)或应用区最后一页末尾
2. 修正后构建宏脚本参数
- 找到Ubuntu下MCC生成的后构建脚本(
postbuild.sh) - 检查校验和计算命令的
-s(起始地址)、-e(结束地址)、-o(输出地址)参数,确保三者无重叠:
其中# 示例正确参数(根据实际地址调整) java -jar "${MPLABX_DIR}/../Microchip/MPLABX/v6.05/mplab_platform/mplab_ipe.jar" \ -P dsPIC33CK512MP608 -T pickit4 -M -A hex -F "${DISTDIR}/${PROJECTNAME}.hex" \ -C -s 0x002000 -e 0x07FFFF -o 0x001F00-s/-e是应用Flash范围,-o是校验和存储地址,必须不在前者区间内
3. 验证地址划分正确性
- 确认Bootloader与应用的链接脚本地址无重叠:
- Bootloader链接脚本起始地址设为0x000000,结束地址设为Bootloader实际占用的末尾(如0x001FFF)
- 应用链接脚本起始地址设为Bootloader结束地址+1(如0x002000),同时确保应用中断向量表配置
BOOT指令指向Bootloader入口,自身复位向量正确指向初始化代码
4. 重新构建与测试
- 保存所有修改,重新构建Bootloader和应用程序
- 先烧录Bootloader,再通过Bootloader下载应用,观察设备是否仍复位
- 若问题依旧,用MPLAB X调试器查看
RCON寄存器的复位标志位,判断是看门狗复位、校验和错误复位还是其他原因
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

