STM32的FSMC學習手記(一)
FSMC全稱“靜態(tài)存儲器控制器”,STM32可以通過FSMC與SRAM、ROM、PSRAM、Nor Flash和NandFlash存儲器的引腳相連,從而進行數(shù)據(jù)的交換。
FSMC的一大特點是支持不同位寬的異步讀寫操作。
2、 FSMC的映射地址空間中,不同的BANK是獨立的,可用于擴展不同類型的存儲器。當FSMC同時使用多個外部存儲器時,F(xiàn)SMC會通過總線懸空延時時間參數(shù),來防止訪問沖突發(fā)生。
3、 支持代碼從FSMC擴展的外部存儲器中直接運行。不需要首先調入內部SRAM。
如圖所示,F(xiàn)SMC主要分為四部分:
1、 FSMC一端連接著AHB高速總線,與Cortex-M3內核相連接。
2、 FSMC內部實際上包括Nor Flash和Nand/PC Card兩個控制器,支持兩種不同的存儲方式。
3、 外部設備接口。
4、 配置寄存器,用于選擇FSMC的功能。
FAMC對每個存儲塊分配一個唯一的片選信號NE[4:1]。
FSMC所占用的引腳初始化
在STM32技術手冊中,針對FSMC引腳的GPIO模式配置,已經進行了說明,具體FSMC總線配置方法如下。下表指的是整個FSMC接口的引腳初始化配置說明,應該根據(jù)實際初始化相關的引腳。
完成FSMC引腳初始化后,要配置可編程存儲器的參數(shù),包括時序,是否支持非對齊訪問和等待周期管理(只針對突發(fā)模式訪問PSRAM和NOR閃存
。
p.FSMC_AddressSetupTime = 0; //地址建立時間
p.FSMC_AddressHoldTime = 0; //地址保持時間
p.FSMC_DataSetupTime = 2; //數(shù)據(jù)建立時間
p.FSMC_BusTurnAroundDuration = 0; //總線恢復時間
p.FSMC_CLKDivision = 0; // 時鐘分頻因子
p.FSMC_DataLatency = 0; //數(shù)據(jù)產生時間
p.FSMC_AccessMode = FSMC_AccessMode_A; //FSMC NOR控制器時序
存儲器類型、RAM數(shù)據(jù)寬度、AM地址范圍、用的FSMC BANK、FSMC工作模式的初始化等。
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3; //使用了FSMC的BANK1的子板塊3
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;//禁止地址數(shù)據(jù)線復用
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM; //存儲器類型為SRAM
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; //存儲器數(shù)據(jù)寬度為16位
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; //關閉突發(fā)模式訪問
//等待信號優(yōu)先級,只有在使能突發(fā)訪問模式才有效
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
//關閉Wrapped burst access mode,只有在使能突發(fā)訪問模式才有效
FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
//等待信號設置,只有在使能突發(fā)訪問模式才有效
FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; //使能這個BANK的寫操作
//使能/關閉等待信息設置,只在使能突發(fā)訪問模式才有效
FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; //關閉Extend Mode
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; //關閉Write Burst Mode
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; //讀操作時序參數(shù)
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; //寫操作時序參數(shù)
一、FSMC的特點:
1、2、
3、
二、FSMC的結構組成:
1、
2、
3、
4、
三、FSMC的映射空間
FSMC管理1GB的映射地址空間??梢詣澐譃?個256M的BANK,每個BANK又劃分為4個64M的子BANK,如下表所示。FAMC對每個存儲塊分配一個唯一的片選信號NE[4:1]。
四、FSMC的初始化
在使用SRAM之前,我們需要對SRAM使用的FSMC BANK進行參數(shù)配置,使之與SRAM芯片的要求相符合。FSMC所占用的引腳初始化
完成FSMC引腳初始化后,要配置可編程存儲器的參數(shù),包括時序,是否支持非對齊訪問和等待周期管理(只針對突發(fā)模式訪問PSRAM和NOR閃存
。
存儲器類型、RAM數(shù)據(jù)寬度、AM地址范圍、用的FSMC BANK、FSMC工作模式的初始化等。
評論