您好,登錄后才能下訂單哦!
STM32的FSMC外設是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
Flexible static memory controller(FSMC)靈活的靜態存儲控制器。FSMC可以連接異步或同步存儲器或16位PC存儲卡,主要用途有:
將 AHB 數據通信事務轉換為適當的外部器件協議
滿足外部器件的訪問時序要求
所有外部存儲器共享地址、數據和控制信號,但有各自的片選信號。FSMC 一次只能訪問一個外部器件。
FSMC,即靈活的靜態存儲控制器,能夠與同步或異步存儲器和16位PC存儲器卡連接,STM32的FSMC接口支持包括SRAM、NANDFLASH、NORFLASH和PSRAM等存儲器。
△FSMC框圖示意
AHB設備接口可以使內部CPU和其他主總線外設去訪問外部存儲器。AHB事務可以傳輸外部設備協議。特別是當外部存儲器被選擇位8位或16位,32位的AHB傳輸傳輸事務會被劃分為多個連續的8位或16的傳輸事務。片選會在每次訪問時切換。
通用事務規則要求AHB傳輸數據寬度必須是8位、16位或32位。但是訪問外部數據必須有個固定的數據寬度。這可能導致不一樣的傳輸。
因此必須遵循一些簡單的事務規則:
AHB事務數據寬度必須和存儲器數據寬度相同。在這種情況下不會出問題;
AHB事務數據寬度大于存儲器數據寬度,在這種情況下,FSMC會將AHB事務分為多個連續的存儲器訪問,這樣符合外部存儲器訪問數據寬度;
AHB事務數據小存儲器寬度,在這種情況下,異步傳輸可能一致,也可能不一致,這取決于外部設備的類型。
對設備的異步訪問要具有字節選擇功能(SRAM,ROM,PSRAM),①FSMC 允許寫入事務通過其字節選擇通道 NBL[1:0] 訪問恰當的數據,②允許讀取事務。會讀取所有存儲器字節,并將丟棄無用的存儲器字節。 NBL[1:0]在讀取事務期間保持為低電平。
對不具有字節選擇功能的器件( 16 位 NOR 和 NAND Flash)進行異步訪問,當請求對 16 位寬的 Flash 存儲器進行字節訪問時會發生此情形。
顯然,不能在字節模式下訪問此器件(只能針對 Flash 存儲器讀取或寫入 16 位字),因此①不允許寫入事務,②允許讀取事務。會讀取所有存儲器字節,并將丟棄無用的存儲器字節。 NBL[1:0]在讀取事務期間保持低電平。
FSMC的外部設備地址映像,STM32的FSMC將外部存儲器劃分為固定大小為256M字節的四個存儲塊:
塊1被用于4個NORflash或者PSRAM內存設備。塊1被劃分為4塊NORflash/PSRAM帶有獨立的片選信號。
塊2和塊3用于連接NANDflash(一個塊驅動一個設備)
塊4用于連接PC塊設備
對于每個存儲區域,所要使用的存儲器類型由用戶在配置寄存器中定義
HADDR[25:0] 包含外部存儲器地址。由于HADDR為字節地址,而存儲器按字尋址,所以根據存儲器數據寬度不同,實際向存儲器發送的地址也將有所不同,如下表所示:
非復用 I/OPSRAM/SRAM
注意:前綴“N”表示相關的信號為低電平有效
▽模式1寫訪問
▽模式A寫訪問
與模式1的不同之處在于NOE 的切換與獨立的讀取和寫入時序
對于模式A,
ADDSET就是NWE的高電平時間,也就是地址建立時間
DATAST就是NWE的低電平時間,也就是數據保持時間
readWriteTiming.FSMC_AddressSetupTime = 0x02; //地址建立時間(ADDSET)為2個HCLK 2*1/120M=16ns readWriteTiming.FSMC_AddressHoldTime = 0x02; //地址保持時間(ADDHLD),16ns readWriteTiming.FSMC_DataSetupTime = 0x06; //數據建立時間,50ns readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;//總線恢復時間 readWriteTiming.FSMC_CLKDivision = 0x00;// 時鐘分頻因子 readWriteTiming.FSMC_DataLatency = 0x00;//數據產生時間 readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A; //模式A
FSMC_AddressSetupTime:這些位定義地址的建立時間,適用于SRAM、ROM和異步總線復用模式的NOR閃存操作。
FSMC_AddressHoldTime :這些位定義地址的保持時間,適用于SRAM、ROM和異步總線復用模式的NOR閃存操作。
FSMC_DataSetupTime:這些位定義數據的保持時間,適用于SRAM、ROM和異步總線復用模式的NOR閃存操作。
FSMC_BusTurnAroundDuration:這些位用于定義一次讀操作之后在總線上的延遲(僅適用于總線復用模式的NOR閃存操作),一次讀操作之后控制器需要在數據總線上為下次操作送出地址,這個延遲就是為了防止總線沖突。如果擴展的存儲器系統不包含總線復用模式的存儲器,或最慢的存儲器可以在6個HCLK時鐘周期內將數據總線恢復到高阻狀態,可以設置這個參數為其最小值。
FSMC_CLKDivision :定義CLK時鐘輸出信號的周期,以HCLK周期數表示。
FSMC_DataLatency:處于同步成組模式的NOR閃存,需要定義在讀取第一個數據之前等待的存儲器周期數目。這個時間參數不是以HCLK表示,而是以閃存時鐘(CLK)表示。在訪問異步NOR閃存、SRAM或ROM時,這個參數不起作用。操作CRAM時,這個參數必須為0
FSMC_AccessMode :訪問模式
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;// 這里我們使用NE1 ,也就對應BTCR[6],[7]。 FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;// 不復用數據地址 FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM; FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;//存儲器數據寬度為8bit FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;// 存儲器寫使能 FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;// 讀寫使用相同的時序 FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming;//讀寫時序 FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &readWriteTiming;//寫時序
FSMC_Bank:nor被分為四塊,其中這個參數是說明對那個塊編程
FSMC_DataAddressMux:地址\數據是否復用
FSMC_MemoryType:存儲器類型
FSMC_MemoryDataWidth:數據總線寬度8位/16位
FSMC_BurstAccessMode:是否進行成組模式訪問
FSMC_WaitSignalPolarity:等待信號有效級性
FSMC_WrapMode:該位決定控制器是否支持把非對齊的AHB成組操作分割成2次線性操作;該位僅在存儲器的成組模式下有效。
FSMC_WaitSignalActive:當閃存存儲器處于成組傳輸模式時,NWAIT信號指示從閃存存儲器出來的數據是否有效或是否需要插入等待周期。該位決定存儲器是在等待狀態之前的一個時鐘周期產生NWAIT信號,還是在等待狀態期間產生NWAIT信號。
FSMC_WriteOperation:該位指示FSMC是否允許/禁止對存儲器的寫操作。
FSMC_WaitSignal:當閃存存儲器處于成組傳輸模式時,這一位允許/禁止通過NWAIT信號插入等待狀態。
FSMC_ExtendedMode:該位允許FSMC使用FSMC_BWTR寄存器,即允許讀和寫使用不同的時序。
FSMC_WriteBurst:對于處于成組傳輸模式的閃存存儲器,這一位允許/禁止通過NWAIT信號插入等待狀態。讀操作的同步成組傳輸協議使能位是FSMC_BCRx寄存器的BURSTEN位。
FSMC_ReadWriteTimingStruct:讀時序配置指針
FSMC_WriteTimingStruct:寫時序配置指針
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。