FSMC模塊可以與同步或異步存儲器和16位PC存儲器卡接口,它的主要做用是:編程
全部的外部存儲器共享控制器輸出的地址、數據和控制信號,每一個外部設備能夠經過一個惟一的片選信號加以區分。FSMC在任一時刻只訪問一個外部設備。異步
─ 靜態隨機存儲器(SRAM)spa
─ 只讀存儲器(ROM)3d
─ NOR閃存blog
─ PSRAM(4個存儲器塊)接口
─ 等待週期可編程(多達15個週期)同步
─ 總線恢復週期可編程(多達15個週期)軟件
─ 輸出使能和寫使能延遲可編程(多達15週期)配置
─ 獨立的讀寫時序和協議,可支持寬範圍的存儲器和時序硬件
注:[1]若是當前FIFO正在被佔用,此時其餘的FIFO操做將等待,直到當前的FIFO操做完成
[2]一般在系統復位或上電時,應該設置好全部定義外部存儲器類型和特性的FSMC寄存器,並保持它們的內容不變;固然,也能夠在任什麼時候候改變這些設置。
圖 FMSC框圖
FSMC包含四個主要模塊:
● AHB接口(包含FSMC配置寄存器)
● NOR閃存和PSRAM控制器
● NAND閃存和PC卡控制器
● 外部設備接口
AHB接口爲內部CPU和其它總線控制設備訪問外部靜態存儲器提供了通道。 AHB操做被轉換到外部設備的操做。
當選擇的外部存儲器的數據通道是16或8位時,在AHB上的32位數據會被分割成連續的16或8位的操做。 AHB時鐘(HCLK)是FSMC的參考時鐘。
請求AHB操做的數據寬度能夠是8位、16位或32位,而外部設備則是固定的數據寬度,此時須要保障實現數據傳輸的一致性。 所以,FSMC執行下述操做規則:
● AHB操做的數據寬度與存儲器數據寬度相同:無數據傳輸一致性的問題。
● AHB操做的數據寬度大於存儲器的數據寬度:此時FSMC將AHB操做分割成幾個連續的較小數據寬度的存儲器操做,以適應外部設備的數據寬度。
● AHB操做的數據寬度小於存儲器的數據寬度: 依據外部設備的類型,異步的數據傳輸有可能不一致。─ 與具備字節選擇功能的存儲器(SRAM、ROM、PSRAM等)進行異步傳輸時,FSMC執行讀寫操做並經過它的字節通道BL[1:0]訪問正確的數據。
─ 與不具備字節選擇功能的存儲器(NOR和16位NAND等)進行異步傳輸時,即須要對16位寬的閃存存儲器進行字節訪問;顯然不能對存儲器進行字節模式訪問(只容許16位的數據傳輸),所以:
a. 不容許進行寫操做
b. 能夠進行讀操做(控制器讀出完整的16位存儲器數據,只使用須要的字節)。
FSMC由一組寄存器進行配置
圖 FMSC存儲BANK
從FSMC的角度看,能夠把外部存儲器劃分爲固定大小爲256M字節的四個存儲塊:
注:(1) HADDR是須要轉換到外部存儲器的內部AHB地址線。
表 NOR/PSRAM存儲塊選擇
HADDR是字節地址,而存儲器訪問不都是按字節訪問,所以接到存儲器的地址線依存儲器的數據寬度有所不一樣
注:(1) 對於16位寬度的外部存儲器,FSMC將在內部使用HADDR[25:1]產生外部存儲器的地址FSMC_A[24:0]。不論外部存儲器的寬度是多少(16位或8位),FSMC_A[0]始終應該連到外部存儲器的地址線A[0]。
表 外部存儲器地址
表 存儲器映像和時序寄存器
表 NAND存儲塊選擇
注:數據區(通用/屬性空間的前64K字節區域)
命令區(通用/屬性空間的第2個64K字節區域)
地址區(通用/屬性空間的第2個128K字節區域)
應用軟件使用這3個區訪問NAND閃存存儲器:
● 發送命令到NAND閃存存儲器:軟件只需對命令區的任意一個地址寫入命令便可。
● 指定操做NAND閃存存儲器的地址:軟件只需對地址區的任意一個地址寫入命令便可。由於一個NAND地址能夠有4或5個字節(依實際的存儲器容量而定),須要連續地執行對地址區的寫才能輸出完整的操做地址。
● 讀寫數據:軟件只需對數據區的任意一個地址寫入或讀出數據便可。 由於NAND閃存存儲器自動地累加其內部的操做地址,讀寫數據時沒有必要變換數據區的地址,即沒必要對連續的地址區操做。
//TODO
//TODO
//TODO