日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

外部 SRAM 实验

發(fā)布時間:2024/3/12 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 外部 SRAM 实验 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?IS62WV51216是ISSI(Integrated Silicon Solution, Inc)公司生產(chǎn)的一顆16位寬512K(512*16,即1M字節(jié))容量的CMOS靜態(tài)內(nèi)存(SRAM)芯片。

IS62WV51216特點:

①高速。具有45ns/55ns訪問速度。

②低功耗。操作時:36mW;待機時:12uW。

③兼容TTL電平。

④全靜態(tài)操作。不需要刷新和時鐘電路。

⑤三態(tài)輸出。

⑥字節(jié)控制功能。支持高/低字節(jié)控制。

圖中A0~18為地址線,總共19根地址線(即2^19=512K,1K=1024);I/O0~15為數(shù)據(jù)線,總共16根數(shù)據(jù)線。CS2和CS1都是片選信號,不過CS2是高電平有效CS1是低電平有效;OE是輸出使能信號(讀信號);WE為寫使能信號;UB和LB分別是高字節(jié)控制和低字節(jié)控制信號;

IS62WV51216讀時序

重點時序: 讀周期時間(tRC) 、地址建立時間(tAA) 、OE建立時間(tDOE)?

我們開發(fā)板使用55ns的IS62WV51216,tRC=55ns tAA=55ns(Max),tDOE=25ns(Max)

IS62WV51216寫時序

?重點時序: 寫周期時間(tWC) 、地址建立時間(tSA) 、WE脈寬(tPWE)

開發(fā)板使用55ns的IS62WV51216,tWC=55ns tSA=0ns,tPWE=45ns(min)

FSMC介紹

?FSMC,即靈活的靜態(tài)存儲控制器,能夠與同步或異步存儲器和16位PC存儲器卡連接,STM32的FSMC接口支持包括SRAM、NAND FLASH、NOR FLASH和PSRAM等存儲器。FSMC的框圖如下圖所示:

FSMC驅(qū)動外部SRAM時,外部SRAM的控制一般有:地址線(如A0~A25)、數(shù)據(jù)線(如D0~D15)、寫信號(WE,即WR)、讀信號(OE,即RD)、片選信號(CS),如果SRAM支持字節(jié)控制,那么還有UB/LB信號。 ? ? ?

而IS62WV51216的信號包括:I/O0~I/O15、A0~A18、OE、WE、CS、UB、LB等,我們將這些信號依次連接STM32 FSMC接口的D0~D15、A0~A18、OE、WE、CS、UB、LB等信號即可。?

STM32的FSMC支持8/16位數(shù)據(jù)寬度,我們這里用到的SRAM是16位寬度的,所以在設置的時候,選擇16位寬就OK了。FSMC的外部設備地址映像,STM32的FSMC將外部存儲器劃分為固定大小為256M字節(jié)的四個存儲塊

STM32的FSMC存儲塊1(Bank1)用于驅(qū)動NOR FLASH/SRAM/PSRAM,被分為4個區(qū),每個區(qū)管理64M字節(jié)空間,每個區(qū)都有獨立的寄存器對所連接的存儲器進行配置。Bank1的256M字節(jié)空間由28根地址線(HADDR[27:0])尋址。 ? ? 這里HADDR,是內(nèi)部AHB地址總線,其中,HADDR[25:0]來自外部存儲器地址FSMC_A[25:0],而HADDR[26:27]對4個區(qū)進行尋址。如下表所示:

當Bank1接的是16位寬度存儲器的時候:HADDR[25:1]->FSMC_A[24:0]

當Bank1接的是8位寬度存儲器的時候:HADDR[25:0]->FSMC_A[25:0]

不論外部接8位/16位寬設備,FSMC_A[0]永遠接在外部設備地址A[0]?

STM32的FSMC存儲塊1 支持的異步突發(fā)訪問模式包括:模式1、模式A~D等多種時序模型,驅(qū)動SRAM時一般使用模式1或者模式 A,這里我們使用模式A來驅(qū)動SRAM

