性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

什么是Flash閃存以及STM32使用NAND Flash

NAND

文章目錄

NAND

一、FLASH閃存是什么?

二、SD NAND Flash

三、STM32例程

一、FLASH閃存是什么?

簡(jiǎn)介

FLASH閃存是屬于內(nèi)存器件的一種,“Flash”。閃存則是一種非易失性( Non-Volatile )內(nèi)存,在沒(méi)有電流供應(yīng)的條件下也能夠長(zhǎng)久地保持?jǐn)?shù)據(jù),其存儲(chǔ)特性相當(dāng)于硬盤(pán),這項(xiàng)特性正是閃存得以成為各類(lèi)便攜型數(shù)字設(shè)備的存儲(chǔ)介質(zhì)的基礎(chǔ)。

各類(lèi) DDR 、 SDRAM 或者 RDRAM 都屬于揮發(fā)性內(nèi)存,只要停止電流供應(yīng)內(nèi)存中的數(shù)據(jù)便無(wú)法保持,因此每次電腦開(kāi)機(jī)都需要把數(shù)據(jù)重新載入內(nèi)存。

閃存則是一種非易失性( Non-Volatile )內(nèi)存,在沒(méi)有電流供應(yīng)的條件下也能夠長(zhǎng)久地保持?jǐn)?shù)據(jù),其存儲(chǔ)特性相當(dāng)于硬盤(pán),這項(xiàng)特性正是閃存得以成為各類(lèi)便攜型數(shù)字設(shè)備的存儲(chǔ)介質(zhì)的基礎(chǔ)。

分類(lèi)

NOR和NAND是市場(chǎng)上兩種主要的非易失閃存技術(shù)。

在1984年,東芝公司的發(fā)明人舛岡富士雄首先提出了快速閃存存儲(chǔ)器(此處簡(jiǎn)稱閃存)的概念。與傳統(tǒng)電腦內(nèi)存不同,閃存的特點(diǎn)是NVM,其記錄速度也非???。

Intel是世界上第一個(gè)生產(chǎn)閃存并將其投放市場(chǎng)的公司。1988年,公司推出了一款256K bit閃存芯片。它如同鞋盒一樣大小,并被內(nèi)嵌于一個(gè)錄音機(jī)里。後來(lái),Intel發(fā)明的這類(lèi)閃存被統(tǒng)稱為NOR閃存。它結(jié)合EPROM和EEPROM兩項(xiàng)技術(shù),并擁有一個(gè)SRAM接口。

第二種閃存稱為NAND閃存。它由日立公司于1989年研制,并被認(rèn)為是NOR閃存的理想替代者。NAND閃存的寫(xiě)周期比NOR閃存短90%,它的保存與刪除處理的速度也相對(duì)較快。NAND的存儲(chǔ)單元只有NOR的一半,在更小的存儲(chǔ)空間中NAND獲得了更好的性能。鑒于NAND出色的表現(xiàn),它常常被應(yīng)用于諸如CompactFlash、SmartMedia、 SD、 MMC、 xD、 and PC cards、USB sticks等存儲(chǔ)卡上。

NAND 閃存的存儲(chǔ)單元采用串行結(jié)構(gòu),存儲(chǔ)單元的讀寫(xiě)是以頁(yè)和塊為單位來(lái)進(jìn)行(一頁(yè)包含若干字節(jié),若干頁(yè)則組成儲(chǔ)存塊, NAND 的存儲(chǔ)塊大小為 8 到 32KB ),這種結(jié)構(gòu)最大的優(yōu)點(diǎn)在于容量可以做得很大,超過(guò) 512MB 容量的 NAND 產(chǎn)品相當(dāng)普遍, NAND 閃存的成本較低,有利于大規(guī)模普及。

特點(diǎn)

性能

flash閃存是非易失存儲(chǔ)器,可以對(duì)稱為塊的存儲(chǔ)器單元塊進(jìn)行擦寫(xiě)和再編程。任何flash器件的寫(xiě)入操作只能在空或已擦除的單元內(nèi)進(jìn)行,所以大多數(shù)情況下,在進(jìn)行寫(xiě)入操作之前必須先執(zhí)行擦除。NAND器件執(zhí)行擦除操作是十分簡(jiǎn)單的,而NOR則要求在進(jìn)行擦除前先要將目標(biāo)塊內(nèi)所有的位都寫(xiě)為1。

