如果IC被Lock后,要如何知道是否有烧录正确或是被串改呢?
下面就来教您如何在debug模式下,读取checksum来比对资料的正确性,此次测试的IC为Nuvoton的NUC125SC2AE。
1. 此次测试的范例程式为Templete,sample code路径NUC121_125BSP-master\SampleCode\Template\,compiler后将bin档烧录于APROM并于config设定lock
github link : https://github.com/OpenNuvoton/NUC121_125BSP/tree/master/SampleCode/Template
2. 开启templete专案,于Options->Debug->Settings将MCU Series设定General及Reset设定None,于Utilities内将Update Target before Debugging取消勾选,避免在进入debug时将code给覆盖
3. 以下为此NUC125的checksum计算方式,计算方式为CRC-32,Page size为512(0x200)bytes,并可参考checksum计算流程
4. 在操作FMC时,需先将执行SYS_UnlockReg,我们须先找到SYS_REGLCTL的register位置,并将59h、16h、88h依序写入0x50000100(SYS_REGLCTL)
5. 实际进入keil debug操作,于Memory将Address设定到0x50000100后,依序将59h->16h->88h输入,看到此位置的值变为1表示成功
6. 于上方的Peripherals选择FMC,并将ISPEN设定为1
7. 接着我们就可以开始计算我们想要比对的checksum范围,以下操作为读取0x000~0x200的checksum,计算值会显示于FMC_ISPDAT = 0xD7CA7D3E
FMC_ISPDAT = 0x200 -> 计算大小
FMC_ISPADDR = 0 -> 起始位置
FMC_ISPCMD = 0x2D
FMC_ISPTRG = 0x01
...
FMC_ISPCMD = 0x0D
FMC_ISPTRG = 0x01
...
FMC_ISPDAT = 0xD7CA7D3E
使用第三方软体比对,用CRC-32计算0~0x200的checksum,与我们使用debug方式读取出来的checksum相符合
评论