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