前言:
隨著國內(nèi)市場(chǎng)對(duì)芯片的需求日益增加,國產(chǎn)中高端芯片在不斷的占領(lǐng)國內(nèi)市場(chǎng)甚至在國際市場(chǎng)都有一部分,越來越多的企業(yè)開始研究自己的芯片,這個(gè)芯片的種類繁多,功能性強(qiáng)大,也有一些芯片占有著很大的市場(chǎng)份額,有著不可取代的地位。
隨著芯片的發(fā)展存儲(chǔ)芯片的趨勢(shì)也開始不甘落后,有著越來越多的新型的芯片問世,這里就要提起SD NAND芯片了,市面上主流的生產(chǎn)廠家就是雷龍。
SD NAND的簡(jiǎn)單介紹:
什么是SD NAND?很簡(jiǎn)單顧名思義就是內(nèi)部集成了SD卡或TF卡(這里有必要說明SD卡和TF卡除了大小不同,引腳不同之外驅(qū)動(dòng),功能等內(nèi)容都是一樣的使用SD協(xié)議)功能的NAND存儲(chǔ)芯片。
當(dāng)然,他和主流的存儲(chǔ)芯片不太一樣,它是遵循SD協(xié)議的芯片,下圖就是SDNAND的引腳圖。
下圖是SD卡的引腳圖。
仔細(xì)觀察就不難發(fā)現(xiàn)他們的引腳功能相似,SD NAND芯片在引腳上遵循SD卡的協(xié)議, SD NAND可以理解為是一種可以直接焊接在PCB上的SD卡。
常見存儲(chǔ)芯片的類別:
下面就要討論關(guān)于常見存儲(chǔ)芯片的主要用途作,和優(yōu)缺點(diǎn),在這里會(huì)從芯片的功能和實(shí)際使用情況來分析,如果只想了解SDNAND可以直接跳轉(zhuǎn)到“SD NAND存儲(chǔ)芯片”的目錄中。
在這里會(huì)以存儲(chǔ)芯片做比較,不和RAM存儲(chǔ)器比較,以比較性能和使用環(huán)境,使用協(xié)議為主。
EEPROM存儲(chǔ)芯片:
EEPROM存儲(chǔ)芯片在1978年就誕生了,在這之前經(jīng)過了ROM(只讀存儲(chǔ)器)EPROM(紫外線可擦除存儲(chǔ)器)的演化,雖然現(xiàn)在不能成為主流的存儲(chǔ)芯片,但是在存儲(chǔ)一些簡(jiǎn)單的數(shù)據(jù)上還是可以看到它的身影,在單片機(jī)的開發(fā)上會(huì)對(duì)簡(jiǎn)單的數(shù)據(jù)進(jìn)行存儲(chǔ)。
這里就以AT24C256存儲(chǔ)芯片來舉例,下圖是該芯片的內(nèi)部結(jié)構(gòu)圖 。
可以看出主要是以IIC進(jìn)行數(shù)據(jù)傳輸?shù)模ㄔ谥髁鞯腅EPROM市場(chǎng)中還有一小部分是以SPI作為數(shù)據(jù)傳輸?shù)模?,引腳排列較少,價(jià)格較為便宜,但是他們的傳輸速度較慢,存儲(chǔ)空間不是很大,但仍有很多的地方見到它的身影比如說主板的BIOS芯片,主要是在數(shù)據(jù)暫存,掉電保存重要數(shù)據(jù)等用途。要是和其他種類的存儲(chǔ)芯片比較傳輸速度和存儲(chǔ)空間很顯然EEPROM就有些力不從心了。
NAND類存儲(chǔ)芯片:
NAND Flash全名為Flash Memory,屬于非易失性存儲(chǔ)設(shè)備(Non-volatile Memory Device),基于浮柵(Floating Gate)晶體管設(shè)計(jì),通過浮柵來鎖存電荷,這NAND存儲(chǔ)芯片指的是使用這個(gè)存儲(chǔ)結(jié)構(gòu)的芯片,他們和EEPROM有不同的一點(diǎn)是存儲(chǔ)數(shù)據(jù)量較大內(nèi)部集成度較高,記住NAND并不是存儲(chǔ)芯片的一種,而是芯片內(nèi)部使用存儲(chǔ)單元的結(jié)構(gòu)(統(tǒng)稱為NAND類存儲(chǔ)芯片)。
NAND類存儲(chǔ)芯片經(jīng)常和FLASH聯(lián)系在一起,或者可以說NAND是FLASH的一種,在實(shí)際應(yīng)用中很常見,下圖是SD卡簡(jiǎn)單化的內(nèi)部結(jié)構(gòu)。
SD卡存儲(chǔ)單元是使用的FLASH,F(xiàn)LASH存儲(chǔ)器一般會(huì)采用NAND的存儲(chǔ)結(jié)構(gòu),NAND存儲(chǔ)芯片有很多優(yōu)點(diǎn)讀寫速度快,存儲(chǔ)密度更高,擦寫速度更快,使用壽命更長(zhǎng)。
一般來說NAND存儲(chǔ)芯片的連接通訊接口很多,比如SPI,IIC,多數(shù)據(jù)并行接口等,這個(gè)主要取決于它使用使用什么樣的控制器來對(duì)它進(jìn)行存儲(chǔ),另外NAND存儲(chǔ)技術(shù)在國內(nèi)已經(jīng)很成熟了,在市場(chǎng)上使用的較為廣泛,更是在硬件和PCB系統(tǒng)設(shè)計(jì)中成為了主流選擇。
EMMC存儲(chǔ)芯片:
說到NAND類存儲(chǔ)芯片就要提到EMMC芯片了,雖說EMMC只是NAND類存儲(chǔ)類的一種,但是EMMC芯片在PCB系統(tǒng)設(shè)計(jì)中卻是一個(gè)擁有很強(qiáng)性能的芯片,主要是針對(duì)手機(jī)平板等微型內(nèi)嵌存儲(chǔ)芯片,從內(nèi)部結(jié)構(gòu)就可以看出有著更強(qiáng)大的控制器,有很多的EMMC都是采用NAND存儲(chǔ)結(jié)構(gòu)。
當(dāng)然強(qiáng)大的傳輸速度需要很強(qiáng)大的處理器進(jìn)行連接,因此在芯片的接口上就要比普通的存儲(chǔ)芯片復(fù)雜很多,下面的這一張圖是EMMC存儲(chǔ)芯片的引腳圖。
從引腳上看Power(供電)就需要兩種不同的電壓,數(shù)據(jù)傳輸DAT[7:0]端口至少需要8個(gè)端口,CMD負(fù)責(zé)控制,CLK引腳來提供時(shí)鐘信號(hào)(最快的EMMC時(shí)鐘信號(hào)可以達(dá)到200MHZ),這種存儲(chǔ)器如果用性能一般點(diǎn)的單片機(jī)來控制會(huì)有點(diǎn)吃力,當(dāng)然它通常是BGA封裝,所使用的引腳是很多的。
EMMC存儲(chǔ)芯片無論是在傳輸速度上,在存儲(chǔ)容量上,它的的性能都是很強(qiáng)大的,但同時(shí)需要很復(fù)雜的連接驅(qū)動(dòng)才能使用,所以經(jīng)常出現(xiàn)在一些較高端的電子產(chǎn)品上使用比如手機(jī),平板,電腦等。
SD NAND存儲(chǔ)芯片:
了解了EEPROM存儲(chǔ)芯片和NAND芯片以及EMMC存儲(chǔ)芯片他們都有各自的有點(diǎn),比如說現(xiàn)在需要一款芯片是擁有較大的存儲(chǔ)空間和較為簡(jiǎn)單的存儲(chǔ)驅(qū)動(dòng)什么樣的芯片適合呢?答案是:SD NAND。
SD NAND有著很好的一點(diǎn)是擁有EEPROM那樣的簡(jiǎn)單的外部布局,使無需通過復(fù)雜的連接完成存儲(chǔ)功能,還擁有著EMMC的大容量存儲(chǔ)空間,下圖就是雷龍的CSNP4GCR01-AOW(SD NAND)芯片的內(nèi)部結(jié)構(gòu)圖。
通過結(jié)構(gòu)圖可以看出內(nèi)部主要是由SD NAND作為存儲(chǔ),在芯片的輸入輸出接口部分使用的引腳和SD卡使用的是相同的協(xié)議,控制原理基本大差不差,下圖是SD卡的內(nèi)部結(jié)構(gòu)圖,引腳相同,控制也相同。
SD NAND芯片使用的數(shù)據(jù)傳輸協(xié)議相對(duì)來說較為簡(jiǎn)單(和EMMC比起),存儲(chǔ)空間較大(和EEPROM比起),或者理解為集成了EMMC和EEPROM的優(yōu)點(diǎn),但它的傳輸性能遠(yuǎn)不如EMMC那么快(這里根據(jù)EMMC協(xié)議主時(shí)鐘最高200MHZ和SD協(xié)議主時(shí)鐘最高50MHZ來定)。
因此SD NAND更適合用于一些用于并不是很復(fù)雜的設(shè)備開發(fā)中,比如單片機(jī)數(shù)據(jù)存取,簡(jiǎn)單的數(shù)據(jù)保存和一些輕量化的系統(tǒng),針對(duì)一些掌上電腦,手機(jī),平板等高智能化的產(chǎn)品還是覺得EMMC芯片更能符合這一類的環(huán)境。
SD卡測(cè)試:
下面就來使用XC7Z020芯片對(duì)SD卡進(jìn)行讀寫TXT文本實(shí)驗(yàn),就是SD卡而不是SD NAND具體原因在SD卡測(cè)試下面會(huì)說明,具體實(shí)驗(yàn)步驟如下。本次使用的是SD卡。
創(chuàng)建Vivado工程文件,選擇對(duì)應(yīng)的芯片型號(hào)和內(nèi)容
本次實(shí)驗(yàn)使用的是FPGA內(nèi)部自帶的IP核和對(duì)應(yīng)的硬件串口來實(shí)現(xiàn),所以在IP核的配置中只使用DDR端口和內(nèi)存端口,IP核其他的多余引腳全部刪除。
上圖是IP核設(shè)定的界面這個(gè)對(duì)應(yīng)的SD接口,這個(gè)接口是開發(fā)板硬件連接決定的,本次實(shí)驗(yàn)使用的是SD0,同時(shí)還要使能串口外設(shè)。
同時(shí)不要忘記設(shè)定需要的DDR控制器,以便來使用,下一步就要保存生成數(shù)據(jù)文件。
已經(jīng)生成好的數(shù)據(jù)文件要把設(shè)定好的導(dǎo)出后,然后就可以進(jìn)行SDK開發(fā)了。
正在啟動(dòng)的SDK開發(fā)平臺(tái)。
在SDK開發(fā)平臺(tái)創(chuàng)建開發(fā)工程。
由于本次實(shí)驗(yàn)需要添加FATS文件系統(tǒng),在SDK開發(fā)平臺(tái)上沒有默認(rèn)自帶該庫函數(shù),因此需要手動(dòng)添加庫文件。
點(diǎn)擊左上角的Modify this BSP's Settings 按鈕,添加庫函數(shù)。
選擇上圖中的庫函數(shù),這個(gè)庫函數(shù)是FAT系統(tǒng)庫函數(shù),里面包含很多的庫函數(shù)完全夠本次實(shí)驗(yàn)使用。
繼續(xù)把use_lfn這個(gè)選項(xiàng)的值改成true,這個(gè)選項(xiàng)的作用是使能長(zhǎng)文件名,這樣就可以針對(duì)長(zhǎng)文件名進(jìn)行操作。
在庫函數(shù)下有一個(gè)新加入的庫函數(shù)這個(gè)就是本次實(shí)驗(yàn)使用的庫。
/***************************** Include Files *********************************/
#include "xparameters.h" /* SDK generated parameters */
#include "xsdps.h" /* SD device driver */
#include "xil_printf.h"
#include "ff.h"
#include "xil_cache.h"
#include "xplatform_info.h"
/************************** Function Prototypes ******************************/
int FfsSdPolledExample(void);
/************************** Variable Definitions *****************************/
static FIL fil; /* File object */
static FATFS fatfs;
static char FileName[32] = "Test.txt";
static char *SD_File;
char DestinationAddress[20] ;
const char SourceAddress[20]= "hello mizar !";
#define TEST 7
int main(void)
{
int Status;
xil_printf("SD Polled File System Example Test rn");
Status = FfsSdPolledExample();
if (Status != XST_SUCCESS) {
xil_printf("SD Polled File System Example Test failed rn");
return XST_FAILURE;
}
xil_printf("Successfully ran SD Polled File System Example Test rn");
return XST_SUCCESS;
}
int FfsSdPolledExample(void)
{
FRESULT Res;
UINT NumBytesRead;
UINT NumBytesWritten;
u32 BuffCnt;
BYTE work[FF_MAX_SS];
int FileSize = strlen(SourceAddress);
TCHAR *Path = "0:/";
//初始化文件系統(tǒng)
Res = f_mount(&fatfs, Path, 0);
if (Res != FR_OK) {
return XST_FAILURE;
}
//格式化SD卡
Res = f_mkfs(Path, FM_FAT32, 0, work, sizeof work);
if (Res != FR_OK) {
return XST_FAILURE;
}
//打開一個(gè)文件,如果文件不存在,則創(chuàng)建一個(gè)文件,該文件的權(quán)限為可讀寫
SD_File = (char *)FileName;
Res = f_open(&fil, SD_File, FA_CREATE_ALWAYS | FA_WRITE | FA_READ);
if (Res) {
return XST_FAILURE;
}
//指針指向文件開頭
Res = f_lseek(&fil, 0);
if (Res) {
return XST_FAILURE;
}
//向文件中寫入數(shù)據(jù)
Res = f_write(&fil, (const void*)SourceAddress, FileSize,
&NumBytesWritten);
if (Res) {
return XST_FAILURE;
}
//指針指向文件開頭
Res = f_lseek(&fil, 0);
if (Res) {
return XST_FAILURE;
}
//從SD卡中的文件讀出數(shù)據(jù)
Res = f_read(&fil, (void*)DestinationAddress, FileSize,
&NumBytesRead);
if (Res) {
return XST_FAILURE;
}
//比較寫入的數(shù)據(jù)與讀出的數(shù)據(jù)是否相同
for(BuffCnt = 0; BuffCnt < FileSize; BuffCnt++){
if(SourceAddress[BuffCnt] != DestinationAddress[BuffCnt]){
return XST_FAILURE;
}
}
//關(guān)閉文件
Res = f_close(&fil);
if (Res) {
return XST_FAILURE;
}
return XST_SUCCESS;
}
以上是本次實(shí)驗(yàn)使用到的部分代碼,里面包含了外設(shè),標(biāo)準(zhǔn)的打印函數(shù)和SD卡控制器的功能,在程序中先進(jìn)行格式化SD卡為FAT32格式。
數(shù)據(jù)上傳到FPGA中創(chuàng)建SD卡內(nèi)部?jī)?nèi)容。
提示該信息說明創(chuàng)建完成,這個(gè)數(shù)據(jù)是由串口發(fā)送的,下載完成就把SD卡通過讀卡器連接在電腦上就可以查看剛才創(chuàng)建的文件了,
在SD卡下創(chuàng)建好的文件。
或許在這里會(huì)有疑問為什么用FPGA對(duì)SD卡進(jìn)行測(cè)試而不是SD NAND進(jìn)行測(cè)試呢?答案很簡(jiǎn)單就是驅(qū)動(dòng)問題,如果把SD NAND進(jìn)行和上面SD卡測(cè)試相同的實(shí)驗(yàn)會(huì)發(fā)現(xiàn)最后查看Test文件無法完成,因?yàn)镾D卡在Windows系統(tǒng)上(包括SD卡的讀卡器)它的驅(qū)動(dòng)很完善有著很強(qiáng)大的能力,但是把SD NAND芯片單獨(dú)放到該體統(tǒng)中會(huì)顯得有一些缺點(diǎn),但是就并不能否定SD NAND在其他硬件比如單片機(jī)中的優(yōu)點(diǎn)。
像剛才我說的如果在Windows系統(tǒng)中直接拿SD卡和SD NAND來比較性能就有點(diǎn)太欺負(fù)人了,因?yàn)樵隍?qū)動(dòng)層面有著很大的不同,所以說明SD NAND存儲(chǔ)芯片要想做U盤就需要很完善的驅(qū)動(dòng)才能進(jìn)行,因此更適合在嵌入式單片機(jī),F(xiàn)PGA內(nèi)部程序開發(fā)等。
總結(jié):
總的來說SD NAND是內(nèi)部集成了SD卡協(xié)議的芯片,有著和SD卡相同的功能,在實(shí)際使用的時(shí)候使用的正是SD卡的協(xié)議,SD NAND可以焊接在線路板上完成一體化設(shè)計(jì),建議使用在并不是需要強(qiáng)大性能的處理器上作為系統(tǒng)存儲(chǔ),因?yàn)樽鳛閺?qiáng)大系統(tǒng)的存儲(chǔ)使用EMMC較好,SD NAND存儲(chǔ)芯片多數(shù)使用在較為輕量化的系統(tǒng)中。
本次實(shí)驗(yàn)使用的是雷龍CSNP32GCR01和CSNP4GCR01芯片進(jìn)行測(cè)試的,建議使用在嵌入式系統(tǒng)開發(fā)。
審核編輯 黃宇
-
NAND
+關(guān)注
關(guān)注
16文章
1682瀏覽量
136155 -
存儲(chǔ)
+關(guān)注
關(guān)注
13文章
4314瀏覽量
85842 -
SD NAND
+關(guān)注
關(guān)注
0文章
83瀏覽量
1236
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論