Nuvoton(新唐科技)如何将已lock的MCU透过checksum机制来做资料确认

如果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相符合

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论