當(dāng)前位置:首頁 > 物聯(lián)網(wǎng) > 《物聯(lián)網(wǎng)技術(shù)》雜志
[導(dǎo)讀]摘要:闡述了NANDFLASH的工作原理和訪問方式,提出了一種基于51內(nèi)核單片機(jī)存儲(chǔ)、讀取NANDFLASH的實(shí)現(xiàn)方法,給出了K9F2G08UXA與單片機(jī)的接口電路,同時(shí)給出了對K9F2GO8UXA芯片進(jìn)行讀操作、頁編程和塊擦除等軟件操作的響應(yīng)例程。

引言

閃速存儲(chǔ)器(FlashMemory)是一種不揮發(fā)性Non-Volatile內(nèi)存,在沒有電流供應(yīng)的條件下也能夠長久地保持?jǐn)?shù)據(jù),其存儲(chǔ)特性相當(dāng)于硬盤,同時(shí)其還具有低功耗、密度高、體積小等優(yōu)點(diǎn),這些特性正使得閃存成為各類便攜型數(shù)字設(shè)備的存儲(chǔ)介質(zhì)的基礎(chǔ),而超大容量的閃存芯片更是受到了廣大開發(fā)者的青睞。NOR和NAND是現(xiàn)在市場上兩種主要的非易失閃存技術(shù),NORFLASH帶有SRAM接口,有足夠的地址引腳來尋址,可以很容易地存取其內(nèi)部的每一個(gè)字節(jié);NAND器件使用復(fù)雜的I/O口來串行地存取數(shù)據(jù),各個(gè)產(chǎn)品或廠商的方法可能各不相同,8個(gè)引腳用來傳送控制、地址和數(shù)據(jù)信息。51內(nèi)核的單片機(jī)因受尋址能力的限制,在進(jìn)行大容量存儲(chǔ)應(yīng)用時(shí),都會(huì)選擇NANDFLASH來作為存儲(chǔ)器件。

1K9F2G08UXAFlashMemory簡介

K9F2G08UXA是韓國三星公司生產(chǎn)的256MX8b,并帶有8MX8位后備區(qū)域的NAND(“與非”)閃速存儲(chǔ)器。NANDFLASH結(jié)構(gòu)具有快速重寫、高存儲(chǔ)容量、回寫速度快以及芯片面積小等特點(diǎn),因此是高數(shù)據(jù)存儲(chǔ)密度的理想解決方案。NANDFLASH型的單元排列是串行的,存儲(chǔ)單元被分成頁,由頁組成塊。根據(jù)不同容量,塊和頁的大小有所不同,而組成塊的頁的數(shù)量也會(huì)不同。應(yīng)用NAND的困難在于FLASH的管理和需要特殊的系統(tǒng)接口。K9F2G08UXA就是具有這些特點(diǎn)的FLASHMemory,它的典型編程時(shí)間為200us/頁(2048B/頁),擦除時(shí)間為1.5ms/塊(64頁/塊=128KB/塊)。頁順序讀取時(shí)間最小為25ns,隨機(jī)讀取時(shí)間最小為25us;其地址復(fù)用8個(gè)I/O引腳,作為地址輸入、輸出口和命令輸入;片內(nèi)的寫控制器自動(dòng)完成編程/擦除功能,包括所需的脈沖循環(huán)重復(fù)、內(nèi)部校驗(yàn)及數(shù)據(jù)的加注。

2硬件原理

2.1K9F2G08UXA的結(jié)構(gòu)特點(diǎn)

K9F2G08UXA是由131072行X2112歹U組成的2112Mb存儲(chǔ)器,其中64Mb位的后備區(qū)域的列地址范圍是2048?2111。2112B的數(shù)據(jù)寄存器連接著存儲(chǔ)器單元陣列,在頁讀和頁編程期間提供了I/O緩沖和內(nèi)存之間的傳送。存儲(chǔ)器陣列由以串行方式連接成NAND結(jié)構(gòu)的32個(gè)單元構(gòu)成,每塊中有1081344個(gè)這樣的結(jié)構(gòu)。這些單元均駐留在不同的頁上。塊是由2個(gè)NAND結(jié)構(gòu)形成的64頁組成,共有2048個(gè)分立的可擦寫的128KB塊。

閃存芯片的主要命令操作有讀、編程和擦除,其中讀、編程操作以頁為基礎(chǔ),擦除必須以塊為單位進(jìn)行,且不允許逐位擦除。FLASH操作大都需要2個(gè)總線周期,如塊擦除需要2個(gè)總線周期,一個(gè)周期是擦除建立,另一個(gè)周期是在塊地址裝入后執(zhí)行擦除命令。256MB的物理空間需要29位地址線,因此需要5個(gè)周期的字節(jié)尋址,其順序是:低位列地址、高位列地址、低位行地址、中位行地址、高位行地址。頁讀和頁編程在命令輸入后都跟著同樣的5個(gè)地址周期。由于擦除是以塊(1塊有64頁)為單位的,所以在塊擦除操作中僅需要3個(gè)行地址周期。以上的操作都是通過寫特殊的命令到命令寄存器中。特殊命令集定義如表l所列。