由于擦除NOR器件時(shí)是以64~128KB的塊進(jìn)行的,執(zhí)行一個(gè)寫(xiě)入/擦除操作的時(shí)間為5s,與此相反,擦除NAND器件是以8~32KB的塊進(jìn)行的,執(zhí)行相同的操作最多只需要4ms。

執(zhí)行擦除時(shí)塊尺寸的不同進(jìn)一步拉大了NOR和NADN之間的性能差距,統(tǒng)計(jì)表明,對(duì)于給定的一套寫(xiě)入操作(尤其是更新小文件時(shí)),更多的擦除操作必須在基于NOR的單元中進(jìn)行。這樣,當(dāng)選擇存儲(chǔ)解決方案時(shí),設(shè)計(jì)師必須權(quán)衡以下的各項(xiàng)因素。

● NOR的讀速度比NAND稍快一些。

● NAND的寫(xiě)入速度比NOR快很多。

● NAND的4ms擦除速度遠(yuǎn)比NOR的5s快。

● 大多數(shù)寫(xiě)入操作需要先進(jìn)行擦除操作。

● NAND的擦除單元更小,相應(yīng)的擦除電路更少。

可靠性

采用flash介質(zhì)時(shí)一個(gè)需要重點(diǎn)考慮的問(wèn)題是可靠性。對(duì)于需要擴(kuò)展MTBF的系統(tǒng)來(lái)說(shuō),Flash是非常合適的存儲(chǔ)方案。可以從壽命(耐用性)、位交換和壞塊處理三個(gè)方面來(lái)比較NOR和NAND的可靠性。

耐用性

在NAND閃存中每個(gè)塊的最大擦寫(xiě)次數(shù)是一百萬(wàn)次,而NOR的擦寫(xiě)次數(shù)是十萬(wàn)次。NAND存儲(chǔ)器除了具有10比1的塊擦除周期優(yōu)勢(shì),典型的NAND塊尺寸要比NOR器件小8倍,每個(gè)NAND存儲(chǔ)器塊在給定的時(shí)間內(nèi)的刪除次數(shù)要少一些。

易于使用

可以非常直接地使用基于NOR的閃存,可以像其他存儲(chǔ)器那樣連接,并可以在上面直接運(yùn)行代碼。

由于需要I/O接口,NAND要復(fù)雜得多。各種NAND器件的存取方法因廠家而異。

在使用NAND器件時(shí),必須先寫(xiě)入驅(qū)動(dòng)程序,才能繼續(xù)執(zhí)行其他操作。向NAND器件寫(xiě)入信息需要相當(dāng)?shù)募记?因?yàn)樵O(shè)計(jì)師絕不能向壞塊寫(xiě)入,這就意味著在NAND器件上自始至終都必須進(jìn)行虛擬映射。

其他作用

驅(qū)動(dòng)還用于對(duì)DiskOnChip產(chǎn)品進(jìn)行仿真和NAND閃存的管理,包括糾錯(cuò)、壞塊處理和損耗平衡。

虛擬化

FLASH閃存是一種內(nèi)存技術(shù),與RAM不同,在斷電時(shí)它仍舊可以保留所存儲(chǔ)的信息。盡管FLASH閃存在執(zhí)行讀寫(xiě)操作時(shí)并不像RAM那樣快,但性能遠(yuǎn)遠(yuǎn)高于典型的硬盤(pán)。更為重要的是,F(xiàn)LASH閃存訪問(wèn)數(shù)據(jù)時(shí)幾乎不存在任何時(shí)間延遲。FLASH閃存技術(shù)非常適合隨機(jī)I/O,而虛擬服務(wù)器環(huán)境中恰恰存在大量的隨機(jī)I/O。

對(duì)FLASH閃存主要的關(guān)注點(diǎn)之一是其執(zhí)行寫(xiě)操作的方式。FLASH閃存可以執(zhí)行的寫(xiě)操作次數(shù)有限,這意味著FLASH閃存廠商需要開(kāi)發(fā)復(fù)雜的控制器技術(shù),對(duì)寫(xiě)入FLASH閃存模塊的方式進(jìn)行管理,確保每個(gè)FLASH閃存單元接收相同的寫(xiě)請(qǐng)求。

