博客專欄

        EEPW首頁 > 博客 > 如何優雅的使用MDK解除芯片讀保護?

        如何優雅的使用MDK解除芯片讀保護?

        發布人:魚鷹談單片機 時間:2022-03-19 來源:工程師 發布文章

        經歷過產品量產的同學應該都知道,芯片一般會在出廠時開啟讀保護:要么在代碼中加入,要么在燒錄程序后人工通過軟件開啟該功能,比如 STM32 ST-LINK Utility


        圖片

        當然也可以使用該工具關閉讀保護功能。


        為了保證程序不被讀取,大多數產品應該會直接在量產代碼中加入該功能,但這樣會導致一個麻煩的問題:無法正常調試。


        每次下載后,如果代碼出現問題,都需要在線調試,而你的代碼為了不忘記,默認就是開啟讀保護功能的,所以每次下載后,如果發現問題,你可能要找一個工具,如 J-Flash 或者上面的軟件負責關閉讀保護,讓我們的開發效率降低不少。


        是否有更好的方法解除讀保護呢?


        今天魚鷹介紹一種使用 MDK 解除讀保護的方法,畢竟 MDK 軟件絕大部分道友都會安裝,所以使用它是最合適的。


        首先,說說它的讀保護原理。

        讀保護功能是通過設置相應的 Option Bytes 來實現的,并且掉電不會消失,和 ROM 類似

        而解除是則是復位相應的 Option Bytes 來實現,掉電也不會消失,但是不同的是,設置完之后,芯片自動會擦除整顆芯片,這樣你也就不能通過解除讀保護進而讀取整顆芯片代碼了。


        但是,你會發現一個現象,即使你無法讀取 FLASH 的代碼,你仍然可以通過上述工具連接芯片,這樣就給我們使用 MDK 解除讀保護創造了條件


        在魚鷹以前的筆記里面,有介紹如何使代碼運行在 RAM 中,既然讀保護保護的是 FLASH 區RAM 并不受影響,那么我們就可以將我們解除的代碼加載到 RAM 中運行,如此就可以通過 MDK 解除芯片的讀保護了


        具體操作如下(如下操作不懂的,請看魚鷹以前寫的筆記《STM32工程模板建立之 RAM 目標(五)》):

        1、設置新的目標,比如:


        圖片



        然后設置該目標的輸出目錄,這樣只要編譯一次,之后就可以直接切換目標后直接點擊 debug,不需要重復編譯,相當方便(和正常輸出目錄不同)。


        新建兩個目錄,并選擇對應的目錄即可

        圖片


        圖片


        圖片


        2、切換到新目標,然后在 C/C++ 選項卡中增加新宏 READ_PROTECT

        圖片


        然后在代碼中根據該宏加入解除讀保護代碼


        圖片


        3、將代碼地址重新定位到 RAM 中(0x20000000 為 RAM 首地址,假設 64 K 空間)

        圖片


        4、新建 run_ram文件,內容如下:


        圖片


        保存到工程目錄下,然后將其正確添加:


        圖片


        去掉勾選(這樣就不會下載程序到 FLASH了):

        圖片


        5、編譯,然后點擊Debug 即可,此時程序應該自動停止在斷點處 __breakpoint(0),說明解除代碼已經順利運行完成。

        圖片

        Enjoy it!!!


        每次需要解除芯片讀保護功能時,只要切換目標后即可成功解除(前提是已經編譯過一次了),相當方便,當然你如果不想編譯,也可以直接生成一個 axf 文件保存起來,只要每次加載這個文件即可成功解除。


        一次設置,永不煩惱,相當的實用!


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 單片機

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 新昌县| 南皮县| 岚皋县| 安图县| 九江县| 淮南市| 裕民县| 汕头市| 兴义市| 新源县| 瓦房店市| 福建省| 弥勒县| 区。| 东阳市| 南安市| 内黄县| 长丰县| 景谷| 泸水县| 修武县| 准格尔旗| 玛沁县| 封丘县| 拜泉县| 鄂温| 宁阳县| 北辰区| 洛宁县| 台安县| 太康县| 和静县| 稷山县| 彭州市| 岐山县| 神池县| 汤原县| 乌兰浩特市| 阿克陶县| 巨鹿县| 芜湖县|