flash写保护原理_老司机带路:LPC82x 存储器及读写保护 手到擒来!
點擊上方“單片大師”可以訂閱哦
存儲器,顧名思義就是用來存放東西的地方,那么對于一款 MCU 而言,在性能描述的時候,我們都會說 SRAM,Flash 的容量大小有多少。對于初學者來說,可能不會去理會這些東西,拿到東西就只用。其實不然,一顆 MCU 的內存有多大是十分重要的,其主要是用來存放代碼和和數據的器件。代碼為什么可以運行,代碼量是多少,定義的 int、short 等等類型的變量究竟是怎么分配和存儲的,這些問題都和內存有關系。因此,在我們選擇 MCU 進行開發的時候就要去評估其內存是否滿足需求。今天,小編將帶領大家一起去學習 LPC82x 系列存儲器與讀寫保護。
首先,我們來看一下 LPC82x 系列的存儲器映射(Memory Map)。
存儲器映射(Memory Map)是指把芯片中或芯片外的 FLASH,RAM,ROM,Peripheral 外設等進行統一編址。即用地址來表示對象。這個地址絕大多數是由廠家規定好的,用戶只能用而不能改。用戶只能在掛外部 RAM 或 FLASH 的情況下可進行自定義。
LPC82x 的地址空間是 4GB, 指向 2^32=4G 的地址空間,也就是 0x0000_0000——0xFFFF_FFFF 這一大塊空間。
根據圖中描述,Cortex-M0+ 內核將 0x0000_0000——0xFFFF_FFFF 這塊 4G 大小的空間分成 6 大塊:Flash、SRAM、MTB、ROM、外部設備、專用外設總線、特定廠商等。
? 一、FLASH 控制器 ?
Flash 模塊包括:Flash 主存儲區(Main memory)、Flash 信息區(Information block),以及 Flash 存儲接口寄存器區(Flash memory interface)。
針對 Flash 部分技術 Support,經常有客戶會問如何控制 Flash 的訪問時間和如何獲得簽名?
1. 控制閃存(FLASH)訪問時間
? ? ? 當 ARM 時鐘速度調整前,需要調整閃存訪問時間
? ? ?? ① ARM 速度 20MHz 以上,閃存訪問需要 2 個系統時鐘
? ? ?? ② ARM 速度在 20MHz 及以下,閃存訪問需要 1 個系統時鐘
? ? ? 實例代碼
typedefenum{/*!< 1 CPU clocks Flash accesses for up to 20 MHz CPU */FLASHTIM_20MHZ_CPU = 0,/*!< 2 CPU clocks Flash accesses for up to 30 MHz CPU */FLASHTIM_30MHZ_CPU = 1,} FMC_FLASHTIM_T;voidChip_FMC_SetFLASHAccess(FMC_FLASHTIM_T clks);?? ? 注意,不要在低功耗模式下調整閃存訪問時間
2. 獲得閃存(FLASH)內容簽名
? ? ?? ① 提供 16 字節對齊起始閃存 (FLASH) 地址
? ? ?? ② 提供 16 字節對齊結束閃存 (FLASH) 地址,并開始計算簽名
? ? ?? ③ 等待判斷簽名計算完成
? ? ?? ④ 獲得 32bits 閃存內容簽名
? ? ? 實例代碼(計算從 0x4000 地址到 0x8000 地址的簽名)
const static uint32_t FLASH_SIGNATURE_START_ADDR = 0x1000;const static uint32_t FLASH_SIGNATURE_END_ADDR = 0x4000;Chip_FMC_ComputeSignature(FLASH_SIGNATURE_START_ADDR,FLASH_SIGNATURE_END_ADDR);while(Chip_FMC_IsSignatureBusy());uint32_t flash_signature = Chip_FMC_GetSignature(0);? 二、SRAM ?
以下是 LPC82x 參考手冊中的一段原話:
LPC824 起始地址是 0x1000 0000,終止地址是 0x1000 0050。
SRAM 的理解比較簡單,其作用是用來存取各種動態的輸入輸出數據、中間計算結果以及與外部存儲器交換的數據和暫存數據。設備斷電后,SRAM 中存儲的數據就會丟失。
? 三、ISP(In System Programming) ?
ISP 由英文 In-System Programming 三個首字母組成,譯成中文即:在系統編程。通過調用芯片內部固化的 Bootloader 軟件實現通過 UART 串口編程片內 Flash 的功能,實現小批量固件燒錄,也可以實現固件升級。
1. ISP 的通常用法 - 1
? ? ? 通過串口(USART)ISP 命令和 ISP 程序完成片上閃存(FLASH)的燒寫編程
? ? ? ? - ISP 程序運行在 ROM 中
? ? ? ? - 進入 ISP 模式的方法
? ? ? ? ?? ① 芯片啟動時拉低管腳 P0_12
? ? ? ? ?? ② IAP 命令“Reinvoke ISP”
? ? ? 通常用法
? ? ?? - 固件燒錄(小批量),固件升級
? ? ?? - LPC82X 應用程序進入低功耗狀態時,調試端口失效,無法從調試端口下載程序,而進入 ISP 模式可以通過調試端口下載用戶程序
2. ISP 的通常用法 - 2
? ? ? 在用戶應用代碼中或者用戶第二級引導程序使用 IAP 系統函數完成片上閃存(FLASH)的燒寫編程
? ? ?? - 用戶程序在 FLASH 或 RAM 中調用執行 IAP 系統函數
? ? ?? - 通常用法
? ? ? ? ? ① 應用程序保存外設配置數據,校準數據到 FLASH 上
? ? ? ? ? ② 應用程序保存用戶數據到 FLASH 上
? ? ? ? ? ③ 第二級引導程序對應用程序升級
? 四、引導程序(Bootloader) ?
看完上面的內容大家肯定會有疑問:ISP 功能都可以做固件升級了,為啥需要第二級引導程序?
? ? ? ISP 只可以完成 MCU 的固件升級,一般不能完成外圍器件的固件升級
? ? ? ISP 只可以通過串口 0(USART0)完成片上閃存(FLASH)的燒寫編程
? ? ? ISP 的命令是有限的,有時候不能完全滿足用戶的功能需求
? ? ?? ① 加密、校驗啟動
? ? ?? ② 故障現場分析(RAM 內存導出)
? ? ?? ③ 工廠測試
第二級引導程序(示例)
? ? ? 第二級引導程序實例完成基于 I2C 總線的主機從機通信
? ? ? 第二級引導程序等待主機指令,解析指令并處理主機指令
? ? ? 第二級引導程序響應主機啟動命令可以啟動用戶程序
? 五、代碼讀取保護 ?
? (Code Read Protection) ?
之前也看到有網友提出代碼保護的問題,辛苦寫的程序,怎么著也不想被別人拿去用!所以增加代碼的讀/寫保護功能,對保護知識產權異常重要!所以最后來談談如果添加代碼讀取保護功能。
1. 代碼讀取保護(CRP)
? ? ? 允許客戶設置不同安全級別的閃存訪問
? ? ? CRP 模式
2. CRP 模式配置
? ? ? 模式配置地址 0x000002FC
?? ? ? CRP 模式的改變在 MCU 重新上電后生效
? ? ? CRP 不影響 IAP 命令
? ? ? 實例代碼
;// keil_startup_lpc82x.s;// Code Read Protection level (CRP),0x000002FC;// <0xFFFFFFFF=> Disabled;// <0x4E697370=> NO_ISP;// <0x12345678=> CRP1;// <0x87654321=> CRP2;// <0x43218765=> CRP3 (Are you sure?)CRP_Level EQU 0xFFFFFFFF? ? End ??
點擊下方“”查看更多
↓↓↓ 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的flash写保护原理_老司机带路:LPC82x 存储器及读写保护 手到擒来!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cpuz北桥频率和内存频率_内存频率怎样
- 下一篇: earcharts tree 节点间隔_