目前有三種類(lèi)型的FLASH閃存,耐久性各不相同。單階存儲(chǔ)單元(SLC)FLASH閃存在每個(gè)單元寫(xiě)一位數(shù)據(jù),耐久性最好。多階存儲(chǔ)單元(MLC)FLASH閃存在每個(gè)單元寫(xiě)多位數(shù)據(jù),耐久性排名第二。三階存儲(chǔ)單元(TLC)在每個(gè)單元寫(xiě)三位數(shù)據(jù),耐久性最差。每個(gè)單元寫(xiě)入的數(shù)據(jù)位越多意味著每個(gè)單元的容量越高,每GB的成本越低,同樣意味著平均壽命更短。

SLC是數(shù)據(jù)中心標(biāo)準(zhǔn),但控制器技術(shù)的不斷優(yōu)化使得MLC被大多數(shù)用例所接受。尤其是在采用了某種方式的數(shù)據(jù)保護(hù),比如鏡像或者RAID或者使用了FLASH閃存層時(shí)。

二、SD NAND Flash

我以貼片式TF卡“CSNP32GCR01-AOW”型號(hào)為例介紹

芯片樣子都一樣,這里隨便放一張

概述

CSNP32GCR01-AOW是基于NAND閃存和SD控制器的32Gb密度嵌入式存儲(chǔ)。該產(chǎn)品與原始NAND相比,它有許多優(yōu)點(diǎn),包括嵌入式壞塊管理和更強(qiáng)的嵌入式ECC。即使在異常斷電的情況下,它仍然可以安全地保存數(shù)據(jù)。

特點(diǎn)

接口:標(biāo)準(zhǔn)SD規(guī)范2.0版,帶有1-I/O和4-I/O。

電源:Vcc=2.7V-3.6V

默認(rèn)模式:可變時(shí)鐘頻率0-25 MHz,最高12.5 MB/秒接口速度(使用4條并行數(shù)據(jù)線)

高速模式:可變時(shí)鐘頻率0-50 MHz,最高25 MB/秒接口速度(使用4條并行數(shù)據(jù)線)

工作溫度:-25°C至+85°C

儲(chǔ)存溫度:-40°C至+85°C

備用電流:<250uA

開(kāi)關(guān)功能命令支持高速、電子商務(wù)和未來(lái)功能

內(nèi)存字段錯(cuò)誤的糾正

內(nèi)容保護(hù)機(jī)制-符合SDMI標(biāo)準(zhǔn)的最高安全性。

SD NAND的密碼保護(hù)(CMD42-鎖定和解鎖)

使用機(jī)械開(kāi)關(guān)的寫(xiě)保護(hù)功能

內(nèi)置寫(xiě)保護(hù)功能(永久和臨時(shí))

特定于應(yīng)用程序的命令

3. 引腳分配

4.數(shù)據(jù)傳輸模式

5. SD NAND寄存器

SDNAND接口中定義了六個(gè)寄存器:OCR、CID、CSD、RCA、DSR和SCR。這些信息只能通過(guò)

相應(yīng)的命令。OCR、CID、CSD和SCR寄存器攜帶SDNAND/內(nèi)容特定信息,而RCA、DSR寄存器是存儲(chǔ)實(shí)際配置參數(shù)的配置寄存器(這里選取倆個(gè)寄存器進(jìn)行展示)。

CID register

SCR register

通電圖

通電時(shí)間

Tips: RDAT和RCMD(10K~100 kΩ)是上拉電阻器,當(dāng)SDNAND處于a狀態(tài)時(shí),保護(hù)CMD和DAT線路不受總線浮動(dòng)的影響;在高阻抗模式,即使主機(jī)僅在SD模式下使用SDNAND作為1位模式,主機(jī)也應(yīng)通過(guò)RDAT上拉所有DAT0-3線。它是建議VCC上有2.2uF電容。RCLK參考0~120Ω。

三、STM32例程

1. 初始化

SD_Error SD_Init(void)