K9F2G08UXA芯片內(nèi)有1個(gè)狀態(tài)寄存器,命令70h就是讀這個(gè)狀態(tài)寄存器的。通過它可以查詢編程或擦除操作是否完成,以及查看這些操作完成的正確與否。在寫70h命令到命令寄存器中后,且在/CE或/RE的下降沿時(shí),狀態(tài)寄存器的內(nèi)容就可以在1個(gè)讀周期內(nèi)輸出到I/O引腳上。讀狀態(tài)寄存器的定義如表2所列。

51內(nèi)核單片機(jī)管理NAND FLASH的方法

2.2K9F2G08UXA各引腳功能

K9F2G08UXA的各引腳功能如下:

I/O0~I/O7:用于輸入命令、地址和數(shù)據(jù)。在讀操作時(shí)輸出數(shù)據(jù),當(dāng)未選中芯片或輸出禁止時(shí)浮空為高阻。

CLE:地址鎖存使能。為高時(shí),命令在/WE的上升沿通過I/O口鎖存在命令寄存器中。

ALE:地址鎖存使能。當(dāng)為高時(shí),地址在/WE的上升沿被鎖存在地址寄存器中。

/CE:芯片使能。在讀操作期間,/CE為高時(shí)芯片返回standby模式。但是當(dāng)在編程或擦除時(shí)處于忙狀態(tài)時(shí),貝壞理睬/CE,芯片也不返回standby模式。

/RE:讀使能,低電平有效。有效時(shí)把數(shù)據(jù)驅(qū)動(dòng)到I/O總線上,在/RE的下降沿后tREA處數(shù)據(jù)有效,并使內(nèi)部列地址計(jì)數(shù)器加1。

/WE:寫使能,低電平有效。命令、地址和數(shù)據(jù)均是在/WE上升沿鎖存。

/WP:寫保護(hù),低電平有效。在上電時(shí),它提供寫擦除保護(hù),有效時(shí),內(nèi)部高電壓產(chǎn)生器被復(fù)位。

R/B:準(zhǔn)備好/忙輸出,反映芯片的操作狀態(tài)。為低時(shí),表示正在進(jìn)行編程、擦除或隨機(jī)讀操作,完成后返回高狀態(tài)。若是開漏輸出,當(dāng)未選中芯片或輸出禁止時(shí)不浮空為高阻態(tài)。2.3K9F2G08UXA與單片機(jī)的接口電路

由于K9F2GO8UXA的I/O引腳為8位,因此可以很方便地選取51系列8位單片機(jī)。因51系列8位單片機(jī)的工作電壓為5V,圖1中用VCC表示,K9F2GO8UXA閃存芯片的工作電壓為3.3V,所以單片機(jī)與閃存間不能直接相連,中間必須增加電平轉(zhuǎn)換芯片進(jìn)行隔離,如圖1中74LVC4245。將K9F2GO8UXA的8位I/O引腳通過電平轉(zhuǎn)換芯片與單片機(jī)的數(shù)據(jù)總線端口D0~D8位相連。K9F2GO8UXA的讀使能(/RE)、寫使能(/WE)則分別通過電平轉(zhuǎn)換芯片與單片機(jī)的P3.6(/RD)和P3.5(/WE)相連,其他控制信號如CLE、/CE、R/B等則通過電平轉(zhuǎn)換芯片與單片機(jī)的P1口相連,并通過軟件編程來完成對這些信號的控制。閃速存儲(chǔ)芯片與單片機(jī)的連接電路如圖1所示。

51內(nèi)核單片機(jī)管理NAND FLASH的方法

3軟件編程

3.1讀操作

閃速存儲(chǔ)器上電后就處于讀存儲(chǔ)單元狀態(tài),K9F2GO8UXA芯片默認(rèn)為讀模式,也可以直接寫00H到命令寄存器中完成該存儲(chǔ)單元操作。讀操作有3種類型:隨機(jī)讀、串行頁讀和連續(xù)行讀。當(dāng)改變頁地址時(shí),使能隨機(jī)讀模式。被選中的頁在10us內(nèi)就傳送到數(shù)據(jù)寄存器中,系統(tǒng)控制器可以通過R/B引腳監(jiān)測數(shù)據(jù)傳送的完成與否。一旦頁中的數(shù)據(jù)被裝入到寄存器中,數(shù)據(jù)就可以在60ns的周期內(nèi),在連續(xù)的/RE脈沖讀出。讀操作流程如圖2所示。

51內(nèi)核單片機(jī)管理NAND FLASH的方法

3.2頁編程

