先說明下,這里說的加密僅指對MCU芯片做讀保護(hù)處理,畢竟MCU芯片加密是個非常寬泛的概念和藝術(shù)。
有時會有人就ST MCU讀保護(hù)加密后能否二次使用的問題進(jìn)行咨詢,偶爾也有極少數(shù)人問及ST MCU是否具有加密功能。
ST MCU的芯片都是FLASH型的,不論是STM8系列還是STM32系列都可以做讀保護(hù)加密,以防程序代碼被輕易讀出,從而達(dá)到保護(hù)開發(fā)者知識產(chǎn)權(quán)等相關(guān)權(quán)益。關(guān)于ST MCU的讀保護(hù)加密及芯片能否二次使用話題,得按STM8和STM32兩大系列分開來說,二者在讀保護(hù)處理上有差異。
一、STM8系列芯片讀保護(hù)實施及解除
對于STM8系列芯片,都可以進(jìn)行讀保護(hù)。ST官方有提供一個STVP的軟件工具【它是經(jīng)過STTOOLSET這個安裝包安裝的】,可以對STM8芯片的OPTION項進(jìn)行編程,將OPTION中的讀保護(hù)項打開,設(shè)置為ON,然后進(jìn)行芯片編程就能使能芯片的讀保護(hù)。之后,用戶程序代碼就不能被讀出來了。還有部分STM8芯片【FLASH容量大于等于16K的芯片】往往支持通過UART、CAN、SPI等接口進(jìn)行的系統(tǒng)編程,即ISP。ST官方有提供了一個Flash loader demonstrator工具軟件,也可以利用它對STM8芯片進(jìn)行芯片讀保護(hù)加密。
在讀保護(hù)狀態(tài)下,既不能讀取芯片內(nèi)的程序代碼,也不能對芯片進(jìn)行再次做程序編寫或調(diào)試了。
那如果想對做過讀保護(hù)加密的STM8芯片再次使用呢?還是可以利用上面提到的2個工具進(jìn)行解除讀保護(hù)。解除讀保護(hù)后芯片內(nèi)原來的程序代碼全部煙消云散,不復(fù)存在。
第一種還是通過STVP軟件工具,將OPTION項中讀保護(hù)項ROP關(guān)閉,即設(shè)置為OFF,然后進(jìn)行OPITON單獨編程,之后芯片內(nèi)部程序代碼全部被擦除,讀保護(hù)解開,芯片就猶如一顆新的芯片,可以再次使用。
還有一種辦法就是,對于支持ISP功能的STM8芯片。利用上面提到的Flash loader demonstrator工具軟件,將設(shè)置過讀保護(hù)的STM8芯片進(jìn)行芯片讀保護(hù)解除。之后,芯片可以再次使用。
當(dāng)然,也可以借助其它第三方工具進(jìn)行上述操作,原理是一樣的。另外,除了利用上面提到的軟件工具對MCU芯片做讀保護(hù)加密外,用戶也可以自行編程對OPTION項編程而達(dá)到對芯片讀保護(hù)之目的。
二、STM32系列芯片讀保護(hù)實施及解除
對于STM32芯片的讀保護(hù)的實施及解除怎么操作呢?目前為止,通用性STM32 MCU有9個系列。其中除了32F1系列只具有1級讀保護(hù)外,其它8個子系列都具有2級讀保護(hù)。 也就是說從讀保護(hù)處理上看,32F1系列跟其它幾個芯片要稍遜一籌。 順便說下,其實后出的基于CORTEX M4的內(nèi)核STM32F3系列的性價比要遠(yuǎn)高于32F1系列,支持DSP和FPU,外設(shè)更為豐富。

