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次,發文人進小黑屋喔~

評論