?對于NOR FLASH/PSRAM控制器(存儲塊1),通過FSMC_BCRx、FSMC_BTRx和FSMC_BWTRx寄存器設置(其中x=1~4,對應4個區(qū))。通過這3個寄存器,可以設置FSMC訪問外部存儲器的時序參數(shù),拓寬了可選用的外部存儲器的速度范圍。

SRAM/NOR閃存片選控制寄存器(FSMC_BCRx)

EXTMOD:擴展模式使能位,控制是否允許讀寫不同的時序,設置為0

WREN:寫使能位。我們需要向SRAM寫數(shù)據(jù),故該位必須設置為1

MWID[1:0]:存儲器數(shù)據(jù)總線寬度。00,表示8位數(shù)據(jù)模式;01表示16位數(shù)據(jù)模式;10和11保留。我們的SRAM是16位數(shù)據(jù)線,所以設置WMID[1:0]=01。

MTYP[1:0]:存儲器類型。00表示SRAM、ROM;01表示PSRAM;10表示NOR FLASH;11保留。我們驅(qū)動的芯片為SRAM,所以需要設置MTYP[1:0]=00。

MBKEN:存儲塊使能位。需設置為1?。

SRAM/NOR閃存片選時序寄存器(FSMC_BTRx)

ACCMOD[1:0]:訪問模式。00:模式A;01:模式B;10:模式C;11:模式D。 DATAST[7:0]:數(shù)據(jù)保持時間,等于: DATAST(+1)個HCLK時鐘周期,DATAST最大為255。對IS62WV51216來說,其實就是OE/WE低電平持續(xù)時間,最大為55ns。對STM32F1,一個HCLK=13.8ns (1/72M),設置為3;對STM32F4,一個HCLK=6ns(1/168M) ,設置為8。 ADDSET[3:0]:地址建立時間。表示:ADDSET (+1)個HCLK周期,ADDSET最大為15。對IS62WV51216來說,訪問周期最快位55ns,而我們前面的設置,已經(jīng)可以保證訪問周期不小于55ns,因此這個地址建立時間,我們可以直接設置為0即可。?

因為設置了EXTMOD位,所以讀寫時序共用這個時序寄存器!

寄存器組合說明

在ST官方庫提供的的寄存器定義里面,并沒有定義FSMC_BCRx、FSMC_BTRx、FSMC_BWTRx等這個單獨的寄存器,而是將他們進行了一些組合。規(guī)律如下: ?? ?

FSMC_BCRx和FSMC_BTRx,組合成BTCR[8]寄存器組,他們的對應關(guān)系如下:

BTCR[0]對應FSMC_BCR1,BTCR[1]對應FSMC_BTR1

BTCR[2]對應FSMC_BCR2,BTCR[3]對應FSMC_BTR2

BTCR[4]對應FSMC_BCR3,BTCR[5]對應FSMC_BTR3

BTCR[6]對應FSMC_BCR4,BTCR[7]對應FSMC_BTR4

FSMC_BWTRx則組合成BWTR[7],他們的對應關(guān)系如下:

BWTR[0]對應FSMC_BWTR1,BWTR[2]對應FSMC_BWTR2,

BWTR[4]對應FSMC_BWTR3,BWTR[6]對應FSMC_BWTR4,

BWTR[1]、BWTR[3]和BWTR[5]保留,沒有用到。

硬件連接

?代碼講解:

sram.c 文件:此部分代碼包含 3 個函數(shù),FSMC_SRAM_Init 函數(shù)用于初始化,包括 FSMC 相關(guān) IO 口的 初始化以及 FSMC 配置;FSMC_SRAM_WriteBuffer 和 FSMC_SRAM_ReadBuffer 這兩個函數(shù)分 別用于在外部 SRAM 的指定地址寫入和讀取指定長度的數(shù)據(jù)(字節(jié)數(shù))。 這里需要注意的是:FSMC 當位寬為 16 位的時候,HADDR 右移一位同地址對其,但是 ReadAddr 我們這里卻沒有加 2,而是加 1,是因為我們這里用的數(shù)據(jù)為寬是 8 位,通過 UB 和 LB 來控制高低字節(jié)位,所以地址在這里是可以只加 1 的。另外,因為我們使用的是 BANK1, 區(qū)域 3,所以外部 SRAM 的基址為:0x68000000。

