新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM8 存儲FLASH、EEPROM、存儲保護

        STM8 存儲FLASH、EEPROM、存儲保護

        作者: 時間:2016-11-11 來源:網絡 收藏
        FLASH主要特性

        STM8內部的FLASH程序存儲器和數據EEPROM由一組通用寄存器來控制。用戶可以使用這些寄存器來編程或擦除存儲器的內容、設置寫保護、或者配置特定的低功耗模式。用戶也可以對器件的選項字節(Option byte)進行編程。

        本文引用地址:http://www.104case.com/article/201611/316699.htm
        • STM8S EEPROM分為兩個存儲器陣列:
          • 最多至 128K字節的FLASH程序存儲器,不同的器件容量有所不同。請參考4.4存儲器組織結構了解更多細節。
          • 最多至 2K字節的數據EEPROM(包括option byte-選擇字節),不同的器件容量有所不同。請參考4.4存儲器組織結構了解更多細節。
        • 編程模式
          • 字節編程和自動快速字節編程(沒有擦除操作)
          • 字編程
          • 塊編程和快速塊編程(沒有擦除操作)
          • 在編程/擦除操作結束時和發生非法編程操作時產生中斷
        • 讀同時寫(RWW)功能。該特性并不是所有STM8S器件都擁有。請參考ATM8具體的數據手冊了解更多細節。
        • 在應用編程(IAP)和在線編程(ICP)能力。
        • 保護特性
          • 存儲器讀保護(ROP)
          • 基于存儲器存取安全系統(MASS密鑰)的程序存儲器寫保護
          • 基于存儲器存取安全系統(MASS密鑰)的數據存儲器寫保護
          • 可編程的用戶啟動代碼區域(UBC)寫保護
        • 在待機(Halt)模式和活躍待機(Active-halt)模式下,存儲器可配置為運行狀態和掉電狀態。

        存儲器組織結構

        STM8S的EEPROM以32位字長(每字4字節)為基礎組織起來。根據不同的器件,存儲器組織機 構有所不同:

        • 小容量STM8S器件
          • 8K FLASH程序存儲器,每頁 64字節,共 128頁
          • 640字節數據 EEPROM,每頁 64字節,共 10頁。數據 EEPROM包括一頁的選項字節(64字節)。
        • 中容量STM8S器件
          • 從 16K到 32K FLASH程序存儲器,每頁 512字節,最多 64頁
          • 1K字節數據EEPROM,每頁 512字節,共 2頁。數據 EEPROM包括一頁的選項字節(512字節)。
        • 大容量STM8S器件
          • 從 64K到 128K FLASH程序存儲器,每頁 512字節,最多 256頁
          • 從 1K到 2K字節數據 EEPROM,每頁 512字節,共 4頁。數據 EEPROM包括一頁的選項字節(512字節)。

        頁的大小定義了用戶啟動代碼區域(UBC)大小的最小可調整值。請參考4.4.1用戶啟動區域 (UBC)。 圖3和圖4展示了STM8S系列FLASH存儲器和數據EEPROM的組織機構。

        用戶啟動區域(UBC)

        用戶啟動區域(UBC)包含有復位和中斷向量表,它可用于存儲IAP及通訊程序。UBC有一個兩級保護結構可保護用戶代碼及數據在IAP編程中免于無意的擦除或修改。這意味著該區域總是寫保護的,而且寫保護不能通過使用MASS密鑰來解鎖。

        在ICP模式下(使用SWIM接口)可以通過修改選項字節來配置UBC的大小。UBC選項字節指定了分配在UBC中的頁的數量。UBC區域的起始地址是0x00 8000。 可以通過讀取UBC選項字節來獲得UBC區域的大小。請參考圖6,圖7和圖8來了解UBC區域的存儲器映射。對于選項字節部分,請參考相應的數據手冊了解更多的UBC選項字節的細節。

        1. UBC[7:0]=0x00意味著沒有定義用戶啟動區域。請參考相應的數據手冊了解UBC選項字節的細節。
        2. 頭兩頁(128字節)包含中斷向量表。

        1. UBC[7:0]=0x00意味著沒有定義用戶啟動區域。請參考相應的數據手冊了解UBC選項字節的細節。
        2. 頭兩頁(1K字節)包含中斷向量表。中斷向量表只占用128字節(32個中斷向量)。

        1. UBC[7:0]=0x00意味著沒有定義用戶啟動區域。請參考相應的數據手冊了解UBC選項字節的細節。
        2. 頭兩頁(1K字節)包含中斷向量表。中斷向量表只占用128字節(32個中斷向量)。

        存儲器保護

        讀保護

        當選項字節中的ROP字節被編程為0xAA時,讀保護就生效了。這種情況下,無論寫保護是否生效,在ICP模式中(使用SWIM接口)讀取或修改FLASH程序存儲器和DATA區域都是被禁止的。即使認為沒有什么保護是完全不可破解的,對于一個通用微處理器來說,STM8的讀保護的特性也提供了一個非常高水平的保護級別。

        可以在ICP模式中通過對選項字節中的ROP字節重新編程來解除程序存儲器、UBC和DATA區域的讀保護。在這種情況下,程序存儲器、UBC、DATA區域以及選項字節都被自動擦除,器件也可以被重新編程了。

        存儲器存取安全系統(MASS)

        STM8在復位以后,主程序和DATA區域都被自動保護以防止無意的寫操作。在試圖修改其內容前必須對其解鎖,而解鎖的機制由存儲器存取安全系統(MASS)來管理。UBC區域的特性指明了在UBC中的內容一直是寫保護的一旦存儲器內容被修改完畢,推薦將寫保護使能以防止數據被破壞。


        對主程序存儲器的寫操作

        在器件復位后,可以通過向FLASH_PUKR寄存器連續寫入兩個被叫作MASS密鑰的值來解除主程序存儲器的寫保護。這兩個寫人FLASH_PUKR的值會和下兩個硬件密鑰相比較:

        ● 第一個硬件密鑰:0b0101 0110 (0x56)
        ● 第二個硬件密鑰:0b1010 1110 (0xAE)

        需要通過如下步驟來解除主程序存儲器區域的寫保護:


        向FLASH_PUKR寫入第一個8位密鑰。在系統復位后,當這個寄存器被首次寫入值時,數據總線上的值沒有被直接鎖存到這個寄存器中,而是和第一個硬件密鑰值(0x56)相比較。
        如果密鑰輸入錯誤,FLASH_PUKR寄存器在下一次系統復位之前將一直被鎖住。在下一次復位前,再向該寄存器進行的任何寫操作都會被系統忽略掉。
        如果第一個硬件密鑰正確,當這個寄存器被第二次寫入值時,數據總線上的值沒有被直接鎖存到這個寄存器中,而是和第二個硬件密鑰值(0xAE)相比較。
        如果密鑰輸入錯誤,FLASH_PUKR寄存器在下一次系統復位之前將一直被鎖住。在下一次復位前,再向該寄存器進行的任何寫操作都會被系統忽略掉。
        如果第二個硬件密鑰正確,主程序存儲器寫保護被解除,同時FLASH_IAPSR中的PUL位為1。

        在開始編程之前,應用程序可以校驗PUL位是否被有效地置1。應用程序可以在任意時刻通過清PUL位來重新禁止對FLASH程序區域的寫操作。

        對DATA區域的寫操作

        在STM8復位后,可以通過向FLASH_DUKR寄存器連續寫入兩個被叫作MASS密鑰的值來解除DATA區域的寫保護。這兩個寫入FLASH_DUKR的值會和以下兩個硬件密鑰值相比:

        ● 第一個硬件密鑰:0b0101 0110 (0x56)
        ● 第二個硬件密鑰:0b1010 1110 (0xAE)

        需要通過如下步驟來解除數據區域的寫保護:


        向FLASH_DUKR寫入第一個8位密鑰。在系統復位后,當這個寄存器被首次寫入值時,數據總線上的值沒有被直接鎖存到這個存儲器中,而是和第一個硬件密鑰值(0x56)相比較。
        如果密鑰輸入錯誤,應用程序可以嘗試重新輸入這兩個MASS密鑰來對DATA區域進行解鎖。
        如果第一個硬件密鑰正確,當這個寄存器被第二次寫入值時,數據總線上的值沒有被直接鎖存到這個寄存器中,而是和第二個硬件密鑰值(0xAE)相比較。
        如果密鑰輸入錯誤,DATA EEPROM區域在下一次系統復位之前將一直保持寫保護狀態。在下一次復位前,再向該寄存器進行的任何寫操作都會被系統忽略。
        如果第二個硬件密鑰正確,DATA區域的寫保護被解除,同時FLASH_IAPSR中的DUL位為1。

        在開始編程之前,應用程序可以通過校驗DUL位是否被有效地置1來確認DATA區域已經將寫保護解鎖。應用程序可以在任意時刻通過清空DUL位來重新禁止對DATA區域的寫操作。


        對選項字節的寫操作的步驟和對DATA EEPROM的操作大致相同。但是要注意到FLASH_CR2中的OPT位要位1以及FLASH_NCR中的NOPT位要為0,這樣才可以對選項字節進行寫操作。




        評論


        技術專區

        關閉
        主站蜘蛛池模板: 渭源县| 双柏县| 会泽县| 镇巴县| 拜城县| 陈巴尔虎旗| 如皋市| 鹿邑县| 宜春市| 襄樊市| 彭州市| 台中县| 荃湾区| 望都县| 上栗县| 宜兴市| 嵊泗县| 石河子市| 门头沟区| 江城| 灵武市| 蓬安县| 饶平县| 峨眉山市| 新干县| 杭锦后旗| 甘谷县| 金门县| 公主岭市| 定西市| 临安市| 改则县| 拜泉县| 蕲春县| 措勤县| 巴里| 从化市| 双柏县| 阿瓦提县| 玛纳斯县| SHOW|