大家好、
我们开发了一个自定义引导加载程序应用程序、用于更新主应用程序。 固件更新过程在启用代码安全模块之前没有问题。 我们的自定义引导加载程序能够擦除应用程序使用的闪存、下载并写入闪存新应用程序、然后使用 CRC 验证新应用程序代码、最后启动新应用程序。
为了使操作更简单、我们仅使用区域1、并将所有闪存和安全 RAM 分配到区域1、如下所示:
.sect "Dcsm_otp_z1_linkpointer"
;.long 0x1FFFFFFF ;Z1-LINKPOINTER1
;.long 0xFFFFFFFF ;保留
;.long 0x1FFFFFFF ;Z1-LINKPOINTER2
;.long 0xFFFFFFFF ;保留
;.long 0x1FFFFFFF ;Z1-LINKPOINTER3
;.long 0xFFFFFFFF ;保留
.sect "Dcsm_otp_z1_pswdlock "
long 0xFFFFFF0F ;Z1-PSWDLOCK -保护密码
长整型0xFFFFFFFF ;保留
.sect "Dcsm_otp_Z1_crclock"
; .long 0xFFFFFFFF ;Z1-CRCLOCK
;.long 0xFFFFFFFF ;保留
.sect "Dcsm_otp_z1_bootctrl"
;.long 0xFFFFFFFF ;保留
; .long 0xFFFFFFFF ;Z1-BOOTCTRL
.sect "Dcsm_zsel_Z1"
长 0xFFFFFFFF ;Z1-EXEONLYRAM
长 0xFFFFFFFF ;Z1-EXEONLYSECT
long 0x10005555 ;Z1-GRABRAM - CLA、区域1的所有 RAM 块
长 0x15555555 ;Z1-GRABECT -区域1的组1和所有闪存扇区
长 0x111111 ;Z1-CSMPSWD0 (128位密码的 lsw)
长 0x22222222 ;Z1-CSMPSWD1
长 0x333333 ;Z1-CSMPSWD2
长 0x444444 ;Z1-CSMPSWD3 (128位密码的 MSW)
由于所有闪存都分配给区域1、因此应用程序从安全存储器运行。 "ramfunc"也被放置在安全 RAM (RAMD0和 RAMD1)中、任务堆栈也被放置在安全存储器 RAMLS0-5中。 我们将非安全 RAMGS4-11块用于".CIO"、".esysmim"、".ebs"、DMA 缓冲区和用于堆的外部 SRAM。
启用代码安全模块后、我们的自定义引导加载程序仍然能够擦除应用程序使用的闪存、下载并写入闪存新应用程序、验证新应用程序代码、但当新应用程序启动时、处理器挂起、我不知道在哪里。
如果我使用"Wait Boot Mode bootoption"来解锁处理器、然后将 PC 设置为应用程序入口点(在使用我们的自定义引导加载程序更新应用程序后)、则应用程序运行正常。
如何调试这种情况以找出导致 CPU 挂起的原因? 我还应该检查什么?
非常感谢、
多鲁