main.c文件

u32 testsram[250000] __attribute__((at(0X68000000)));//測試用數(shù)組 //外部內(nèi)存測試(最大支持1M字節(jié)內(nèi)存測試) void fsmc_sram_test(u16 x,u16 y) { u32 i=0; u8 temp=0; u8 sval=0; //在地址0讀到的數(shù)據(jù) LCD_ShowString(x,y,239,y+16,16,"Ex Memory Test: 0KB"); //每隔4K字節(jié),寫入一個數(shù)據(jù),總共寫入256個數(shù)據(jù),剛好是1M字節(jié)for(i=0;i<1024*1024;i+=4096){FSMC_SRAM_WriteBuffer(&temp,i,1);temp++;}//依次讀出之前寫入的數(shù)據(jù),進行校驗 for(i=0;i<1024*1024;i+=4096) {FSMC_SRAM_ReadBuffer(&temp,i,1);if(i==0)sval=temp;else if(temp<=sval)break;//后面讀出的數(shù)據(jù)一定要比第一次讀到的數(shù)據(jù)大. LCD_ShowxNum(x+15*8,y,(u16)(temp-sval+1)*4,4,16,0);//顯示內(nèi)存容量 } } int main(void) { u8 key; u8 i=0; u32 ts=0;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統(tǒng)中斷優(yōu)先級分組2delay_init(168); //初始化延時函數(shù)uart_init(115200); //初始化串口波特率為115200LED_Init(); //初始化LEDLCD_Init(); //LCD初始化KEY_Init(); //按鍵初始化 FSMC_SRAM_Init(); //初始化外部SRAM POINT_COLOR=RED;//設置字體為紅色 LCD_ShowString(30,50,200,16,16,"Explorer STM32F4"); LCD_ShowString(30,70,200,16,16,"SRAM TEST"); LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");LCD_ShowString(30,110,200,16,16,"2014/5/14"); LCD_ShowString(30,130,200,16,16,"KEY0:Test Sram");LCD_ShowString(30,150,200,16,16,"KEY1:TEST Data");POINT_COLOR=BLUE;//設置字體為藍色 for(ts=0;ts<250000;ts++)testsram[ts]=ts;//預存測試數(shù)據(jù) while(1){ key=KEY_Scan(0);//不支持連按 if(key==KEY0_PRES)fsmc_sram_test(60,170);//測試SRAM容量else if(key==KEY1_PRES)//打印預存測試數(shù)據(jù){for(ts=0;ts<250000;ts++)LCD_ShowxNum(60,190,testsram[ts],6,16,0);//顯示測試數(shù)據(jù) }else delay_ms(10); i++;if(i==20)//DS0閃爍.{i=0;LED0=!LED0;}} }

此段代碼,我們定義了一個超大數(shù)組 testsram,我們指定該數(shù)組定義在外部 sram 起始地址 (__attribute__((at(0X68000000)))),該數(shù)組用來測試外部 SRAM 數(shù)據(jù)的讀寫。注意該數(shù)組的定 義方法,是我們推薦的使用外部 SRAM 的方法。如果想用 MDK 自動分配,那么需要用到分散 加載還需要添加匯編的 FSMC 初始化代碼,相對來說比較麻煩。而且外部 SRAM 訪問速度又遠 不如內(nèi)部 SRAM,如果將一些需要快速訪問的 SRAM 定義到了外部 SRAM,將會嚴重拖慢程序 運行速度。而如果以我們推薦的方式來分配外部 SRAM,那么就可以控制 SRAM 的分配,可以 針對性的選擇放外部還是放內(nèi)部,有利于提高程序運行速度,使用起來也比較方便。

總結(jié)

以上是生活随笔為你收集整理的外部 SRAM 实验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。