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