{

uint32_t i = 0;

/*!< Initialize SD_SPI */

GPIO_Configuration();

/*!< SD chip select high */

SD_CS_HIGH();

/*!< Send dummy byte 0xFF, 10 times with CS high */

/*!< Rise CS and MOSI for 80 clocks cycles */

for (i = 0; i <= 9; i++)

{

/*!< Send dummy byte 0xFF */

SD_WriteByte(SD_DUMMY_BYTE);

}

//獲取卡的類(lèi)型,最多嘗試10次

i=0;

do

{

/*------------Put SD in SPI mode--------------*/

/*!< SD initialized and set to SPI mode properly */

SD_GoIdleState();

/*Get card type*/

SD_GetCardType();

}while(SD_Type == SD_TYPE_NOT_SD && i++ >10);

//不支持的卡

if(SD_Type == SD_TYPE_NOT_SD)

return SD_RESPONSE_FAILURE;

return SD_GetCardInfo(&SDCardInfo);

}

2. 單數(shù)據(jù)塊測(cè)試

void SD_SingleBlockTest(void)

{

/*------------------- Block Read/Write --------------------------*/

/* Fill the buffer to send */

Fill_Buffer(Buffer_Block_Tx, BLOCK_SIZE, 0x320F);

if (Status == SD_RESPONSE_NO_ERROR)

{

/* Write block of 512 bytes on address 0 */

Status = SD_WriteBlock(Buffer_Block_Tx, 0x00, BLOCK_SIZE);

/* Check if the Transfer is finished */

}

if (Status == SD_RESPONSE_NO_ERROR)

{

/* Read block of 512 bytes from address 0 */

Status = SD_ReadBlock(Buffer_Block_Rx, 0x00, BLOCK_SIZE);

}

/* Check the correctness of written data */

if (Status == SD_RESPONSE_NO_ERROR)

{

TransferStatus1 = Buffercmp(Buffer_Block_Tx, Buffer_Block_Rx, BLOCK_SIZE);

}

if(TransferStatus1 == PASSED)

{

LED2_ON;

printf("Single block 測(cè)試成功!\n");

}

else

{

LED1_ON;

printf("Single block 測(cè)試失敗,請(qǐng)確保SD卡正確接入開(kāi)發(fā)板,或換一張SD卡測(cè)試!\n");

}

}

3. 多數(shù)據(jù)塊測(cè)試

void SD_MultiBlockTest(void)

{

/*--------------- Multiple Block Read/Write ---------------------*/

/* Fill the buffer to send */

Fill_Buffer(Buffer_MultiBlock_Tx, MULTI_BUFFER_SIZE, 0x0);

if (Status == SD_RESPONSE_NO_ERROR)

{

/* Write multiple block of many bytes on address 0 */

Status = SD_WriteMultiBlocks(Buffer_MultiBlock_Tx, 0x00, BLOCK_SIZE, NUMBER_OF_BLOCKS);

/* Check if the Transfer is finished */

}

if (Status == SD_RESPONSE_NO_ERROR)

{

/* Read block of many bytes from address 0 */

Status = SD_ReadMultiBlocks(Buffer_MultiBlock_Rx, 0x00, BLOCK_SIZE, NUMBER_OF_BLOCKS);

/* Check if the Transfer is finished */

}

/* Check the correctness of written data */

if (Status == SD_RESPONSE_NO_ERROR)

{

TransferStatus2 = Buffercmp(Buffer_MultiBlock_Tx, Buffer_MultiBlock_Rx, MULTI_BUFFER_SIZE);

}

if(TransferStatus2 == PASSED)

{

LED2_ON;

printf("Multi block 測(cè)試成功!");

}

else

{

LED1_ON;

printf("Multi block 測(cè)試失敗,請(qǐng)確保SD卡正確接入開(kāi)發(fā)板,或換一張SD卡測(cè)試!");

}

}

4. 狀態(tài)緩沖

TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint32_t BufferLength)

{

while (BufferLength--)

{

if (*pBuffer1 != *pBuffer2)

{

return FAILED;

}

pBuffer1++;

pBuffer2++;

}

return PASSED;

}

void Fill_Buffer(uint8_t *pBuffer, uint32_t BufferLength, uint32_t Offset)

{

uint16_t index = 0;

/* Put in global buffer same values */

for (index = 0; index < BufferLength; index++)

{

pBuffer[index] = index + Offset;

}

}

了解產(chǎn)品更多詳情:官網(wǎng) http://www.longsto.com/

全部回復(fù)(0)
正序查看
倒序查看
現(xiàn)在還沒(méi)有回復(fù)呢,說(shuō)說(shuō)你的想法
發(fā)