編程操作以頁為單位,但它允許在1個(gè)頁編程周期內(nèi)進(jìn)行1個(gè)字節(jié)或連續(xù)的直到2112字節(jié)的多分頁編程。在沒有阻礙擦除操作的同一頁內(nèi),連續(xù)分頁編程操作的個(gè)數(shù)主陣列不能超過2個(gè),后備陣列不能超過3個(gè)。數(shù)據(jù)裝入階段開始于數(shù)據(jù)輸入命令(80h),接著是4個(gè)周期的地址輸入和數(shù)據(jù)裝入,非編程字節(jié)不需要裝入。一旦編程操作開始,且/RE和/WE為低時(shí),就可以讀狀態(tài)寄存器中的狀態(tài)位(I/O6)。系統(tǒng)控制器也可以通過R/B引腳輸出來監(jiān)測編程操作周期的完成與否。在編程過程中只有讀狀態(tài)命令和復(fù)位命令有效。頁編程操作完成后,可以查看狀態(tài)位(I/O0),為“0”表明編程成功;為“1”則編程出錯(cuò)。頁編程流程如圖3所示。

3.3塊擦除

任何FLASH器件的寫入操作都只能在空的或已擦除的單元內(nèi)進(jìn)行。所以大多數(shù)情況下,當(dāng)新數(shù)據(jù)寫入一個(gè)扇區(qū)時(shí),FLASH都必須進(jìn)行擦除。擦除操作以塊為單位,流程如下:首先啟動(dòng)塊擦除建立命令(60h);接著裝入需要3個(gè)周期完成的塊地址,其中只有A18-A28地址有效,而忽略A0~A17地址;最后是擦除確認(rèn)命令(D0h),至此完成內(nèi)部擦除過程。在輸入擦除確認(rèn)命令后的/WE的上升沿,內(nèi)部寫控制器進(jìn)行擦除操作和擦除校驗(yàn)。當(dāng)擦除操作完成后可以校驗(yàn)寫狀態(tài)位(1/00)。

51內(nèi)核單片機(jī)管理NAND FLASH的方法

3.4程序?qū)嵗?

下面的程序是用KeilC51編寫的讀操作程序。其他操作如塊擦除、頁編程均可參照文中介紹的流程圖進(jìn)行編程。但應(yīng)注意根據(jù)閃速存儲(chǔ)的時(shí)間參數(shù)來調(diào)整這些操作的時(shí)間。

#include

#include

#include

#include

#include

#include

#include

#defineFLASH_BLOCK_ERASE_1ST0x60

#defineFLASH_BLOCK_ERASE_2ND0xD0

unsignedcharbdataoutregister_2;

sbitflash_ale

sbitflash_wp

voidflash_read_commond(void);//FLASH進(jìn)入讀模

式(輸入指令)

voidflash_read_address(void);//FLASH進(jìn)入讀模式

(輸入地址)

voidflash_write_commond(void);//FLASH進(jìn)入寫模式

(輸入指令)

voidflash_write_address(void);//FLASH進(jìn)入寫模式

(輸入地址)

voidflash_data_in(void);//FLASH進(jìn)入數(shù)據(jù)輸入模式

voidflash_data_out(void);//FLASH進(jìn)入數(shù)據(jù)輸出模式voidflash_inefficacy(void);//FLASH進(jìn)入寫保護(hù)狀態(tài)voidflash_write_data_in(unsignedchardata_in);//向FLASH中寫入數(shù)據(jù)

unsignedcharflash_read_data_out(void);//從

FLASH中讀出數(shù)據(jù)

voidflash_setup_address_5cycle(void);//設(shè)置5

周期地址

voidflash_setup_block_address_3cycle(void);//設(shè)置

3周期地址(塊地址)

voidflash_block_erase_handle(unsignedinttemp_int);//塊擦除操作

//FLASH塊擦除子函數(shù)

//入口參數(shù):unsignedinttemp_int塊地址

voidflash_block_erase_handle(unsignedinttemp_int){flash_page_address=0;flash_block_address=temp_int;//要擦除塊的地址flash_write_commond();〃FLASH進(jìn)入

寫模式(輸入指令)

flash_write_data_in(FLASH_BLOCK_ERASE_1ST);//輸入0x60h

flash_write_address();//FLASH進(jìn)入寫

模式(輸入地址)

flash_setup_block_address_3cycle();//輸入要

擦除塊的地址

flash_write_commond();〃FLASH進(jìn)入

寫模式(輸入指令)

lash_write_data_in(FLASH_BLOCK_

ERASE_2ND);

//輸入0xD0h

while(!RBOUT);

//等待擦除完成

flash_inefficacy();

//FLASH進(jìn)入寫保護(hù)狀態(tài)

}

4結(jié)語

本文介紹一種51內(nèi)核管理NANDFLASH的方法,并給出基于該方法硬件實(shí)現(xiàn)和C語言源代碼,該硬件電路和軟件代碼已經(jīng)在筆者參與研制的總線式消防電話系統(tǒng)中得到成功應(yīng)用,實(shí)現(xiàn)了對語音信息的長時(shí)間存儲(chǔ)功能,工作穩(wěn)定、可靠。

20211118_619633f451b34__51內(nèi)核單片機(jī)管理NANDFLASH的方法

聲明:該篇文章為本站原創(chuàng),未經(jīng)授權(quán)不予轉(zhuǎn)載,侵權(quán)必究。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