<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

YTM32系列MCU Flash模塊功能詳解

CHANBAEK ? 來源:嵌入式修煉手冊 ? 作者: Major Lin ? 2023-07-24 10:00 ? 次閱讀

Flash(閃存)是一種可擦除的只讀存儲器,按照實現方式和運行特性Flash一般還會分為NOR和NAND兩種。其中NOR Flash支持隨機地址的讀取方式,在讀取操作上類似于RAM,比較適合程序的直接讀取運行,而NAND Flash讀取是基于頁的方式,一般無法隨機讀取。在MCU中,Flash需要支持程序和數據的存儲,所以實現方式上也都是NOR Flash。

基本特性

YTM32系列MCU中Flash的控制是通過EFM(Embedded Flash Module)控制的,這里以ME0x系列MCU為例,EFM模塊支持如下的一些功能:

  • 512KB * 2 的程序存儲區域,帶有ECC功能,Sector大小為2K
  • 256KB 單獨的數據存儲塊,帶有ECC功能,Sector大小為1K
  • 4KB的NVR區域,帶有ECC功能,Sector大小為1K
  • 支持Flash按區域(16KB單位)的寫保護功能
  • 支持調試器禁用
  • 支持Flash命令執行結束和異常中斷
  • 支持Block Swap的OTA升級功能
  • 支持ECC錯誤地址記錄和單比特、多比特中斷
  • 支持OTP(One Time Program,一次可編程)區域
  • 支持HCU 密鑰存儲(可擦寫,不可讀?。?/li>
  • 支持塊擦除、扇區(sector)擦除和整個chip的擦除操作
  • 寫入頁大小為8Bytes

Flash的基本術語約定

為了便于理解,這里整理一下Flash使用中常用的一些基本術語:

  • PFlash,程序Flash,實際也可以保存數據,屬于基于應用場景的一種約定名稱
  • DFlash,數據Flash,實際也可以運行程序,同樣屬于基于應用場景的一種約定名稱
  • Block,Flash塊,表示物理上的一個Flash塊,不同物理塊的flash可以支持Read While Write(RWW)特性
  • Sector,扇區,這個是Flash擦除的最小單位,屬于Flash的物理特性,軟件無法修改
  • Page,Flash 編程的最小單位,同樣屬于Flash物理特性,軟件無法修改
  • RWW,Read While Write,指的是Flash在運行擦除或者編程操作時候支持Flash的讀取操作
  • ECC校驗,糾錯算法的一種,可以糾正單比特錯誤,檢測多比特錯誤

Memory Map定義

這里以ME0x為例,芯片系統存儲的memory map如下

NameStart AddressEnd AddressSize(KB)BlockProtect
PFlash00x0000_00000x0007_FFFF5120ADDR_PROT0
PFlash10x0008_00000x000F_FFFF5121ADDR_PROT1
DFlash0x0010_00000x0013_FFFF2562ADDR_PROT2
AES_NVR0x1000_00000x1000_03FF10No Read + Customer Key
OTP_NVR0x1001_00000x1001_03FF10No Erase
BOOT_NVR0x1002_00000x1002_03FF11SWAP CMD only
CUS_NVR0x1003_00000x1003_03FF11Customer Key

上述表格中PFlash0和PFlash1是用于存儲用戶程序的,當使用OTA功能的時候,這兩個Block可以通過物理地址的重映射互換,實現應用升級。

AES_NVR主要用于保存HCU中使用的密鑰,該部分占用1KB空間,可以實現32*256Bit的密鑰存儲。該部分區域支持用戶的Program和Erase,但是不支持讀取操作,可以保證密鑰的安全。當HCU需要使用密鑰的時候,軟件可以直接調用Flash的命令將需要用到的Key直接load到HCU中使用,整個過程軟件只能選擇key而不能讀取或者修改key。注意program和erase AES key區域需要用customer key解鎖。

OTP_NVR該部分可以用于保存一次可編程數據,OTP(One Time Program)區域的特點是只能一次program,不支持擦寫和重新program。應用中可以在該部分保存一些產品ID信息或者其它不能希望后續修改的信息。注意該部分的讀取并沒有限制。

BOOT_NVR這部分用來保存和OTA升級相關的數據,軟件應該避免對該區域進行操作,需要使用OTA Swap功能的時候,軟件需要發送SWAP命令實現Flash的Block Swap。

CUS_NVR這部分區域包含Flash擦寫保護配置和Debugger禁用Tag,用戶可以向該區域的特定地址program特定值來實現對Flash的擦寫保護和調試端口禁用。CUS_NVR的剩余部分是用戶可以自由使用的,對CUS_NVR的讀寫操作需要先通過寫入customer key來解鎖。

Flash的讀寫擦操作

讀取、寫入和擦除是Flash的基本操作,Flash的特性是擦除之后bit變成1,寫入操作是將相應的bit改寫成0,不過因為有ECC的限制,YTM32系列MCU都不支持Reprogram,也就是不支持Flash 頁數據有非1情況下的頁編程,EFM模塊在執行Program命令之前會先從Flash中讀取頁數據并驗證數據為全1,驗證失敗則該頁無法編程。

另外Flash的物理塊同一個時間只能執行讀取、寫入或者擦除的任一操作,這就限制了我們在對一個物理塊(Block)進行寫入或者擦除操作時候不能讀取Flash內容。這也意味著Flash在執行寫入或者擦除的時候,處理器不能從Flash中繼續讀取程序執行代碼,否則EFM模塊會直接產生bus error(M0+中對應為hardfault)。這也是L系列MCU在進行Flash操作(包括DFlash)的時候必須關閉中斷的原因。

在ME0x MCU中總共有3個物理Block,在使用過程中,按照上述原則,處理器在不能對同一個block同時進行讀寫操作,所以典型的使用方式有如下幾種:

  1. PFlash0和PFlash1用于保存程序和運行數據,DFlash用于保存Bootloader程序和模擬EEPROM的代碼,這樣在boot模式下,軟件可以直接對兩塊PFlash進行讀寫操作而不必禁用系統中斷;而在應用軟件運行過程中,軟件可以直接操作模擬EEPROM區域而不必禁用系統中斷。
  2. 在上述配置的基礎上使用OTA功能,PFlash0和PFlash1分別保存一套程序代碼,通過SWAP指令決定下次復位之后從哪個block啟動。當使用OTA功能的時候,當前Block運行的程序可以直接對另一個Block的Flash進行擦寫操作而不用關閉中斷,因為這個時候軟件是不會跳轉到另外一個block運行的,當然如果軟件在操作另外一個block的時候,同時對這個block進行讀操作也是不允許的。

當前EFM設計中,為了方便軟件使用,對于Flash的編程操作是直接將數據寫入Flash對應的地址(數據都需要4字節對齊),EFM模塊會從寫入操作捕獲寫入操作的地址和數據信息。在這種設計下,軟件對Flash地址的寫操作并不會產生錯誤,這個和Flash不支持直接寫操作是有一定沖突的,所以嚴格來說軟件需要通過MPU模塊對不需要編程的Flash進行禁止寫操作保護。注意Flash的寫保護操作只能保護Flash內容不被擦除和重新編程,處理器直接對這些地址進行寫操作的時候,EFM模塊并不會報錯,只有軟件Launch了扇區擦寫(Sector Erase)或者頁編程(Program)命令的時候,EFM模塊才會檢查當前區域時候被保護,如果為保護區域,EFM會abort命令并返回access error錯誤。

Flash command流程

對于Flash的操作都是基于Command來操作的,ME0x支持的command列表如下:

CodeDescriptionNeed Address
0x02Program 64 bitsY
0x03Program 64bits and read back verifyY
0x10Sector eraseY
0x11Sector erase and verifyY
0x12Erase block (only main array)
Y
0x13Erase block and then verify (only main array)Y
0x1EErase chip
N
0x20Load AES Key
N (Y in MD1)
0x30Boot Swap
N
0x40Program NVR
Y
0x41Erase NVR
Y
0x42Read NVRY

以Flash Program為例,Program一個64 bits并verify的command流程如下:

  1. 確認EFM的Prescaler參數設置正確
  2. 跳轉到RAM中執行代碼,并根據需要決定是否需要關閉全局中斷
  3. 讀取EFM_STS寄存器,判斷當前EFM是否正在執行命令
  4. 向需要PROGRAM的flash地址寫入64bit長度數據
  5. 0xfd9573f5EFM_CMD_UNLOCK解鎖FLASH command
  6. 寫0x03到EFM_CMD開始執行command
  7. 輪詢讀取EFM_STS寄存器等待命令執行結束
  8. 讀取EFM_STS驗證command執行結果

EFM寄存器介紹

EFM對Flash的所有操作都是通過寄存器接口實現的,這里對EFM寄存器的主要域做一個簡單介紹。

CTRL寄存器

CTRL寄存器用于配置EFM操作的基礎配置,比如低功耗模式是否關閉Flash,選擇HCU的KEY,EFM模塊的時鐘基準,是否開啟數據預取加速,數據讀取的等待周期和各種中斷源的開關。

圖片
EFM CTRL寄存器

AES_KEY_SEL用于選擇load到HCU中AES key的ID,這個操作后續都換成Flash 命令操作了,僅在ME0x中有該域。

PRESCALER是Flash操作的一個基礎分頻,軟件初始化的時候需要將PRESCALER設置為主頻/2MHz,比如Core時鐘為120MHz,那么,EFM模塊會根據這個值來產生program和erase的時間,如果這個值設置不準確(主要是偏?。┛赡軙е翭lash編程或者擦除異常。SDK中在時鐘初始化的時候自動適配該值。

RWS是Flash讀操作的等待周期,ME0x中Flash的最高頻率是40MHz,當主頻為120MHz時候,,RWS設置過大會導致系統性能下降,過小則會導致Flash讀取數據異常。RWS通過時鐘的.flashDiv = *SCU_SYS_CLK_DIV_BY_3* 配置,SCU_SYS_CLK_DIV_BY_3 表示3分頻,RWS=2。

STS寄存器

STS寄存器保存了Flash操作的狀態信息,包含Flash當前是否在執行命令,當前的啟動Block,Flash命令的執行結果和錯誤原因以及ECC錯誤的標志位。

CMD寄存器

軟件通過向CMD寫入命令來啟動flash的相關操作,為了保護CMD不被意外觸發,對CMD操作之前需要向CMD_UNLOCK寄存器寫入0xfd9573f5來解鎖,解鎖后軟件必須立即寫入CMD而不能進行其他寄存器訪問,否則CMD會產生Access Error。

TIMING1和TIMING2寄存器

這兩個寄存器是用來做Flash命令的時序微調,當CTRL_PRESCALER域正確配置時,這兩個寄存器保持復位值就可以了,錯誤的修改這兩個值會導致Flash擦寫異常。

NVR_ADDR和NVR_DATA

這一組寄存器用來傳遞NVR操作的地址和數據信息。

ADDR_PROT寄存器

ADDR_PROT是一組寄存器,ME0x中是3個32位的寄存器,每個寄存器保護一個block,ADDR_PROT的所有bit只能由1寫0,bit為1表示對應區域是未保護的,為0則表示對應區域不能進行擦除和寫入操作,ADDR_PROT上電時會自動從CFG_NVR的特定地址載入。

ADDR_PROT0:定義了Block0(PFlash0)的保護區域,每個bit保護16KB。

ADDR_PROT1:定義了Block1(PFlash1)的保護區域,每個bit保護16KB。

ADDR_PROT0:定義了Block0(DFlash)的保護區域,每個bit保護8KB。

ECC_ERR_ADDR寄存器

該寄存器保存了發生ECC錯誤的地址,軟件可以配合ECC錯誤的STS標志實現對Flash ECC錯誤的定位。

Flash操作時間

軟件應用中對于Flash的編程和擦寫的時間一般比較敏感,這里將Flash一些基本操作的時間列舉如下:

操作M系列L系列
Sector Erase16ms4.5ms
Block Erase16ms35ms
Chip Erase16ms35ms
Page Program45us50us

因為Flash操作時間和Prescaler和TIMING寄存器配置有關,上述表格的數據是在Prescaler正確配置和TIMING保持默認值下的數據。

M系列擦除的時間都是16ms,Flash array支持多扇區同時擦寫,所以整個block甚至整個芯片的擦除時間都是16ms,當采用erase retry的擦除方式時,EFM會按照800us的周期對flash進行擦除嘗試,這種方式下擦寫的時間是800us~16ms。Erase retry僅支持單個sector的擦寫。

L系列因為只有一個Block的緣故,Block Erase和Chip Erase并沒有什么區別,也不支持erase retry功能,另外L系列的Dflash實際和Pflash屬于相同的block,所以對Dflash進行擦寫操作時候,也不支持對PFlash進行讀操作。因此用Dflash模擬EEPROM的時候還是需要禁用系統中斷的。

調試禁用和Flash保護

為了保護用戶的軟件代碼,ME0x系列支持通過Flash禁用芯片調試端口,這個過程是在芯片初始化過程中通過硬件實現的。同樣為了避免程序在運行過程中對Flash進行意外操作,Flash同樣支持基于地址的擦寫保護,應用程序可以根據實際應用需求限制。

在YTM32B1ME0x中,CUS_NVR的起始地址是0x1001_0000U ,這部分NVR區域中數據定義如下:

Region(32bits)AddressDescription
Debugger Disable Tag 00x10010000TAG=0x5a5a5a5a Disable debugger
Debugger Disable Tag 10x10010004TAG=0x5a5a5a5a Disable debugger
PROT0 Tag0x10010008TAG=0x5a5a5a5a
PROT0 Value0x1001000CADDR_PROT0 Init value
PROT1 Tag0x10010010TAG=0x5a5a5a5a
PROT1 Value0x10010014ADDR_PROT1 Init value
PROT2 Tag0x10010018TAG=0x5a5a5a5a
PROT2 Value0x1001001CADDR_PROT2 Init value
User NVRUser can use other left space

因為NVR區域的頁大小也是8 Bytes(64bits),實際單次至少寫入兩個words。比如當希望在上電后禁用調試端口,那么只需要向0x10010000U地址寫入0x5a5a5a5a, 0x5a5a5a5a,那么下次芯片復位之后調試端口默認就不會開啟了。

PROT相應的tag和value也是一起編程的,當tag匹配的時候,下次上電對應的value就會自動load到相應的寄存器實現Flash的保護。

HCU KEY區域

ME0x芯片內置HCU加速模塊,可以實現硬件的AES/SHA/SM4運算加速,FLASH模塊支持存儲32組長度為256bit的AES KEY,軟件在使用這些key的時候可以直接將KEY load到HCU模塊,這個過程中軟件無法讀取KEY的值,可以保證KEY的安全性。

在ME0x中,HCU的KEY是通過EFM_CTRL_AES_KEY_SEL域來選擇然后發Flash命令讀取的,不過后續項目中將這個操作統一成標準Flash command,用戶直接給出KEY存儲的地址,然后直接通過命令load。因為KEY的load本身也是一個Flash操作,所以執行該命令的時候同樣不支持RWW操作,軟件需要關閉中斷,并在RAM中執行該命令。

NVR操作注意事項

因為NVR區域和block有一定的對應關系,并且block swap還會改動這個對應關系,除非明確軟件和NVR不在一個block,否則對于NVR區域的操作還是需要關中斷和在RAM中執行。

對于NVR區域的擦除和寫入操作的時間與Main Array一致。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    16142

    瀏覽量

    345101
  • 閃存
    +關注

    關注

    16

    文章

    1701

    瀏覽量

    114342
  • 寄存器
    +關注

    關注

    30

    文章

    5167

    瀏覽量

    118227
  • FlaSh
    +關注

    關注

    10

    文章

    1567

    瀏覽量

    146904
  • 存儲器
    +關注

    關注

    38

    文章

    7222

    瀏覽量

    162476
收藏 人收藏

    評論

    相關推薦

    YTM32L系列MCU低功耗模式簡介

    YTM32L系列MCU是蘇州云途半導體針對車身控制領域推出的入門級32位產品,最高主頻達48MHz,內嵌128KB Flash和16KB SRAM,
    發表于 07-24 09:52 ?1075次閱讀

    YTM32的LIN通信協議引擎LinFlexD外設模塊詳解

    YTM32微控制器的LINFlexD外設模塊,實現了LIN協議控制器的功能,可以支持LIN總線協議的主機和從機功能。
    的頭像 發表于 10-08 11:15 ?1288次閱讀
    <b class='flag-5'>YTM32</b>的LIN通信協議引擎LinFlexD外設<b class='flag-5'>模塊</b><b class='flag-5'>詳解</b>

    YTM32的模數轉換器ADC外設模塊詳解

    YTM32的ADC轉換器外設最多可以集成32個輸入通道,最高12b轉換精度,最快可以支持2M Sps的12b采樣。
    的頭像 發表于 10-09 16:35 ?1303次閱讀
    <b class='flag-5'>YTM32</b>的模數轉換器ADC外設<b class='flag-5'>模塊</b><b class='flag-5'>詳解</b>

    YTM32的增強型定時器eTMR外設模塊簡介

    YTM32微控制器上集成的eTMR模塊,是一個定時器外設,下轄多至8個通道
    的頭像 發表于 10-31 14:18 ?708次閱讀
    <b class='flag-5'>YTM32</b>的增強型定時器eTMR外設<b class='flag-5'>模塊</b>簡介

    在AT32系列MCUFlash模擬EEPRO的應用原理和使用方法

    AN0002—AT32 MCU如何使用片上Flash來實現EEPROM功能當前諸多嵌入式應用場景都需要用到 EEPROM 作為非易失性的數據存儲設備。出于客戶低成本的考慮,AT32 系列
    發表于 11-26 07:15

    Holtek新推Enhanced Flash MCU系列產品

    Holtek新推Enhanced Flash MCU系列產品,可有效提高生產效能與產品靈活性 Holtek推出全新系列的Enhanced Flas
    發表于 12-02 08:30 ?700次閱讀

    基于MSP430功能模塊詳解系列之——ADC12

    基于MSP430功能模塊詳解系列之——ADC12
    發表于 10-12 15:24 ?4次下載
    基于MSP430<b class='flag-5'>功能模塊</b><b class='flag-5'>詳解</b><b class='flag-5'>系列</b>之——ADC12

    基于MSP430功能模塊詳解系列之——FLASH存儲器

    基于MSP430功能模塊詳解系列之——FLASH存儲器
    發表于 10-12 15:27 ?11次下載
    基于MSP430<b class='flag-5'>功能模塊</b><b class='flag-5'>詳解</b><b class='flag-5'>系列</b>之——<b class='flag-5'>FLASH</b>存儲器

    基于MSP430功能模塊詳解系列之——TimerA

    基于MSP430功能模塊詳解系列之——TimerA
    發表于 10-12 15:32 ?2次下載
    基于MSP430<b class='flag-5'>功能模塊</b><b class='flag-5'>詳解</b><b class='flag-5'>系列</b>之——TimerA

    基于MSP430功能模塊詳解系列之——系統時鐘

    基于MSP430功能模塊詳解系列之——系統時鐘
    發表于 10-12 16:40 ?5次下載
    基于MSP430<b class='flag-5'>功能模塊</b><b class='flag-5'>詳解</b><b class='flag-5'>系列</b>之——系統時鐘

    關于Flash MCU仿真器的幾種設計方法詳解

    由于市場對MCU功能的要求總是不斷變化和升級,MCU應用的領域也不斷擴展,因此往往需要對最初的設計進行修改。Flash MCU與以往OTP/
    發表于 08-05 09:58 ?3531次閱讀

    AN0002—AT32 MCU如何使用片上Flash來實現EEPROM功能

    AN0002—AT32 MCU如何使用片上Flash來實現EEPROM功能當前諸多嵌入式應用場景都需要用到 EEPROM 作為非易失性的數據存儲設備。出于客戶低成本的考慮,AT32 系列
    發表于 11-18 16:21 ?14次下載
    AN0002—AT32 <b class='flag-5'>MCU</b>如何使用片上<b class='flag-5'>Flash</b>來實現EEPROM<b class='flag-5'>功能</b>

    瑞薩推出SH7216系列32-位片上Flash存儲器MCU

    瑞薩推出SH7216系列32-位片上Flash存儲器MCU作者:時間:2009-04-21來源:電子產品世界字號:?小?中?大關鍵詞:?瑞薩?RISC?32MCU?
    發表于 12-02 09:51 ?11次下載
    瑞薩推出SH7216<b class='flag-5'>系列</b>32-位片上<b class='flag-5'>Flash</b>存儲器<b class='flag-5'>MCU</b>

    YTM32B1ME0系列MCU時鐘模塊介紹

    YTM32 M系列芯片基于32位車規級ARM Cortex-M33內核,CPU全溫域主頻高達120MHz,提供1.25MB嵌入式閃存,符合ISO26262的ASIL-B等級要求,可靠性
    發表于 07-24 09:55 ?1262次閱讀
    <b class='flag-5'>YTM</b>32B1ME0<b class='flag-5'>系列</b><b class='flag-5'>MCU</b>時鐘<b class='flag-5'>模塊</b>介紹

    戰略合作 | IAR全面支持云途車規級MCU

    IAR嵌入式開發解決方案現已全面支持云途半導體YTM32系列MCU,攜手合作伙伴共同助力高端創新應用的開發 中國,上海 – 2024 年 1 月 26 日 – 嵌入式開發軟件和服務的全球領導者IAR
    發表于 01-29 17:03 ?286次閱讀
    戰略合作 | IAR全面支持云途車規級<b class='flag-5'>MCU</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>