Mcu的閃存的訪問權限控制方法和裝置的制造方法
【技術領域】
[0001 ]本發明涉及計算機技術領域,具體而言,涉及一種MCU的閃存的訪問權限控制方法和裝置。
【背景技術】
[0002]微控制單元(MicrocontrolIer Unit,簡稱為MCU)用戶代碼是MCU正常運行的核心,用戶代碼一般在M⑶用戶程序量產階段被燒錄器燒寫在M⑶的Flash(閃存)上。防止M⑶Flash上的用戶代碼不被破解是MCU安全保護的一個重要方面。
[0003]目前,主流M⑶廠商對M⑶Flash上的內容進行保護的做法一般是:為M⑶設計安全模式,其中,安全模式的設定由Flash某個地址單元的內容決定。在安全模式下,調試接口(例如,SWD接口)能夠訪問Flash之前,必須先要通過M⑶的通信接口(例如,UART)向用戶程序發送存入在Flash中的解鎖密鑰,這就要求用戶程序必須支持Flash解鎖功能。
[0004]然而,由于解鎖密鑰是以明碼的方式存儲在MCU的Flash中的,那么解鎖密鑰在MCU用戶程序量產階段很容易被破解。
[0005]進一步的,當MCU工作在安全模式時,如果出現故障導致MCU無法正常工作,那么用戶程序的解鎖功能也必將受到限制。如果Flash解鎖失敗,那么外部調試接口無法觀察到MCU的運行現場,這將加大問題定位的難度。同時,這種保護方法要求用戶程序必須支持解鎖功能,這勢必會導致用戶程序占用更多的Flash空間。
[0006]針對上述問題,目前尚未提出有效的解決方式。
【發明內容】
[0007]本發明實施例提供了一種MCU的閃存的訪問權限控制方法,以解決現有技術中因為需要在用戶程序中增加解鎖功能以實現閃存的解鎖而導致的在用戶程序量產階段解鎖密鑰容易被盜取導致數據不安全的技術問題,該控制方法包括:
[0008]確定所述MCU所處的階段;當所述MCU處于用戶程序開發階段時,通過調試接口設置所述安全寄存器將所述MCU設置成非安全模式;當所述MCU處于用戶程序量產階段時,通過所述調試接口設置所述安全寄存器將所述MCU設置成安全模式;其中,當所述MCU處于非安全模式的情況下,所述調試接口被允許訪問所述MCU的閃存中的內容,當所述MCU處于安全模式的情況下,所述調試接口不被允許訪問所述MCU的閃存中的內容。
[0009]在一個實施方式中,在當所述MCU處于用戶程序量產階段時,通過所述調試接口設置所述安全寄存器將所述MCU設置成安全模式之后,所述方法還包括:檢測所述調試接口是否向所述安全寄存器中寫入閃存解鎖密鑰;如果是,則獲取預設的閃存解鎖密鑰,并將所述調試接口寫入的閃存解鎖密鑰與所述預設的閃存解鎖密鑰進行匹配;如果匹配通過,則將所述MCU由安全模式切換至非安全模式。
[0010]在一個實施方式中,獲取預設的閃存解鎖密鑰,包括:讀取唯一標識該MCU的設備ID;根據所述設備ID,按照預定算法計算得到所述預設的閃存解鎖密鑰。
[0011]在一個實施方式中,讀取唯一標識該MCU的設備ID,包括:從該MCU專用的設備ID寄存器中讀取所述設備ID。
[0012]在一個實施方式中,所述設備ID為32bit的數據,所述預設的閃存解鎖密鑰為32bit的數據。
[0013]在一個實施方式中,將所述調試接口寫入的閃存解鎖密鑰與預設的閃存解鎖密鑰進行匹配,包括:確定寫入的閃存解鎖密鑰與所述預設的閃存解鎖密鑰是否相等;如果相等,則表示匹配通過,如果不相等,則表示匹配未通過。
[0014]在一個實施方式中,在將所述調試接口寫入的閃存解鎖密鑰與預設的閃存解鎖密鑰進行匹配之后,所述方法還包括:如果匹配不通過,則保持所述M⑶處于安全模式;如果再次接收到所述調試接口向所述安全寄存器中寫入的閃存解鎖密鑰,繼續保持所述MCU處于安全模式,直至所述MCU重新上電。
[0015]本發明實施例還提供了一種MCU的閃存的訪問權限控制裝置,以解決現有技術中因為需要在用戶程序中增加解鎖功能以實現閃存的解鎖而導致的在用戶程序量產階段解鎖密鑰容易被盜取導致數據不安全的技術問題,所述MCU中設置有用于對MCU是否處于安全模式進行設定的安全寄存器,該控制裝置包括:
[0016]確定模塊,用于確定所述MCU所處的階段;第一設置模塊,用于在所述MCU處于用戶程序開發階段的情況下,通過調試接口設置所述安全寄存器將所述MCU設置成非安全模式;第二設置模塊,用于在所述MCU處于用戶程序量產階段的情況下,通過所述調試接口設置所述安全寄存器將所述MCU設置成安全模式;其中,當所述MCU處于非安全模式的情況下,所述調試接口被允許訪問所述MCU的閃存中的內容,當所述MCU處于安全模式的情況下,所述調試接口不被允許訪問所述MCU的閃存中的內容。
[0017]在一個實施方式中,上述控制裝置還包括:檢測模塊,用于在通過所述調試接口設置所述安全寄存器將所述MCU設置成安全模式之后,檢測所述調試接口是否向所述安全寄存器中寫入閃存解鎖密鑰;匹配模塊,用于在檢測到所述調試接口向所述安全寄存器中寫入閃存解鎖密鑰的情況下,獲取預設的閃存解鎖密鑰,并將所述調試接口寫入的閃存解鎖密鑰與所述預設的閃存解鎖密鑰進行匹配;切換模塊,用于在匹配通過的情況下,將所述MCU由安全模式切換至非安全模式。
[0018]在一個實施方式中,所述匹配模塊包括:讀取單元,用于讀取唯一標識該MCU的設備ID;計算單元,用于根據所述設備ID,按照預定算法計算得到所述預設的閃存解鎖密鑰。
[0019]在上述實施例中,通過在M⑶中設置了用于對M⑶是否處于安全模式進行設定的安全寄存器,調試接口通過對該安全寄存器進行控制便可以實現對MCU的閃存的訪問權限的控制,從而解決了現有技術中因為需要在用戶程序中增加解鎖功能以實現閃存的解鎖而導致的在用戶程序量產階段解鎖密鑰容易被盜取導致數據不安全的技術問題,達到了不需要在用戶程序中增加解鎖功能就可以實現閃存解鎖的技術效果,因解密的密鑰不需要存放在Flash中,從而減少了用戶代碼占用M⑶Flash的空間,提高了數據的安全性,因為調試接口的設置,即使MCU處于死機狀態,通過調試接口就可以向FLASHKEY寫入正確密鑰來解鎖Flash,從而定位MCU出現問題的原因,降低了定位MCU運行故障的難度。
【附圖說明】
[0020]構成本申請的一部分的附圖用來提供對本發明的進一步理解,本發明的示意性實施例及其說明用于解釋本發明,并不構成對本發明的不當限定。在附圖中:
[0021 ]圖1是根據本發明實施例的MCU的閃存的訪問權限控制方法流程圖;
[0022]圖2是根據本發明實施例的SDA-AP結構圖;
[0023]圖3是根據本發明實施例的Flash解鎖密鑰的生產原理圖;
[0024]圖4是根據本發明實施例的MCU的閃存的訪問權限控制裝置的結構框圖。
【具體實施方式】
[0025]為使本發明的目的、技術方案和優點更加清楚明白,下面結合實施方式和附圖,對本發明做進一步詳細說明。在此,本發明的示意性實施方式及其說明用于解釋本發明,但并不作為對本發明的限定。
[0026]發明人考慮到現有的MCU的閃存的訪問權限控制方法主要問題就在于需要在用戶程序中增加解鎖功能以實現閃存的解鎖,為此,發明人考慮到可以單獨設置一個模塊存儲模塊用于對閃存的訪問權限進行控制,以保證不用在用戶程序中增加解鎖功能。
[0027]為了實現上述功能,在本發明實施例中提供了一種MCU的閃存的訪問權限控制方法,該MCU中設置了用于對MCU是否處于安全模式進行設定的安全寄存器,如圖1所示,該MCU的閃存的訪問權限控制方法包括:
[0028]步驟101:確定所述MCU所處的階段;
[0029]步驟102:當所述M⑶處于用戶程序開發階段時,通過調試接口設置所述安全寄存器將所述MCU設置成非安全模式;
[0030]步驟103:當所述M⑶處于用戶程序量產階段時,通過所述調試接口設置所述安全寄存器將所述MCU設置成安全模式;其中,當所述MCU處于非安全模式的情況下,所述調試接口被允許訪問所述MCU的閃存中的內容,當所述MCU處于安全模式的情況下,所述調試接口不被允許訪問所述MCU的閃存中的內容。
[0