ST MCU技術(shù)手冊上提到3級,即LEVEL 0,LEVEL 1,LEVEL 2。其中LEVEL 0 就是不做讀保護(hù)級別。如果芯片被設(shè)置LEVEL 1讀保護(hù),在LEVEL 1級狀態(tài)下,既不能讀取芯片內(nèi)的程序代碼內(nèi)容,也不能對芯片再次做存儲空間的擦寫或芯片調(diào)試了。FLASH存儲器和備份域寄存器都不能被訪問,即使強(qiáng)行訪問也會出錯。實施這步的操作可以利用ST官方的STLINK UTILITY工具、STVP 工具、Flash loader demonstrator來進(jìn)行,將OPTION里的RDP選項選擇LEVEL 1,之后進(jìn)行編程。
下面是兩個工具STLINK UTILITY和STVP的操作界面示意圖。
此時,LEVEL 1級讀保護(hù)是可以解除的,同樣可以利用上面的工具來完成。操作步驟跟加密動作類似,只是把讀保護(hù)級別選擇為LEVEL 0,然后進(jìn)行OPTION編程,芯片讀保護(hù)解除,此時芯片內(nèi)的程序代碼全部清空。顯然,經(jīng)過LEVEL 1讀保護(hù)后,選項字節(jié)的訪問是被開放了出來。
至于如何啟用LEVEL 2級讀保護(hù)加密,有2鐘方式。第一種就是直接從LEVEL 0通過對讀保護(hù)選項字RDP進(jìn)行編程讓芯片進(jìn)入LEVEL 2級保護(hù);還有一種就是從LEVEL 1的基礎(chǔ)上,做一次RDP編程進(jìn)入到LEVEL 2級保護(hù)。具體的操作還是可以利用ST官方的STLINK UTILITY工具、STVP 工具、Flash loader demonstrator來進(jìn)行,將OPTION欄里的RDP選項選擇LEVEL 2之后進(jìn)行編程。操作跟LEVEL 1級讀保護(hù)一樣,只是選項不一樣而已。
不過LEVEL 2級讀保護(hù)是不可逆的,即不能像LEVEL 1一樣可以被解除。經(jīng)過LEVEL 2級讀保護(hù)的芯片,除了內(nèi)部程序代碼不可訪問外,連從RAM或系統(tǒng)閃存引導(dǎo)啟動的特性及調(diào)試模式都被永久禁用了,JTAG調(diào)試接口被鎖死。此時既不可能通過JTAG調(diào)試口訪問芯片,也不能通過ISP的方式跟芯片相連來訪問芯片或者對RDP選型字節(jié)進(jìn)行修改。即使片內(nèi)用戶程序也只能修改RDP選項以外的部分選項。
總之,經(jīng)過LEVEL 2讀保護(hù)加密后,除了用戶程序能正常運行外,若還想從外部對芯片做什么調(diào)試或修改或擦除后再次使用,那是沒機(jī)會了,基本上它就是一塊磚。如果說經(jīng)過LEVEL 2級讀保護(hù)加密的芯片有啥故障想做測試分析的話,即使交到ST 原廠也沒有辦法。
下面是兩級讀保護(hù)加密的不同級別走向示意圖。很明顯,LEVEL 0/1間是可以往返的,LEVEL 2級就不可返回了。同樣,除了利用上面提到的軟件工具對STM32芯片做讀保護(hù)加密外,用戶也可以自行編程對OPTION項編程而達(dá)到對芯片讀保護(hù)之目的。
小結(jié)下:目前STM32的9個系列里面,除了F1系列只有1級讀保護(hù)外,其它都具有兩級讀保護(hù)。其中2級保護(hù)對調(diào)試口、系統(tǒng)引導(dǎo)啟動功能都予以不可逆的禁用,保護(hù)深度、難度都比1級讀保護(hù)更強(qiáng)。一般調(diào)試時不用隨意啟用LEVEL 2級讀保護(hù),不然想修改代碼只得換芯片了。只有在產(chǎn)品調(diào)試、測試、試產(chǎn)穩(wěn)定后可以考慮啟用LEVEL 2保護(hù)。
最后以分享一個問題來結(jié)束。如果有人希望產(chǎn)品代碼測試驗證穩(wěn)定后將MCU芯片做2級讀保護(hù),但又希望未來還可以做程序升級,可行否?如果可行,如何操作?
【拋磚引玉 旨在交流,如有錯疏 歡迎賜教】