首頁 > 評測 > 優(yōu)雅使用J-Link解除APM32F003的讀保護
優(yōu)雅使用J-Link解除APM32F003的讀保護
- [導讀]
- 最近拿到了一塊APM32F003F6 MINI開發(fā)板,發(fā)現(xiàn)其在同價位的芯片中有著豐富的資源和優(yōu)秀的低功耗水平。準備拿來做一些小產(chǎn)品的
前言
最近拿到了一塊APM32F003F6 MINI開發(fā)板,發(fā)現(xiàn)其在同價位的芯片中有著豐富的資源和優(yōu)秀的低功耗水平。準備拿來做一些小產(chǎn)品的開發(fā)。板子美照如下所示(截取官網(wǎng)資源)。
1 APM32F003的讀保護設置
在開發(fā)過程中,發(fā)現(xiàn)其對代碼保護如同APM32F4一樣,可以設置讀保護。如其手冊描述,APM32F003支持寫保護和讀保護。
通過手冊描述和使用相關的庫函數(shù),我們可以將庫函數(shù)封裝,方便我們一個指令進行讀寫保護。
- /*!
- * [url=home.php?mod=space&uid=247401]@brief[/url] Flash Read Out Protection Config.
- *
- * @param rdp : Set the chip read protection level
- * This parameter can be one of the following variables:
- * FMC_RDP_ENABLE : Enable read protection
- * FMC_RDP_DISABLE : Disable read protection
- *
- * @retval None
- *
- * @note
- */
- void ReadOutProtectionConfig(FMC_RDP_T rdp)
- {
- FMC_Unlock();
- FMC_ConfigReadOutProtection(rdp);
- FMC_Lock();
- }
在我們的功能函數(shù)里面對ReadOutProtectionConfig()函數(shù)進行調(diào)用即可完成對芯片的讀寫保護。如:
- /*!
- * [url=home.php?mod=space&uid=247401]@brief[/url] Main program
- *
- * @param None
- *
- * @retval None
- *
- * @note
- */
- int main(void)
- {
- uint32_t i = 0;
- LedInit();
- /* Enable read protection */
- ReadOutProtectionConfig(FMC_RDP_ENABLE);
- for (i = 0; i < 10; i++)
- {
- Delay(0x7ffff);
- Board_LedToggle(BOARD_LED2);
- Board_LedToggle(BOARD_LED3);
- }
- /* Disable read protection */
- ReadOutProtectionConfig(FMC_RDP_DISABLE);
- while (1)
- {
- }
- }
以上代碼是實現(xiàn)了一個讀保護設置后,閃燈5下后解除讀保護。(值得注意的是:APM32F003手冊是說明“在配置完選項字節(jié)后,需要復位才能生效 ”)。
2 為什么需要使用J-Link解除APM32F003讀保護
由于我們的代碼出廠后不想讓有心之人看到我們的二進制內(nèi)容,我們會對芯片進行讀保護,且不會留解除讀保護的“后門”,以防用戶誤操作將產(chǎn)品弄壞。所以我們迫切需要一個工具能夠在開發(fā),維護階段,在沒有設置解除讀保護的“后門”的情況下對芯片進行解除讀保護操作。
而在開發(fā)階段,我們最常用的工具就是J-Link,如何使用J-Link解決該問題便是我們的需求。
3 J-Link解除讀保護的原理
書接上回“https://bbs.21ic.com/icview-3223010-1-1.html”我在J-Link的安裝目錄下面找到了相應J-Link的使用手冊。我們可以在手冊中看到,對使用J-Link Commander給芯片下載代碼的一個例子。
(圖片來源:[J-Link Commander - SEGGER Wiki](https://wiki.segger.com/J-Link_Commander#Perform_flash_download))
在例子中我們可以看到-Link Commander使用了“w4”指令對STM32F103ZE的一些外設進行了寫值設置,以使得可以下載STM32F103ZE的外置Flash。
同理我們也可以依葫蘆畫瓢,理論上我們可以通過將我們對APM32F003芯片的解除寫保護的代碼。
4 APM32F003解除讀保護分析
下面我們看一下官方源碼中對于解除讀保護,我們操作了那些寄存器。
- FMC_Unlock()函數(shù)內(nèi)容
- void FMC_Unlock(void)
- {
- FMC->KEY = FMC_KEY_1;
- FMC->KEY = FMC_KEY_2;
- }
對FMC 關鍵字(FMCwKey)寫入解鎖的鍵值以解鎖 FMC。
- FMC_EraseOptionByte()函數(shù)內(nèi)容
- FMC_STATE_T FMC_EraseOptionByte(void)
- {
- uint16_t rpKey;
- FMC_STATE_T state;
- rpKey = FMC->OBCS_B.READPROT ? 0 : FMC_RP_KEY;
- state = FMC_WaitForReady(FMC_DELAY_ERASE);
- if(state == FMC_STATE_COMPLETE)
- {
- FMC->OBKEY = FMC_KEY_1;
- FMC->OBKEY = FMC_KEY_2;
- FMC->CTRL2_B.OBE = BIT_SET;
- FMC->CTRL2_B.STA = BIT_SET;
- state = FMC_WaitForReady(FMC_DELAY_ERASE);
- if(state == FMC_STATE_COMPLETE)
- {
- FMC->CTRL2_B.OBE = BIT_RESET;
- FMC->CTRL2_B.OBP = BIT_SET;
- OB->READPROT = rpKey;
- state = FMC_WaitForReady(FMC_DELAY_PROGRAM);
- if(state != FMC_STATE_TIMEOUT)
- {
- FMC->CTRL2_B.OBP = BIT_RESET;
- }
- }
- else if(state != FMC_STATE_TIMEOUT)
- {
- FMC->CTRL2_B.OBE = BIT_RESET;
- }
- }
- return state;
- }
1. 對FMC的OBKEY寫入解鎖鍵值以解鎖對OB的操作。
2. 通過FMC的CTRL2寄存器,擦除選項字節(jié)。
3. 寫入讀保護等級至OB的READPROT寄存器,然后通過FMC的CTRL2寄存器進行編程。
4. 等待編程完成。
- FMC_Lock函數(shù)內(nèi)容
- void FMC_Lock(void)
- {
- FMC->CTRL2_B.LOCK = BIT_SET;
- }
通過FMC的CTRL2寄存器的LOCK位寫1,鎖定FMC的CTRL2寄存器。
5 J-Link 解除 APM32F003讀保護實現(xiàn)
有了解除讀保護的C代碼,我們簡單的就可以將其“翻譯”成J-Link的指令。下面是各個部分指令情況及其解析。
1. 規(guī)定選擇的連接接口,連接的目標芯片類型及相應的連接速度(必須)。
- si 1
- device CORTEX-M0
- speed 100
- JTAGConfg -1,-1
2. 停止運行當前芯片的程序(一般而言初始連接上芯片時,程序均處于暫停暫停),保證芯片沒有在進行中的Flash操作(必須)。
- h
- r
- h
3. 解鎖代碼的指令實現(xiàn)(必須)。
- w4 0x40011004 0x45670123
- w4 0x40011004 0xCDEF89AB
- w4 0x40011008 0x45670123
- w4 0x40011008 0xCDEF89AB
- sleep 100
- w4 0x40011010 0x00000220
- w4 0x40011010 0x00000260
- sleep 100
- w4 0x40011010 0x00000200
- w4 0x40011010 0x00000210
- w4 0x00020400 0xFFFF00A5
- sleep 100
- w4 0x40011010 0x00000080
4. 讀取FMC的CTRL2寄存器內(nèi)容,看看是否回到復位值(非必須)。
- mem32 0x40011010 0x01
- sleep 10
5. 復位芯片以使解除讀保護操作生效(必須)。
- r
我們新建一個文本文件,將上述代碼保存至文件,然后將文件后綴名更改為“.jflash”(詳情請查閱附件),最后使用“JLink.exe”打開即可(硬件要連接好)。對已經(jīng)上了讀保護的APM32F003芯片進行解除讀保護操作。
6 注意事項
1. 芯片上讀保護后使用Keil的下載命令會有如下提示彈框。
2. 使用本腳本文件,需保證硬件連接正常。
- 本文系21ic原創(chuàng),未經(jīng)許可禁止轉載!
網(wǎng)友評論
- 聯(lián)系人:巧克力娃娃
- 郵箱:board@21ic.com
- 我要投稿
-
歡迎入駐,開放投稿
-
人均百萬?英偉達中國員工收入曝光! 2024-08-29
-
《黑神話:悟空》玩家硬盤升級攻略:提升游戲體驗,暢享3A大作 2024-08-29
-
數(shù)睿數(shù)據(jù)參加《系統(tǒng)與軟件工程 低代碼開發(fā)平臺通用技術要求》國家標準編制 2024-08-29
- NRF52810藍牙數(shù)字耳機找人定制
預算:¥30005天前
- 125KW模塊式PCS軟硬件外包開發(fā)
預算:¥1100000015小時前
- 12V汽車啟動電源項目BMS設計
預算:¥50000023小時前
- 數(shù)據(jù)可視化軟件 開發(fā)
預算:¥5000023小時前
- PLC項目調(diào)試修改
預算:¥100001天前
- 起動電機控制器開發(fā)
預算:¥1100001天前