本文由“汽車電子expert成長之路”公眾號中“S12(X)系列MCU的片上存儲器資源與分頁訪問機制詳解”文章整理得來 最近接觸S12MCU中關於FLASH的擦寫相關知識,需要捋清楚幾個概念。 (16位單片機) 具體記憶體分配看 MC9S12G系列晶元手冊中 40 頁 本地地址(Local Addre ...
本文由“汽車電子expert成長之路”公眾號中“S12(X)系列MCU的片上存儲器資源與分頁訪問機制詳解”文章整理得來
最近接觸S12MCU中關於FLASH的擦寫相關知識,需要捋清楚幾個概念。 (16位單片機) 具體記憶體分配看 MC9S12G系列晶元手冊中 40 頁
本地地址(Local Address):也稱為局部地址,指內核CPU能夠線性訪問的地址,對於16位MCU來說就是0x0000~0xFFFF的64KB地址空間;
邏輯地址(Logic Address): 也可以稱為虛擬地址,是鏈接文件.prm和記憶體映射文件.map以及預設的編譯結果S19文件所使用的地址。為分頁號 + 分頁視窗(Paging Window)組成的24-bit間斷地址空間,對邏輯地址的訪問需要使用__far指針。
全局地址(Global Address):也稱為物理地址(Physical Address),是晶元在設計時給P-Flash分配的線性連續地址空間,一般在多P-Flash進行操作(比如編寫P-Flash驅動程式,對P-Flash進行擦除、編寫/寫入等)時使用。
地址映射:CPU的定址是對物理地址操作,但是單片機的RESET之後只有相對地址。相對地址,顧名思義,是個相對的,沒有映射之前,CPU是找不到他的,也用不了相對地址的數據。
為了保證CPU執行指令時可正確訪問存儲單元,需將用戶程式中的邏輯地址轉換為運行時由機器直接定址的物理地址,這一過程稱為地址映射。
按照地址是否位於分頁段,可將地址分為未分頁地址(Non-paged address/non-bank address)及分頁地址(paged/bandked address)
① 分頁地址:其實就是邏輯地址。根據不同的器件,其可能存在P-Flash分地址、RAM分頁地址和EEPROM/D-Flash分頁地址。
P-Flash分頁地址:其地址空間是16KB對齊的的間斷地址,由P-Flash分頁號+Flash分頁視窗地址(0x8000~0xBFFF,本地地址的第三個和16KB地址空間)組成。Flash分頁號(Page Number)保存在存儲器映射控制器PPAGE寄存器(地址為0x0015)中,用於在通過分頁視窗訪問Flash時索引邏輯地址。
RAM分頁地址:其地址空間為4KB對齊的間斷地址,由RAM分頁號+RAM分頁視窗地址(0x1000~0x1FFFF,其在本地地址的第一個16KB地址空間)組成。RAM分頁號(Page Number)保存在存儲器映射控制RPAGE寄存器(地址為0x0016)中,用於在通過分頁視窗訪問RAM時索引邏輯地址。
EEPROM分頁地址:其地址空間為1KB對齊的間斷地址,由EEPROM分頁號+EEPROM分頁視窗地址(0x0800~0x0BFF,其在本地地址的第一個16KB地址空間)組成。EEPROM分頁號(Page Number)保存在存儲器映射控制器EPAGE寄存器(地址為0x0017)中,用於在通過分頁視窗訪問EEPROM時索引邏輯地址。
② 未分頁地址:本地地址中除了分頁視窗(0x8000~0xBFFF,第三個16KB地址空間)之外的48KB地址空間都被稱為未分頁區。
邏輯地址直接由分頁號+分頁視窗組成,該地址容易得到。例如 Page E的Flash對應的邏輯地址為0xE8000~0xEBFFF。
全局地址由邏輯地址計算得出:
分頁段: 全局地址 = ( 分頁號 << 14 ) | ( 本地地址 - 0x8000 )
非分頁段: 全局地址 = 本地地址 | 0x30000