版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第三章 存儲(chǔ)器件,一、存儲(chǔ)器概述 二、EEPROM存儲(chǔ)器件 三、SRAM存儲(chǔ)器件 四、Nor-Flash存儲(chǔ)器件 五、Nand-Flash存儲(chǔ)器件 六、附錄 - Nor-Flash與Nand-Flash比較,一、存儲(chǔ)器件概述,存儲(chǔ)器的重要性 存儲(chǔ)器是嵌入式系統(tǒng)的主要組成部分,運(yùn)行的程序需要存儲(chǔ)器,處理數(shù)據(jù)需要存儲(chǔ)器,存儲(chǔ)數(shù)據(jù)也需要存儲(chǔ)器。沒有存儲(chǔ)器,系統(tǒng)無(wú)法工作。,存儲(chǔ)器的種類 只讀存儲(chǔ)器 (簡(jiǎn)稱ROM) ROM是一種非易失性的存儲(chǔ)器,即在電源被關(guān)掉之后也不會(huì)丟失數(shù)據(jù)的。 隨機(jī)訪問存儲(chǔ)器 (簡(jiǎn)稱RAM) RAM是一種易失性的存儲(chǔ)器,即在電源被關(guān)掉之后數(shù)據(jù)會(huì)丟失。,1.1存儲(chǔ)器ROM,ROM的種
2、類很多,一般分為以下5種:,1只讀存儲(chǔ)器( ROM ) 2可編程ROM (PROM) 3電可編程ROM ( EPROM) 4電可擦除可編程ROM ( EEPROM) 5閃存(Flash Memory),1.2 隨機(jī)訪問存儲(chǔ)器RAM,與ROM相比,RAM具有如下一些優(yōu)點(diǎn): 1、讀取速度比ROM快 2、寫入數(shù)據(jù)跟從RAM讀出的速度一樣。 根據(jù)所采用的存儲(chǔ)單元工作原理的不同,RAM又分為SRAM和DRAM。,二、EEPROM存儲(chǔ)器件,EEPROM的種類很多,它們大致可分為以下3種: 并行EEPROM:速度快,高度集成,引腳多 串行EEPROM:引腳少,結(jié)構(gòu)復(fù)雜,容量不大 加密型EEPROM:可加密,
3、操作復(fù)雜,成本高,EEPROM概述,1.1 CAT24WC16介紹,CAT24WC16是CATALYST公司生產(chǎn)的EEPROM,同系列還有CAT24WC02、CAT24WC04、CAT24WC08、CAT24WC32等。 CAT24WC16的存儲(chǔ)空間 內(nèi)部總共有128頁(yè),每一頁(yè)為16字節(jié)(byte),每一字節(jié)為8位(bit),共有2K個(gè)存儲(chǔ)字節(jié)單元(即16K比特位)。 CAT24WC16的其他特性 1.8 到6.0 伏工作電壓范圍。 16字節(jié)頁(yè)寫緩沖器。 與400KHz的I2C總線兼容,符合雙向數(shù)據(jù)傳輸協(xié)議。 具有硬件寫保護(hù)和軟件數(shù)據(jù)保護(hù)功能。 自動(dòng)定時(shí)擦寫周期。,引腳說明,(注意:I2C是個(gè)
4、漏極開路的接口,需要外接上拉電阻),電路連接,1.2 CAT24WC16工作時(shí)序,1. 起停信號(hào) 起始信號(hào): 時(shí)鐘線SCL保持高電平期間,數(shù)據(jù)線SDA電平發(fā)生從高到低的跳變。 停止信號(hào): 時(shí)鐘線SCL保持高電平期間,數(shù)據(jù)線SDA電平發(fā)生從低到高的跳變。 2. 設(shè)備選址 3. 應(yīng)答信號(hào) 4. 寫操作 5. 讀操作,設(shè)備選址,主器件發(fā)送1個(gè)起始信號(hào)啟動(dòng)發(fā)送過程,然后發(fā)送尋址的從器件地址。 8位從器件地址的高4位固定為1010,接下來(lái)3位(A10、A9、A8)為從器件的地址位。R/W為讀寫控制位。 CAT24WC16監(jiān)測(cè)總線當(dāng)其地址與發(fā)送的從地址相符時(shí)發(fā)出1個(gè)應(yīng)答信號(hào), CAT24WC16根據(jù)讀寫控
5、制位的狀態(tài)準(zhǔn)備讀寫操作。,應(yīng)答信號(hào),在SCL時(shí)鐘線上的第9個(gè)時(shí)鐘周期將SDA線拉低就表示一個(gè)應(yīng)答信號(hào)。 I2C總線每成功傳送1Byte,接收器都必須產(chǎn)生1個(gè)應(yīng)答信號(hào)。 CAT24WC16在接收到起始信號(hào)和從器件地址之后也要產(chǎn)生應(yīng)答信號(hào)。 如果該器件工作于讀模式時(shí),在發(fā)送1個(gè)8位數(shù)據(jù)后釋放SDA線并等待1個(gè)應(yīng)答信號(hào)。,寫操作,寫操作分為“字節(jié)寫”和“頁(yè)寫” 。 在“字節(jié)寫”操作模式下,主器件首先給從器件發(fā)送起始信號(hào)和從器件地址信息,在從器件送回應(yīng)答信號(hào)后,然后主器件再發(fā)送一字節(jié)的地址信息到CAT24WC16地址指針,主器件在收到從器件的應(yīng)答信號(hào)后,最后發(fā)送1Byte的數(shù)據(jù)到被尋址的存儲(chǔ)單元,從器
6、件再次應(yīng)答,并在主器件產(chǎn)生停止信號(hào)后開始內(nèi)部數(shù)據(jù)擦寫。,在“頁(yè)寫”操作模式下,頁(yè)寫操作的啟動(dòng)和字節(jié)寫一樣,不同在于傳送了一字節(jié)數(shù)據(jù)后并不產(chǎn)生停止信號(hào),主器件被允許發(fā)送15個(gè)額外的字節(jié)。每發(fā)送1字節(jié)數(shù)據(jù)后,CAT24WC16產(chǎn)生一個(gè)應(yīng)答位并將字節(jié)地址位加1,高位保持不變。 如果在發(fā)送停止信號(hào)之前主器件發(fā)送超過16個(gè)字節(jié),地址計(jì)數(shù)器將自動(dòng)翻轉(zhuǎn)先前寫入的數(shù)據(jù)被覆蓋。 在發(fā)送最后一個(gè)字節(jié)后,主器件發(fā)送一個(gè)停止信號(hào)通知數(shù)據(jù)傳輸結(jié)束,如圖所示。 應(yīng)答查詢:主器件發(fā)送一個(gè)起始信號(hào)和進(jìn)行寫操作的從器件地址來(lái)進(jìn)行應(yīng)答查詢。,讀操作,CAT24WC16支持三種讀操作方式: 1、當(dāng)前地址讀 2、隨機(jī)地址讀 3、連續(xù)
7、讀,在“當(dāng)前地址讀”操作方式時(shí),CAT24WC16地址計(jì)數(shù)器內(nèi)容為最后操作字節(jié)的地址上加1。 CAT24WC16接收到從器件地址信號(hào)后,首先發(fā)送一個(gè)應(yīng)答信號(hào),然后發(fā)送 一個(gè)8位字節(jié)數(shù)據(jù)。如圖所示:,“隨機(jī)地址讀”操作允許主器件對(duì)存儲(chǔ)器的任意字節(jié)進(jìn)行讀操作。 1、主器件首先通過發(fā)送起始信號(hào)、從器件地址并選擇寫操作。 2、等CAT24WC16應(yīng)答之后主器件重新發(fā)送起始信號(hào)和從器件地址。 3、CAT24WC16響應(yīng)并發(fā)送應(yīng)答信號(hào),然后輸出該地址處的一個(gè)字節(jié)數(shù)據(jù),最后主器件發(fā)送一個(gè)停止信號(hào)結(jié)束此次讀操作。過程如圖 :,“連續(xù)讀”操作既可以是當(dāng)前地址讀,也可以是隨機(jī)地址讀,工作時(shí)序上大體相同。 不同的是
8、:當(dāng)主器件每接收到一個(gè)數(shù)據(jù)字后,會(huì)回應(yīng)一個(gè)應(yīng)答信號(hào)給CAT24WC16,而不是停止信號(hào)。CAT24WC16在接收到應(yīng)答信號(hào)后會(huì)將地址加1。直到主器件發(fā)送停止位才結(jié)束此操作。 CAT24WC16輸出的數(shù)據(jù)按順序由地址N開始輸出。讀操作時(shí)地址計(jì)數(shù)器在CAT24WC16內(nèi)部增加。如果上次讀寫地址為芯片末地址(0 x7FF),則計(jì)數(shù)器將翻轉(zhuǎn)到第一個(gè)字節(jié)地址(0 x00)處。,1.3 實(shí)驗(yàn)?zāi)康呐c內(nèi)容,實(shí)驗(yàn)?zāi)康模和ㄟ^實(shí)驗(yàn),理解I2C數(shù)據(jù)傳輸?shù)脑?,掌握I2C接口電路連接和軟件編程。 實(shí)驗(yàn)內(nèi)容:事先往CAT24WC16的某個(gè)地址區(qū)域Addr寫入一個(gè)字符串“Hello”,然后從地址Addr處讀取5個(gè)字節(jié)內(nèi)容,
9、并在屏幕上顯示,檢查讀出來(lái)的字符串是否也為“Hello”。,1.4 實(shí)驗(yàn)原理分析,電路原理分析 EEPRROM(CAT24WC16)通過I2C接口與處理器進(jìn)行通信,電路中將EEPRROM 的地址線A0、A1、A2接地,SCL和SDA線上都接一個(gè)10K的上拉電阻。,軟件設(shè)計(jì) 為了方便編程與程序可讀性,首先定義幾個(gè)宏,這些宏分別對(duì)應(yīng)I2C控制寄存器I2CONSET的某些控制位。 #defineSI0 x08/I2C中斷標(biāo)志位 #defineSTO0 x10/I2C停止位 #defineSTA0 x20/I2C起始位 #defineAA0 x04/I2C應(yīng)答位 #defineI2EN 0 x40/I
10、2C使能位 根據(jù)實(shí)驗(yàn)內(nèi)容我們?cè)O(shè)計(jì)了3個(gè)底層驅(qū)動(dòng)函數(shù),這三個(gè)底層驅(qū)動(dòng)函數(shù)分別是: CAT24WC16_Init() 初始化設(shè)置函數(shù)。 CAT24WC16_Write() CAT24WC16的寫函數(shù)。 CAT24WC16_Read() CAT24WC16的讀函數(shù)。,CAT24WC16_Init(),/* *名稱: CAT24WC16_Init() *功能: I2C初始化。 *入口參數(shù): fi2c初始化I2C總線速率,最大值為40K *出口參數(shù):無(wú) */ void CAT24WC16_Init(uint32 F_I2C) PINSEL0 = (PINSEL0 /使能主I2C ,CAT24WC16_W
11、rite(),/* *名稱: CAT24WC16_Write() *功能: 主發(fā)送模式,向CAT24WC16寫入數(shù)據(jù)。 *入口參數(shù): sla 器件地址; slaveAddr 器件子地址 pWriteData 待發(fā)送數(shù)據(jù)緩存區(qū)指針 num 待寫入字符的個(gè)數(shù) *出口參數(shù): 1 代表發(fā)送成功 I2STAT 返回錯(cuò)誤狀態(tài)碼,代表發(fā)送不成功 */ uint8 CAT24WC16_Write(uint8 sla,uint8 slaveAddr,uint8 *pWriteData,uint8 num) uint8 i; /-通過軟件置位STA進(jìn)入主發(fā)送模式- I2CONCLR = AA | SI | STA
12、;/清零:SI位,起始標(biāo)志位,應(yīng)答標(biāo)志位 I2CONSET = I2EN | STA;/啟動(dòng)總線 while(I2CONSET /返回錯(cuò)誤狀態(tài)碼 ,/-發(fā)送器件地址W位- I2CONCLR = SI | STA;/清零:SI位,起標(biāo)志位標(biāo)志位 I2DAT = sla /返回錯(cuò)誤狀態(tài)碼 ,/-發(fā)送數(shù)據(jù)- for(i=num;i0;i-) I2CONCLR = SI;/SI位清零 I2DAT = *pWriteData+; while(I2CONSET ,CAT24WC16_Read(),/* *名稱: CAT24WC16_Read() *功能: 主接收模式,從器件CAT24WC16讀取數(shù)據(jù)。 *
13、入口參數(shù): slaveAddrCAT24WC16器件中具體的某一存儲(chǔ)單元; pWriteData數(shù)據(jù)接收緩沖區(qū)指針; num要讀取的數(shù)據(jù)個(gè)數(shù); *出口參數(shù): 1 代表發(fā)送成功 I2STAT 返回錯(cuò)誤狀態(tài)碼,代表發(fā)送不成功 */ uint8 CAT24WC16_Read(uint8 sla,uint8 slaveAddr, uint8 *pReadData, uint8 num) uint8 i ,state=0; /-定位CAT24WC16器件的存儲(chǔ)單元- state = CAT24WC16_Write(sla,slaveAddr,0,0); if(state != 1)return(stat
14、e); /-發(fā)送起始標(biāo)志位- I2CONCLR = SI | AA;/清零:起始、中斷、應(yīng)答標(biāo)志位 I2CONSET = STA;/啟動(dòng)總線 while(I2CONSET /等待SI置位,if(I2STAT !=0 x08)/查看狀態(tài)碼 I2CONSET = STO; /結(jié)束數(shù)據(jù)傳輸結(jié)束 return(I2STAT);/返回錯(cuò)誤狀態(tài)碼 /-發(fā)送器件地址R位- I2CONCLR = SI | STA;/SI位,STA位清零 I2DAT = sla | 0 x01; while(I2CONSET ,1.5 實(shí)驗(yàn)參考程序,uint8 EEPROM_TAB10=Hello!0; /* * 名稱:mai
15、n() * 功能:對(duì)EEPROM進(jìn)行讀寫控制 */ int main (void) uint8 REEPROM_buf5; uint8 flag; /-初始化- IO1DIR = IO1DIR | BEE;/設(shè)置蜂鳴器控制引腳 BEEOFF();/關(guān)閉蜂鳴器 CAT24WC16_Init(10000); /-寫數(shù)據(jù)- flag = CAT24WC16_Write(CAT24WC16,0 x00,EEPROM_TAB,5);,DelayMS(1);/等待內(nèi)部寫操作完成 if(flag != 1) BEEON(); DelayMS(1); BEEOFF(); /-讀數(shù)據(jù)- flag = CAT24
16、WC16_Read(CAT24WC16,0 x00,REEPROM_buf,5); if(flag != 1) BEEON(); DelayMS(1); BEEOFF(); return(0); ,全速運(yùn)行,我們將在變量觀察窗口中觀察到數(shù)組REEPROM_buf中的內(nèi)容也為“Hello”。 正確運(yùn)行結(jié)果如下圖:,三、SRAM存儲(chǔ)器件,SRAM概述 RAM分為SRAM和DRAM兩種類型。 DRAM的存取速度沒有SRAM快,但是DRAM更容易做成大容量的RAM。在存放信息比較多的嵌入式系統(tǒng)中,主存儲(chǔ)器采用 DRAM,而快速存儲(chǔ)器則采用 SRAM。 SRAM它不具有掉電保持?jǐn)?shù)據(jù)的特性,但其存取速度高
17、于Flash存儲(chǔ)器,且具有讀/寫的屬性。系統(tǒng)及用戶堆棧、運(yùn)行數(shù)據(jù)也都放在SRAM中。 SRAM架構(gòu)是處于同一列的基本存儲(chǔ)單元共用一條列地址線,而處于同一行的基本存儲(chǔ)單元共用一條行地址線,組成一個(gè)基本存儲(chǔ)單元構(gòu)成的矩陣架構(gòu)。在SRAM中,字節(jié)是最小的可尋址的單元。,1.1 IS61LV25616AL介紹,IS61LV25616AL是美國(guó)ISSI公司生產(chǎn)的高速SRAM器件。IS61LV25616AL的特性如下: 高速訪問時(shí)間1012ns CMOS低功耗工作 單個(gè)3.3V電源工作,TTL兼容接口電平 完全靜態(tài)操作無(wú)需時(shí)鐘和刷新 三態(tài)輸出 高低字節(jié)數(shù)據(jù)控制 可用的工業(yè)級(jí)溫度,IS61LV25616AL
18、內(nèi)部功能模塊與引腳描述,IS61LV25616AL內(nèi)部主要由4部分組成: 1、控制電路 2、數(shù)據(jù)電路 3、譯碼器電路 4、存儲(chǔ)器陣列,內(nèi)部功能框圖 IS61LV25616AL引腳圖,IS61LV25616AL芯片一共有44條引腳,其中18根地址線、16根數(shù)據(jù)線、5根控制線、4根電源線和1根閑置線。 IS61LV25616AL引腳描述見表所列。,IS61LV25616AL的讀寫和擦除操作,ARM是通過操作IS61LV25616AL的控制線而執(zhí)行相應(yīng)的操作。IS61LV25616AL可工作在輸出禁能、讀操作、寫操作3種工作模式下 。 IS61LV25616AL工作模式:,1.2實(shí)驗(yàn)?zāi)康呐c內(nèi)容,實(shí)驗(yàn)
19、目的:通過實(shí)驗(yàn),深刻理解RAM器件操作與電路連接。 實(shí)驗(yàn)內(nèi)容:完成一塊內(nèi)存區(qū)域的自檢(類似于臺(tái)式機(jī)的開機(jī)內(nèi)存自檢),具體做法是:向這塊內(nèi)存區(qū)域的每個(gè)單元寫入數(shù)據(jù)0 x55,然后從該單元讀出數(shù)據(jù),若讀出的數(shù)據(jù)也為0 x55,表明該單元沒有問題;若讀出的數(shù)據(jù)不為0 x55,表明該內(nèi)存單元已壞,蜂鳴器短叫一聲,并且將損壞的單元地址保存起來(lái)加以標(biāo)記。,1.3實(shí)驗(yàn)原理分析,當(dāng)IS61LV25616AL與LPC2220的外部接口Bank0連接時(shí),則IS61LV25616AL的芯片地址范圍為0 x8000 00000 x80FF FFFF。,當(dāng)IS61LV25616AL與LPC2220的外部接口Bank1連
20、接時(shí),則IS61LV25616AL的芯片地址范圍為0 x8100 00000 x81FF FFFF;,為了對(duì)IS61LV25616AL的子單元進(jìn)行單獨(dú)的字節(jié)操作,將LPC2220的nBLS1和nBLS0信號(hào)分別連接到IS61LV25616AL的UB.LB引腳。,RAM_Write()、為SRAM(IS61LV25616AL)寫數(shù)據(jù)函數(shù) RAM_Read()、為SRAM讀數(shù)據(jù)函數(shù)。,#define RAM_ADDR 0 x81000000 /* *名稱: RAM_Write(uint32 Addr,uint16 Data)。 *功能: 向RAM寫一個(gè)半字?jǐn)?shù)據(jù)。 *入口參數(shù): AddrRAM器件中
21、具體的某一存儲(chǔ)單元地址; Data待發(fā)送的數(shù)據(jù)(16位數(shù)據(jù)) */ void RAM_Write(uint32 Addr,uint16 Data) volatile uint16 *addr; addr = (volatile uint16 *)(RAM_ADDR|(Addr1); *addr = Data; ,驅(qū)動(dòng)子程序,/* *名稱: uint16 RAM_Read (uint32 Addr) *功能: 從RAM某個(gè)單元地址讀取一個(gè)半字的內(nèi)容。 *入口參數(shù): Addr內(nèi)存單元地址 *出口參數(shù): 返回一個(gè)半字?jǐn)?shù)據(jù) */ uint16 RAM_Read (uint32 Addr) volati
22、le uint16 *addr; addr = (volatile uint16 *)(RAM_ADDR|(Addr1); return(uint16)*addr); ,RAM的讀子程序,1.4 實(shí)驗(yàn)參考程序,/* * 名稱:main() * 功能:完成某塊內(nèi)存區(qū)域的自檢,損壞的單元地址保存在數(shù)組Remake中,并控制蜂鳴器發(fā)聲。 */ int main (void) uint8 i,j; uint32 Remake50; uint16 data; IO1DIR = IO1DIR | (124); / 設(shè)置P1.24為I/O輸出 IO1CLR = (124); / P1.24 = 0, 關(guān)閉蜂
23、鳴器,/-檢查起始地址為0 x81000100的100個(gè)內(nèi)存單元(字節(jié)單位)- for(i=0,j=0;i50;i+) RAM_Write(100+i,0 x5555); data = RAM_Read (100+i); if(data!=0 x5555) /判斷內(nèi)存單元地址是否損壞 Remakej=100+i; j+; IO1SET = (124);/ 打開蜂鳴器 DelayMS(10); IO1CLR = (124);/ 關(guān)閉蜂鳴器 DelayMS(10); return(0); ,運(yùn)行程序,for循環(huán)體中的程序每運(yùn)行一次,則對(duì)應(yīng)的地址上的內(nèi)容就會(huì)更改為0 x55。正確運(yùn)行結(jié)果如下圖所示:
24、,四、 Nor-Flash存儲(chǔ)器件,Nor-Flash存儲(chǔ)器是一種可以在系統(tǒng)(In-System)進(jìn)行電擦寫,掉電后信息不丟失的存儲(chǔ)器。 常用的Flash為8位或16位的數(shù)據(jù)寬度。 優(yōu)點(diǎn):它具有低功耗、大容量、擦寫速度快、可整片或分扇區(qū)在系統(tǒng)編程(燒寫)、擦除等特點(diǎn),在體積、抗震性方面都有很大的優(yōu)勢(shì)。 最大的特點(diǎn):是可在芯片內(nèi)執(zhí)行,即應(yīng)用程序可以直接在上面運(yùn)行,不必再把代碼讀到系統(tǒng)RAM中。而其他類型的Flash存儲(chǔ)器不具備這個(gè)特點(diǎn)。,1.1 NorFlash器件SST39VF1601,SST39VF1601是由SST公司推出的,是一個(gè)多功能Flash器件,存儲(chǔ)容量為2MB,16位數(shù)據(jù)寬度。S
25、ST39VF1601由SST提供了固定的擦除和編程時(shí)間,與擦除/編程周期數(shù)無(wú)關(guān)。 SST39VF1601的特性 存儲(chǔ)空間組織 1M16Bit。 讀寫操作采用單一電源2.73.6V。 低功耗、高可靠性。 具有地址和數(shù)據(jù)鎖存功能。 自動(dòng)寫時(shí)序內(nèi)部產(chǎn)生Vpp。 寫結(jié)束檢測(cè), SST39VF1601引腳描述,SST39VF1601一共有48個(gè)引腳,48個(gè)引腳中包括:20根地址線、16根數(shù)據(jù)線、3根控制線、3根電源線和其他不用連接的引腳。,SST39VF1601內(nèi)部主要由控制邏輯電路、緩沖區(qū)電路、譯碼器電路、存儲(chǔ)器電路四大部分組成。, SST39VF1601的讀寫和擦除操作,NOR Flash存儲(chǔ)采用的
26、是SRAM接口,其地址線和數(shù)據(jù)線是分開的。SST39VF1601芯片可工作在讀模式、寫模式、擦除模式 3種模式之下。,工作模式選擇, SST39VF1601的讀操作,SST39VF1601具備快速讀訪問能力。 SST39VF1601的讀操作是CE和OE信號(hào)線控制的。 讀操作的時(shí)序如圖所示 :, SST39VF1601的寫操作,SST39VF1601的寫操作主要是以一個(gè)半字接一個(gè)半字的方式進(jìn)行寫入的。寫操作分3步進(jìn)行: 第1步,送出“軟件數(shù)據(jù)保護(hù)”的3字節(jié),SW0,SW1,SW2。 第一字節(jié)SW0:地址線載入地址0 x5555,數(shù)據(jù)線載入0 xXXAA; 第二字節(jié)SW1:地址線載入地址0 x2A
27、AA,數(shù)據(jù)線載入0 xXX55; 第三字節(jié)SW2:地址線載入地址0 x5555,數(shù)據(jù)線載入0 xXXA0; 第2步,送出地址和數(shù)據(jù),地址在CE或WE的下降沿(無(wú)論哪一個(gè)后產(chǎn)生下降沿)鎖存。數(shù)據(jù)在CE或WE的上升沿(無(wú)論哪一個(gè)先產(chǎn)生下降沿)鎖存。,第3步,內(nèi)部寫入處理階段。在內(nèi)部寫入階段,任何指令都將被忽略。WE控制的字寫入時(shí)序如圖所示:, 扇區(qū)/塊/整片擦除操作,SST39VF1601扇區(qū)是統(tǒng)一的2 K半字(16位)大小,塊是統(tǒng)一的 32 K半字大小。SST39VF1601存儲(chǔ)容量為2M字節(jié)大小。SST39VF1601支持以下操作: 1、扇區(qū)擦除操作 2、塊擦除操作 3、整片擦除操作 扇區(qū)或塊
28、擦除操作允許SST39VF1601以一個(gè)扇區(qū)接一個(gè)扇區(qū),或一個(gè)塊接一個(gè)塊地進(jìn)行擦除。,這三種擦除操作都是通過6字節(jié)的指令序列進(jìn)行的。其中前面5字節(jié)的指令序列是相同的,唯一不同的在第6個(gè)字節(jié)指令中。3種擦除操作的流程圖如左圖所示:,扇區(qū)擦除:A11-A19 塊擦除:A15-A19,3中擦除操作時(shí)序如圖:,扇區(qū)擦除操作時(shí)序,塊擦除操作時(shí)序,整片擦除操作時(shí)序, 內(nèi)部操作查詢,芯片進(jìn)入內(nèi)部編程或擦除操作狀態(tài)后,允許處理器查詢DQ6位來(lái)判別芯片內(nèi)部操作是否完成。 當(dāng)內(nèi)部操作進(jìn)行中,所得的DQ6在1和 0之間跳變 當(dāng)內(nèi)部操作結(jié)束后,DQ6位的值不再變化。,1.2 實(shí)驗(yàn)?zāi)康呐c內(nèi)容,實(shí)驗(yàn)?zāi)康模和ㄟ^實(shí)驗(yàn),理解N
29、or-Flash操作時(shí)序和電路連接,深刻掌握Flash燒寫算法。 實(shí)驗(yàn)內(nèi)容1:擦除SST39VF1601中某段未用的扇區(qū),往這個(gè)扇區(qū)填充0 x55,然后通過AXD調(diào)試工具觀察該段扇區(qū)的內(nèi)容。 實(shí)驗(yàn)內(nèi)容2:擦除SST39VF1601中某段未用的扇區(qū),往這個(gè)扇區(qū)拷入某個(gè)程序的二進(jìn)制代碼,比如一段蜂鳴的子程序代碼,然后讓程序指針跳到該扇區(qū)執(zhí)行。,1.3 電路原理分析,SST39VF1601與LPC2220的連接如圖所示。LPC2220使用外部的存儲(chǔ)器接口Bank0上的存儲(chǔ)器引導(dǎo)程序運(yùn)行。,編寫2個(gè)子程序: SST_SErase()和SST_Write(),分別完成SST39VF1601扇區(qū)擦除功能和
30、字編程功能。,扇區(qū)刪除函數(shù),#define FLASH_ADDR 0 x80000000 #define GetAddr(addr)(volatile uint16 *)(FLASH_ADDR|(addr1) /* *名稱: SST_SErase(uint32 SA) *功能: SST39VF1601扇區(qū)擦除。 *入口參數(shù): SA扇區(qū)號(hào)(1512) *出口參數(shù): 返回1表示成功,返回0表示失敗 */,1.4 軟件設(shè)計(jì),uint8 SST_SErase(uint32 SA) volatile uint16 *ip; uint16 data1,data2; if(SA512) | (SA1)/檢查
31、扇區(qū)號(hào)是否在1512范圍內(nèi) return(0); SA = 4096 * (SA-1) ;/根據(jù)扇區(qū)號(hào),計(jì)算扇區(qū)地址 /*寫入六個(gè)字節(jié)的扇區(qū)擦除指令序列*/ ip = GetAddr(0 x5555); *ip = 0 xaaaa;/ 第一個(gè)寫周期,地址0 x5555,數(shù)據(jù)0 xAA ip = GetAddr(0 x2aaa); *ip = 0 x5555;/ 第二個(gè)寫周期,地址0 x2aaa,數(shù)據(jù)0 x55 ip = GetAddr(0 x5555); *ip = 0 x8080;/ 第三個(gè)寫周期,地址0 x5555,數(shù)據(jù)0 x80 ip = GetAddr(0 x5555); *ip =
32、0 xaaaa;/ 第四個(gè)寫周期,地址0 x5555,數(shù)據(jù)0 xAA ip = GetAddr(0 x2aaa);,*ip = 0 x5555;/ 第五個(gè)寫周期,地址0 x2aaa,數(shù)據(jù)0 x55 ip = (volatile uint16 *)(FLASH_ADDR|(SA); *ip = 0 x30;/ 第六個(gè)寫周期,扇區(qū)地址SA,數(shù)據(jù)0 x30,執(zhí)行扇區(qū)擦除操作 /*等待操作完成*/ while(1)/若編程操作沒有完成,每次讀操作DQ6會(huì)跳變 data1 = *ip; data2 = *ip; if(data1=data2) if( data1 != 0 xffff)return(0)
33、; elsereturn(1); ,/* *名稱: SST39VF1601_WriteByte () *功能: SST39VF1601的半字寫入。 *入口參數(shù): Addr寫入地址 WriteData寫入的數(shù)據(jù) *出口參數(shù):0操作不成功 1操作成功 */ uint8 SST_Write(uint32 Addr,uint16 WriteData) volatile uint16 *ip; volatile uint16 *SADDR; uint16 data1,data2; SADDR = (volatile uint16 *)(FLASH_ADDR|(Addr,字編程函數(shù),ip = GetAdd
34、r(0 x5555);/ 轉(zhuǎn)換地址0 x5555 ip0 = 0 xaaaa;/ 第一個(gè)寫周期,地址0 x5555,數(shù)據(jù)0 xAA ip = GetAddr(0 x2aaa); ip0 = 0 x5555;/ 第二個(gè)寫周期,地址0 x2aaa,數(shù)據(jù)0 x55 ip = GetAddr(0 x5555); ip0 = 0 xa0a0;/ 第三個(gè)寫周期,地址0 x5555,數(shù)據(jù)0 xA0 *SADDR = WriteData;/ 第四個(gè)寫周期,地址Addr,數(shù)據(jù)Writ /*等待操作完成*/ while(1)/若編程操作沒有完成,每次讀操作DQ6會(huì)跳變 data1 = *SADDR; data2
35、= *SADDR; if(data1=data2) if(data1!=WriteData)return(0); elsereturn(1); ,實(shí)驗(yàn)1參考程序,#define Ssize4096/一個(gè)扇區(qū)4096個(gè)字節(jié)大小 /* * 名稱:main() * 功能:往NOR-FLASH最后一個(gè)扇區(qū)填充數(shù)據(jù)0 x55; */ int main (void) uint32 i,Addr; SST_SErase(512);/擦除最后一個(gè)扇區(qū) for(i=0; iSszie; i=i+2)/往最后一個(gè)扇區(qū)填充0 x55 Addr = Ssize * 511 + i; SST_Write(Addr,0
36、x5555); return(0); ,實(shí)驗(yàn)2參考程序,首先用匯編函數(shù)定義了一個(gè)程序跳轉(zhuǎn)函數(shù)uint32 JUMP(uint32 addr),參數(shù)addr為給定的程序地址。,EXPORT JUMP AREA JUMP,CODE,READONLY ENTRY JUMP MOV PC, R0 END,然后用C語(yǔ)言定義了一個(gè)BEE_Function()函數(shù),#define BEE (124) / BEE連接P1.24 /* * 名稱:BEE_Function() * 功能:控制蜂鳴器叫 */ void BEE_Function(void) PINSEL2 = PINSEL2 ,#define Ssi
37、ze4096/一個(gè)扇區(qū)4096個(gè)字節(jié)大小 extern uint32 JUMP(uint32 addr);/聲明跳轉(zhuǎn)函數(shù) /* * 名稱:main() * 功能:首先擦除第6號(hào)扇區(qū),然后找到BEE_Function函數(shù)地址,將BEE_Function函數(shù)復(fù)制到第6號(hào)扇區(qū),最后將程序跳轉(zhuǎn)到第6號(hào)扇區(qū)起始處運(yùn)行。 */ int main (void) uint16 i,Data1; uint32 Addr,Data,*P; SST_SErase(6);/擦除6號(hào)扇區(qū) P = (uint32 *)BEE_Function;/指針指向BEE_Function函數(shù) Addr = 0 x80000002
38、+ (Ssize * 5);/地址Addr指向第6個(gè)扇區(qū)的開始位置,主函數(shù)main。,for(i=0;i16); SST_Write(Addr+2,Data1); P+; Addr+=4; Addr = 0 x80000002 + (Ssize * 5); JUMP(Addr);/程序跳轉(zhuǎn)到第6號(hào)扇區(qū)運(yùn)行 return(0); ,五、Nand-Flash存儲(chǔ)器件,NOR和NAND是目前市場(chǎng)上兩種主要的非易失性閃存技術(shù)。Nand-Flash存儲(chǔ)器結(jié)構(gòu)則能提供極高的單元密度,可以達(dá)到很大的存儲(chǔ)容量,并且寫入和擦除的速度也很快。但Nand-Flash存儲(chǔ)器需要特殊的接口來(lái)操作。二者以其各自的特點(diǎn),在
39、不同場(chǎng)合中發(fā)揮著各自的作用。 Nand-Flash存儲(chǔ)器是Flash存儲(chǔ)器的一種技術(shù)規(guī)格,其內(nèi)部采用非線性宏單元模式,現(xiàn)在得到了越來(lái)越廣泛的應(yīng)用。 由于 Nand-Flash(非線性 Flash)存儲(chǔ)器內(nèi)部結(jié)構(gòu)不同于Nor-Flash(線性Flash)存儲(chǔ)器。一般來(lái)講,讀寫的過程要靠軟件編程來(lái)完成。,1.1 K9F6408U0C介紹,K9F6408U0C是SAMSUNG公司生產(chǎn)的NAND型Flash存儲(chǔ)器,存儲(chǔ)容量為66Mb。 片內(nèi)寫控制邏輯自動(dòng)實(shí)現(xiàn)所有的編程和擦除功能,包括脈沖的周期、內(nèi)部校驗(yàn)和數(shù)據(jù)冗余。 K9F6408U0C的其他特性 存儲(chǔ)空間組織 (8M+256K)byte 頁(yè)寄存器(5
40、12+16)byte 支持頁(yè)編程;支持塊擦除。 命令/地址/數(shù)據(jù)復(fù)用I/O口。 可靠性高:耐久力可經(jīng)受100K次擦寫,數(shù)據(jù)保存10年。 命令寄存器操作。 工作電壓:2.73.6V。 采用唯一ID號(hào)保護(hù)版權(quán)。 48腳封裝TSOP。,K9F6408U0C引腳描述,ALE 高 地址信息在WE的上升沿送入地址寄存器 CLE高 操作指令在WE的上升沿送入指令寄存器 ALE和CLE均為低 數(shù)據(jù)在WE的上升沿送入頁(yè)寄存器 CE和WE均為低 數(shù)據(jù)輸入, K9F6408U0C內(nèi)部結(jié)構(gòu),K9F6408U0C由1024塊組成,每塊由16頁(yè)組成,每頁(yè)中有51216個(gè)字節(jié)。K9F6408U0C的有效總?cè)萘繛?6K頁(yè),合
41、計(jì)8M字節(jié)。這種結(jié)構(gòu),滿足文件系統(tǒng)中劃分簇和扇區(qū)的結(jié)構(gòu)要求 。,K9F6408U0C有效地址空間為8M字節(jié),那么片內(nèi)必須提供23根地址線進(jìn)行選址,其中A9A22稱為行地址,送入X譯碼器;A0A8稱為列地址,送入Y譯碼器中。 K9F6408U0C芯片的內(nèi)部結(jié)構(gòu)框圖如圖所示 :, K9F6408U0C的內(nèi)部指令,K9F6408U0C具備自己的操作指令。有一些指令只需要一個(gè)總線周期完成;另外一些指令,則需要2個(gè)周期。 K9F6408U0C具備的指令和功能如右圖:, K9F6408U0C的內(nèi)部操作-讀操作,2種讀的方式: 頁(yè)讀方式1: 默認(rèn)的頁(yè)讀方式,用于讀取頁(yè)寄存器的前半頁(yè)、后半頁(yè)或整個(gè)頁(yè)(0511
42、)。 頁(yè)讀方式2: 用來(lái)讀取備用區(qū)域(512527),通過將00h/01h指令寫入指令寄存器,接著寫入3字節(jié)地址來(lái)啟動(dòng)。,寫入指令和地址后,處理器可以通過對(duì)信號(hào)線R/B的分析來(lái)判斷該操作是否完成。,要讀取的數(shù)據(jù)被送入了K9F6408U0C內(nèi)部的頁(yè)寄存器。外部控制器可以RE脈沖信號(hào)的控制下,從I/O口依次讀出數(shù)據(jù)。,連續(xù)頁(yè)讀操作中,輸出的數(shù)據(jù)是從指定的列地址開始,直到該頁(yè)的最后一個(gè)列地址的數(shù)據(jù)為止。, 頁(yè)讀方式1的操作時(shí)序,頁(yè)讀方式2操作通過將50h指令寫入指令寄存器,同樣寫入3字節(jié)地址來(lái)啟動(dòng)。 頁(yè)讀方式2的其他時(shí)序與頁(yè)讀方式1相同。, 頁(yè)讀方式2的操作時(shí)序,K9F6408U0C的寫操作同樣以頁(yè)
43、為單位。 頁(yè)寫入周期總共3個(gè)步驟: 1、寫入串行數(shù)據(jù)輸入指令 2、然后寫入 3個(gè)字節(jié)的地址信息 3、最后串行寫入數(shù)據(jù), 寫操作,內(nèi)部寫入操作開始后,器件自動(dòng)進(jìn)入“讀狀態(tài)寄存器”模式。此時(shí),系統(tǒng)控制器可以讀取狀態(tài)寄存器,或檢測(cè)R/B的輸出來(lái)判斷內(nèi)部寫入是否結(jié)束。,寫操作時(shí)序圖,擦除操作是以塊為單位進(jìn)行的。啟動(dòng)擦除,隨后輸入塊地址,接著初始化內(nèi)部擦除操作。器件檢測(cè)到擦除確認(rèn)命令后,在WE的上升沿啟動(dòng)內(nèi)部寫控制器開始執(zhí)行擦除和擦除校驗(yàn)。, 擦除操作,K9F6408U0C中包含一個(gè)狀態(tài)寄存器。 I/O口狀態(tài)定義見表 所列 :, 讀狀態(tài)寄存器,K9F6408U0C器件具有一個(gè)產(chǎn)品鑒定識(shí)別碼(ID),讀出
44、ID,起到識(shí)別器件的作用。讀ID的步驟是: 1、寫入90h指令 2、然寫入一個(gè)00h, 讀器件ID號(hào),器件提供一個(gè)復(fù)位指令,通過向指令寄存器寫入 FFh來(lái)完成對(duì)器件的復(fù)位。當(dāng)器件處于忙狀態(tài)時(shí),發(fā)送復(fù)位指令可以使器件中止當(dāng)前的操作。 復(fù)位指令寫入后,K9F6408U0C進(jìn)行內(nèi)部復(fù)位操作,此時(shí)引腳R/B將變低,持續(xù)一段時(shí)間直到復(fù)位操作完成。, 復(fù)位操作,1.2 實(shí)驗(yàn)內(nèi)容,擦除K9F6408U0C中的某塊,往該塊的某頁(yè)寫入一段字符串,然后讀取該頁(yè)的內(nèi)容,通過串口調(diào)試工具顯示讀取的結(jié)果。,1.3 電路原理圖,對(duì)該存儲(chǔ)器進(jìn)行任何操作都是由CLE,ALE兩條信號(hào)線的邏輯電平?jīng)Q定的。根據(jù)寫指令、寫地址和讀寫
45、數(shù)據(jù)時(shí)CLE,ALE信號(hào)控制線的時(shí)序要求。 以下宏定義完成對(duì)信號(hào)線的控制,同時(shí)還定義了讀取R/B線狀態(tài)的宏。,#defineK9f_CLE (123)/與P1.23連接 #defineK9f_ALE (111)/與P0.11連接 #define K9f_Busy (112)/與P0.12連接 #defineK9f_IO(*(volatile unsigned short *) 0 x82000000) #define Read_Busy() IO0PIN IO0CLR= K9f_ALE /ALE為低, CLE為低,1.4 軟件設(shè)計(jì),在以上宏定義的基礎(chǔ)上,根據(jù)K9F6408U0C的功能,我們完成
46、幾個(gè)功能子程序,分別用來(lái)芯片復(fù)位、讀器件ID號(hào)、擦除塊、頁(yè)寫入、頁(yè)讀等操作。,軟件復(fù)位子程序,/* *名稱: uint16 K9f_Reset(void) *功能: 復(fù)位K9F6408U0C芯片。 *入口參數(shù):無(wú) *出口參數(shù):無(wú) */ void K9f_Reset(void) uint32 i; IO0CLR = K9f_CE;/芯片使能 COM_State();,K9f_IO = 0 xff;/發(fā)送復(fù)位指令 DAT_State(); for(i=0;i20;i+); while(Read_Busy()=0) ;/等待芯片復(fù)位操作完成 IO0SET = K9f_CE; ,讀器件的ID號(hào)子程序,
47、/* *名稱: uint16 K9f_ReadID(void) *功能: 讀器件的ID號(hào)。 *入口參數(shù):無(wú) *出口參數(shù):返回16位的器件ID號(hào) */ uint16 K9f_ReadID(void) uint16 ID; uint8 i,RData;,while(Read_Busy()!=0); IO0CLR = K9f_CE; COM_State(); K9f_IO = 0 x90; ADR_State(); K9f_IO = 0 x00; DAT_State(); for(i=0;i20;i+); while(Read_Busy()=0); ID = K9f_IO; ID = ID8; RD
48、ata = K9f_IO; ID = ID+RData; IO0SET = K9f_CE; return(ID); ,/* *名稱: uint8 K9f_EraseBlock (uint16 block) *功能: 擦除K9F6408U0C的某個(gè)存儲(chǔ)塊,K9F6408U0C一共包括1024個(gè)塊。 *入口參數(shù): block 塊號(hào) (11024) *出口參數(shù): 1 代表發(fā)送成功 0 代表發(fā)送不成功 */ uint8 K9f_EraseBlock (uint16 block) uint8 i,RData; while(Read_Busy()!=0); block = (block-1) 4; IO0
49、CLR = K9f_CE; COM_State(); K9f_CMD = 0 x60; ADR_State();,塊擦除子程序,K9f_ADR = block ,/* *名稱: uint8 K9f_WritePage (uint16 Page,uint8 *Buffer) *功能: 往擦除K9F6408U0C的某個(gè)頁(yè)寫入512個(gè)字節(jié)數(shù)據(jù)。 *入口參數(shù): Page 頁(yè)號(hào)(16K頁(yè):116K) Buffer 要寫入的數(shù)據(jù)緩沖區(qū)指針 *出口參數(shù): 1 代表發(fā)送成功 0 代表發(fā)送不成功 */ uint8 K9f_WritePage (uint8 Addr,uint16 Page,uint8 *Buff
50、er, uint16 Length) uint8 i,RData; while(Read_Busy()!=0); IO0CLR = K9f_CE; COM_State(); K9f_CMD = 0 x80; ADR_State();,頁(yè)寫入子程序,K9f_ADR = 0 x00;/送列地址A0A7 Page = Page 1; K9f_ADR = Page ,/* *名稱: void K9f_ReadPage (uint16 Page,uint8 *Buffer) *功能: 讀取K9F6408U0C某頁(yè)的數(shù)據(jù),一次讀取一頁(yè)。 *入口參數(shù): Page 頁(yè)號(hào) Buffer 接收讀取數(shù)據(jù)的緩沖區(qū)指針 *出口參數(shù): 無(wú) */ void K9f_ReadPage (uint16 Page,uint8 *Buffer) ui
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年福建省泉州信息工程學(xué)院招聘參考題庫(kù)附答案
- 2025廣東茂名市高州市公益性崗位招聘1人備考題庫(kù)(第五批1人)附答案
- 2025年宿州市第一人民醫(yī)院社會(huì)化用人使用周轉(zhuǎn)池編制89名筆試備考題庫(kù)附答案
- AI賦能個(gè)性化學(xué)習(xí):實(shí)踐應(yīng)用與案例解析
- 2026四川天府銀行攀枝花分行春季社會(huì)招聘筆試備考題庫(kù)及答案解析
- 2025秋人教版道德與法治八年級(jí)上冊(cè)第三單元單元思考與行動(dòng)同步練習(xí)
- 2026福建泉州市安溪縣司法局招聘4人筆試備考題庫(kù)及答案解析
- 北京市海淀區(qū)學(xué)府幼兒園招聘筆試備考試題及答案解析
- 2026湖南長(zhǎng)沙市中醫(yī)康復(fù)醫(yī)院編外合同制人員招聘2人筆試備考題庫(kù)及答案解析
- 2026湖南長(zhǎng)沙市開福區(qū)清水塘實(shí)驗(yàn)學(xué)校春季公開招聘教師6人筆試參考題庫(kù)及答案解析
- 2025年實(shí)驗(yàn)室安全事故案例
- 貝林妥單抗護(hù)理要點(diǎn)
- 衛(wèi)生院關(guān)于成立消除艾滋病、梅毒、乙肝母嬰傳播領(lǐng)導(dǎo)小組及職責(zé)分工的通知
- 鐵路更換夾板課件
- 小學(xué)語(yǔ)文教學(xué)能力提升策略
- 卡西歐手表WVA-M600(5161)中文使用說明書
- 浙江中醫(yī)藥大學(xué)《高等數(shù)學(xué)Ⅱ》2025-2026學(xué)年期末試卷(A卷)
- 麻醉規(guī)培結(jié)業(yè)匯報(bào)
- 物流市場(chǎng)開發(fā)管理制度
- DBJ04-T495-2025 《發(fā)震斷裂區(qū)域建筑抗震設(shè)計(jì)標(biāo)準(zhǔn)》
- 2025年貴州省貴陽(yáng)市云巖區(qū)中考二模語(yǔ)文試題(含答案)
評(píng)論
0/150
提交評(píng)論