使用 MKE02Z64VLH4芯片,在MDK環境下,連接JILNK調試工具進行調試,如果程序代碼設置 FSEC 為0xFF加密後,選擇全片擦除 Erase Full Chip option,如下圖所示。
會出現如下的下載失敗的提示。剛開始以為是芯片異常,結果燒錄瞭最基本的GPIO點燈程序也是一樣的,發現和程序沒有關系,應該和MDK的工程環境設置有關系。
反復嘗試之後,發現如果選擇塊擦除 Erase Sectors,就會提示下載成功,可以解決這個問題。但是原因是為什麼呢?
問題解答:
因為參考手冊裡面描述如下:
全片擦除將釋放Flash 的安全狀態位 security,這意味著在MCU復位期間,FSEC是從Flash配置字段0x40E處(對應Flash加密位)加載默認的設置值 0xFE(因為FSEC位默認的設置是0x10,也就是處於unsecured的)。
然後程序將0x40E處設置為0xFF。但是因為Flash通常隻能由1寫成0,而不能由0寫到1,所以當在程序中設置加密位為01或者11時(包含0到1的操作),就會出錯,程序將被終止,就會出現上述報錯提示。
對於扇區塊擦除命令,它不會釋放MCU安全狀態,閃存配置字段依然為0xFF,所以扇區塊擦除將適用於這種情況。FSEC值隻在MCU復位時重新加載,所以在扇區塊擦除MCU之後,Flash loader仍然可以將整個二進制數據編程到MCU中。所以在這種情況下,需使用扇區擦除。