一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于FPGA的SD卡的數(shù)據(jù)讀寫實現(xiàn)(SD NAND FLASH)

深圳市雷龍發(fā)展有限公司 ? 2022-12-16 17:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

文章目錄

1、存儲芯片分類

2、NOR Flash 與NAND Flash的區(qū)別

3、什么是SD卡?

4、什么是SD NAND?

5、SD NAND的控制時序

6、FPGA實現(xiàn)SD NAND讀寫

6.1、設(shè)計思路

6.2、仿真結(jié)果

6.3、實驗結(jié)果

1、存儲芯片分類

目前市面上的存儲芯片,大致可以將其分為3大類:

SD NAND,貼片式TF卡,貼片式SD卡

① EEPROM

EEPROM (Electrically Erasable Programmable read only memory)是指帶電可擦可編程只讀存儲器,是一種掉電后數(shù)據(jù)不丟失的存儲芯片。EEPROM 可以在電腦上或?qū)S迷O(shè)備上擦除已有信息,重新編程。

這類產(chǎn)品容量小,讀取速度慢,且無法在應(yīng)用過程中寫入數(shù)據(jù),十分不便。目前多存在于一些MCU內(nèi)部,如遙控器,電風(fēng)扇等各類低端、低速消費(fèi)類產(chǎn)品。相信你讀大學(xué)如果玩單片機(jī)的話,那么應(yīng)該是不陌生。

② NOR Flash

NOR Flash由Intel在1988年發(fā)明,是市場上兩種主要的非易失閃存技術(shù)之一。NOR Flash 技術(shù)的出現(xiàn),徹底改變了原先由EPROM和EEPROM一統(tǒng)天下的局面。

NOR Flash可能是目前應(yīng)用領(lǐng)域最廣泛的一種存儲芯片了,基本上主流的電子產(chǎn)品里都有使用,比如手機(jī)攝像頭內(nèi)部,或者屏幕驅(qū)動電路板。主要用來存儲代碼和一些比較小的數(shù)據(jù)文件。NOR Flash架構(gòu)決定了它的容量不能做大,而且讀取速度比較慢。好處在于簡單易用,其接口可以實現(xiàn)地址尋址,也就意味著可以做到直接對某個地址直接操作,而不需要建立額外的文件系統(tǒng)。

③ NAND Flash

雖然很多人平常說的Flash 存儲器一半默認(rèn)其就是NOR Flash ,但這無疑是不嚴(yán)謹(jǐn)?shù)?。FLASH產(chǎn)品可以分為兩個大類:NOR Flash 和 NAND Flash 。

NAND Flash 是市場上兩種主要的非易失閃存技術(shù)之一,由東芝公司在1989年發(fā)明。其強(qiáng)調(diào)降低每比特的成本,并擁有更高的性能,可以像磁盤一樣可以通過接口輕松升級。

NAND Flash應(yīng)該是目前最熱門的存儲芯片了。因為我們生活中經(jīng)常使用的電子產(chǎn)品都會涉及到它。比如你買手機(jī),肯定會考慮64GB,還是256GB?買筆記本是買256GB,還是512GB容量的硬盤呢?(目前電腦大部分采用了基于NAND Flash產(chǎn)品的固態(tài)硬盤)

2、NOR Flash 與 NAND Flash的區(qū)別

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

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

NOR Flash支持隨機(jī)訪問,所以支持XIP(execute In Place),NAND Flash需要按塊進(jìn)行讀取,所以不支持XIP

NAND FLASH理論讀取速度與NOR Flash相近,實際情況會根據(jù)接口不同有些差異

NOR 與 NAND 寫入前都需要先擦除,NOR在擦除時以64~128KB的塊進(jìn)行,執(zhí)行一個寫入/擦除操作的時間約5s,NAND在擦除時以8~32KB的塊進(jìn)行,執(zhí)行一個寫入/擦除操作的時間約4ms

NAND 理論最大擦除次數(shù)比NOR多

NOR 驅(qū)動比NAND簡單,NAND FLASH需要通過專門的NFI(NAND FLASH Interface)與Host端進(jìn)行通信,驅(qū)動相對復(fù)雜

所有Flash 都會有位反轉(zhuǎn)的問題,NAND 位反轉(zhuǎn)概率要比NOR高,NAND Flash 必須要使用ECC

NAND的單元尺寸幾乎是NOR器件的一半,所以NAND成本更低

SD NAND,貼片式TF卡,貼片式SD卡

NOR 與 NAND 各有特點(diǎn),應(yīng)用場景與應(yīng)用難度也不同,一般來講,NOR適用于小容量、略低速且需要直接對地址塊進(jìn)行操作的應(yīng)用,而NADN則適用于大容量的高速應(yīng)用。SD NAND 在保留了NAND架構(gòu)優(yōu)質(zhì)特性的同時改進(jìn)了不足之處,內(nèi)置的控制器能自行管理NAND Flash,無需在外部處理ECC和進(jìn)行壞塊管理,免去了MTD層,不需要寫繁瑣的驅(qū)動代碼。

3、什么是SD卡?

①概述

SD卡的英文全稱是Secure Digital Card,即安全數(shù)字卡(又叫安全數(shù)碼卡),是在MMC 卡(Multimedia Card,多媒體卡)的基礎(chǔ)上發(fā)展而來,主要增加了兩個特色:更高的安全性和更快的讀寫速度。

②容量標(biāo)準(zhǔn)和速度等級

若按照容量 對 SD 卡進(jìn)行等級劃分,SD 卡可分為 4 個等級,SD(Secure Digital Card,安全數(shù)字卡) 卡、SDHC 卡(Secure Digital High Capacity,高容量安全數(shù)字卡)、SDXC 卡( SD eXtended Capacity,容量擴(kuò)大化的安全數(shù)字卡)和 SDUC(Secure Digital Ultra Capacity,超 容量安全數(shù)字卡)?,F(xiàn)今,市場的主流 SD 產(chǎn)品是 SDHC 和 SDXC 這兩種較大容量的存儲 卡,SD 卡因容量過小,已逐漸被市場淘汰,SDUC 則是容量太大,預(yù)計會出現(xiàn)在未來市 場。SD 卡的四種容量標(biāo)準(zhǔn),具體見下圖:

SD NAND,貼片式TF卡,貼片式SD卡

不同品牌和廠商生產(chǎn)的 SD 卡在對存取速度上的定義標(biāo)準(zhǔn)不同,這會使用戶在選擇 SD卡時產(chǎn)生困擾。所以 SD 協(xié)會根據(jù)視頻勻速寫入到 SD 卡的最低持續(xù)速度來劃分不同等級, 每個等級的速率是以每秒傳輸多少 MB 來衡量的,單位為 MB/S。

SD 協(xié)會定義了三種速度等級:速度等級、UHS 速度等級與視頻速度等級。三種速度等級的具體傳輸速度如下圖:

SD NAND,貼片式TF卡,貼片式SD卡

4、什么是SD NAND?

上文中提到的SD卡其實更應(yīng)該叫做TF卡,在日常生活中最常見的應(yīng)用就是數(shù)碼相機(jī)的存儲卡。因為它是可拆卸的,所以這類SD卡最大的優(yōu)點(diǎn)就是便攜方便,但同時也有容易丟失和接觸不良等毛病,所以多用于消費(fèi)類產(chǎn)品。

在工業(yè)級應(yīng)用中,更多見的是一類貼片式的SD NAND產(chǎn)品,俗稱貼片式T卡或貼片式SD卡。雖然SD NAND 和TF卡稱呼上有些類似,但是SD NAND和TF卡有著本質(zhì)上的區(qū)別:

SD NAND,貼片式TF卡,貼片式SD卡

為什么SD NAND和 TF卡 之間有這么大區(qū)別呢?因為 SD NAND是為內(nèi)置存儲而生,是焊接在PCB板上的,是針對工業(yè)級應(yīng)用的產(chǎn)品,所以品質(zhì)穩(wěn)定、一致性高、使用穩(wěn)定性高、同時尺寸也小。而TF卡主要是針對普通消費(fèi)者,品質(zhì)和一致性、使用穩(wěn)定性等相對要求不高,再加上國內(nèi)魚龍混雜的市場環(huán)境,導(dǎo)致內(nèi)置存儲用TF卡的品質(zhì)風(fēng)險高。

NAND Flash產(chǎn)品的一個特質(zhì)就是它的品質(zhì)并不是0和1這么簡單,有些品質(zhì)隱患是使用一段時間之后才被發(fā)現(xiàn),如果這個產(chǎn)品已經(jīng)銷往海外,處理起來會變得異常麻煩。使用SD NAND可以為客戶產(chǎn)品帶來整體品質(zhì)的提升,提供確定性,是客戶產(chǎn)品良好品牌和口碑的穩(wěn)定基石。而使用TF卡時,產(chǎn)品整機(jī)不可控因素會增高,比如常見的卡座老化松動、TF觸點(diǎn)氧化、TF卡遺失、抗震性能減退等等。綜上所述,雖然SD NAND與TF卡使用的協(xié)議相同,但從外觀到內(nèi)在都有區(qū)別。正在使用TF卡的客戶需要提升產(chǎn)品穩(wěn)定性及耐用性時,SD NAND 是絕佳選擇。

盡管 SD NAND和 TF卡之間有著這么大的區(qū)別,但具體到實際應(yīng)用,其對外接口和驅(qū)動程序都是一樣了,這說明可移植性非常好。

① 物理結(jié)構(gòu)

SD NAND從物理結(jié)構(gòu)看包括 5 個部分,分別為存儲單元、存儲單元接口、電源檢測、卡及接口控制器和對外接口,具體見下圖。

SD NAND,貼片式TF卡,貼片式SD卡

存儲單元是存儲數(shù)據(jù)部件,存儲單元通過存儲單元接口與卡控制單元進(jìn)行數(shù)據(jù)傳輸

存儲單元接口是接口控制器與存儲單元的數(shù)據(jù)交互通道

電源檢測單元保證 SD NAND工作在合適的電壓下,如出現(xiàn)掉電或上電狀態(tài)時,它會使控制單元和存儲單元接口復(fù)位

卡及接口控制單元控制 SDNAND的運(yùn)行狀態(tài),它包括 8 個寄存器

對外接口單元控制 SD NAND引腳的輸入輸出,一般包含SDIO接口和SPI接口

② 對外接口

SD NAND共有 9 個引腳,其中包括 3 根電源線、1 根時鐘線、1 根命令線和 4根數(shù)據(jù)線。如下:

CLK:同步時鐘線,由主機(jī)產(chǎn)生,即由主控制器(FPGA)輸出; 使用 SPI 模式 時,該引腳與 SPI 總線的 SCK 時鐘信號相連

CMD:命令控制線, SDIO 主機(jī)通過該線發(fā)送命令控制 SD NAND,如果命令要求 SD NAND 提供應(yīng)答(響應(yīng)), SD NAND也是通過該線傳輸應(yīng)答信息; 使用 SPI 模式時,該引腳與 SPI總線的 MOSI 信號相連, SPI 主機(jī)通過它向 SD NAND發(fā)送命令及數(shù)據(jù),但因為 SPI 總線 的 MOSI 僅用于主機(jī)向從機(jī)輸出信號,所以 SD NAND返回應(yīng)答信息時不使用該信號線;

DAT0-3:在 SDIO 模式下,它們均為數(shù)據(jù)線,傳輸讀寫數(shù)據(jù), SD NAND可將 D0 拉低表 示忙狀態(tài); 在 SPI 模式下, DAT0 與 SPI 總線的 MISO 信號相連, SD NAND通過該信號線向主機(jī)發(fā)送數(shù)據(jù)或響應(yīng), DAT3 與總線的 CS 信號相連, SPI 主機(jī)通過該信號線選擇要通訊的 SD NAND。

VDD、VSS1、VSS2:電源和地信號。

③ 工作模式

SD NAND有兩種工作模式:SDIO 模式與SPI模式

在 SDIO 模式下,SD NAND共使用到 CLK、CMD、DAT[3:0] 6根信號線;SDIO 總線與多個 SD NAND連接時,可以共用 CLK 時鐘信號線,對于 CMD、DAT[3:0]信號線,每個 SD NAND都要獨(dú)立連接。SDIO 總線與 SD 卡連接方式,具體見下圖。此模式使用IO引腳多,但傳輸速度高。

SD NAND,貼片式TF卡,貼片式SD卡

在 SPI 模式下,SD NAND共使用到 CS(DAT[3])、CLK、MISO(DAT[0])、MOSI(CMD) 4根信號線;SPI 總線與多個 SD NAND連接時,除 CS 片選信號線不可共用外,其他信號均可公用。SPI 總線與 SD NAND連方式,具體見下圖。此模式使用IO引腳少,但傳輸速度慢。

SD NAND,貼片式TF卡,貼片式SD卡

④ 內(nèi)部寄存器

SD NAND總共有 8 個寄存器,用于設(shè)定或表示 SD NAND信息,寄存器描述具體見下圖。 這些寄存器只能通過對應(yīng)的命令訪問,對 SD NAND的控制操作是通過命令來執(zhí)行的, SD NAND定義了 64 個命令(部分命令不支持 SPI 模式) ,每個命令都有特殊意義,可以實現(xiàn)某一特定功能, SD NAND接收到命令后,根據(jù)命令要求對 SD NAND內(nèi)部寄存器進(jìn)行修改,程序控制中只需要發(fā)送組合命令就可以實現(xiàn) SD NAND的控制以及讀寫操作。

SD NAND,貼片式TF卡,貼片式SD卡

內(nèi)部寄存器就不展開講了,我們用FPGA實現(xiàn)讀寫測試也不需要了解那么多寄存器。

5、SD NAND的控制時序

① 命令與讀寫時序

SD NAND的通信是基于命令和數(shù)據(jù)傳輸?shù)?。通訊由一個起始位(“0”)開始,由一個停止位(“1”)終止。SD NAND通信一般是主機(jī)發(fā)送一個命令(Command),從設(shè)備在接收到命令后作出響應(yīng)(Response),如有需要會有數(shù)據(jù)(Data)傳輸參與。SD NAND的基本交互是命令與響應(yīng)交互, 見下圖:

SD NAND,貼片式TF卡,貼片式SD卡

SD NAND數(shù)據(jù)是以塊(Block)形式傳輸?shù)?,SDHC 規(guī)格數(shù)據(jù)塊長度一般為 512 字節(jié),數(shù)據(jù)可以從主機(jī)到芯片,也可以是從芯片到主機(jī)。數(shù)據(jù)塊需要 CRC 位來保證數(shù)據(jù)傳輸成功,CRC 位由 SD NAND系統(tǒng)硬件生成。單個數(shù)據(jù)塊的讀、寫時序分別見下2圖:

SD NAND,貼片式TF卡,貼片式SD卡SD NAND,貼片式TF卡,貼片式SD卡

讀寫操作都是由主機(jī)發(fā)起的,主機(jī)發(fā)送不同的命令表示讀或?qū)懀?SD NAND接收到命令后先針對命令返回響應(yīng)。在讀操作中, SD NAND返回一個數(shù)據(jù)塊,數(shù)據(jù)塊中包含 CRC校驗碼;在寫操作中,主機(jī)接收到命令響應(yīng)后需要先發(fā)送一個標(biāo)志(TOKEN)然后緊跟一個要寫入的數(shù)據(jù)塊,SD NAND接收完數(shù)據(jù)塊后會返回一個數(shù)據(jù)響應(yīng)及忙碌標(biāo)志,當(dāng) SD NAND把接收到的數(shù)據(jù)寫入到內(nèi)部存儲單元完成后,會停止發(fā)送忙碌標(biāo)志,主機(jī)確認(rèn) SD NAND空閑后,才可以發(fā)送下一個命令。

SD NAND數(shù)據(jù)傳輸支持單塊和多塊讀寫,它們分別對應(yīng)不同的操作命令, 結(jié)束多塊讀寫時需要使用命令來停止操作。

② 命令格式

SD NAND命令由主機(jī)發(fā)出,命令格式固定為 48bit,通過 CMD 信號線連續(xù)傳輸。SD NAND命令格式,具體見下圖:

SD NAND,貼片式TF卡,貼片式SD卡

起始位和終止位:命令的主體包含在起始位與終止位之間,它們都只包含一個數(shù)據(jù)位,起始位為 0,終止位為 1。

傳輸標(biāo)志:用于區(qū)分傳輸方向,該位為 1 時表示命令,方向為主機(jī)傳輸?shù)?SD NAND,該位為 0 時表示響應(yīng),方向為 SD NAND傳輸?shù)街鳈C(jī)。命令主體內(nèi)容包括命令、地址信息/參數(shù)和 CRC 校驗三個部分。

命令號:它固定占用 6bit,所以總共有 64 個命令,每個命令都有特定的用途,部分命令不適用于 SPI 總線,或不適用于 SD NAND操作,只是專門用于 MMC 卡或者 SD I/O卡。

地址/參數(shù):每個命令有 32bit 地址信息/參數(shù)用于命令附加內(nèi)容,例如,廣播命令沒有地址信息,這 32bit 用于指定參數(shù),而尋址命令這 32bit 用于指定目標(biāo) SD NAND的地址, 當(dāng)使用 SDIO 驅(qū)動多個 SD NAND時,通過地址信息區(qū)分控制不同的SD NAND,使用 SPI 總線驅(qū)動時,通過片選引腳來選擇不同的SD NAND,所以使用這些命令時地址可填充任意值。

CRC7 校驗:長度為 7bit 的校驗位用于驗證命令傳輸內(nèi)容正確性,如果發(fā)生外部干擾 導(dǎo)致傳輸數(shù)據(jù)個別位狀態(tài)改變將導(dǎo)致校準(zhǔn)失敗,也意味著命令傳輸失敗, SD NAND不執(zhí)行命令。 使用 SDIO 驅(qū)動時,命令中必須包含正確的 CRC7 校驗值;而使用 SPI 驅(qū)動時,命令中的 CRC7 校驗?zāi)J(rèn)是關(guān)閉的,即這 CRC7 校驗位中可以寫入任意值而不影響通訊,僅在發(fā)送 CMD0 命令時需要強(qiáng)制帶標(biāo)準(zhǔn)的 CRC7 校驗。

③ 命令內(nèi)容

SD NAND命令可分為標(biāo)準(zhǔn)命令 (如 CMD0)和特殊應(yīng)用命令 (如 ACMD41),其中特殊應(yīng)用命令只有在先寫入 CMD55 命令后才能被識別。按照指令類型又可將 SD NAND命令分為基本命令、數(shù)據(jù)塊寫命令、數(shù)據(jù)塊讀命令、擦除命令等 12 種(class0 ~ class11)。

本次實驗將會使用 SPI 模式實現(xiàn) SD NAND的數(shù)據(jù)讀寫操作,所以接下來只列舉 SPI 模式下常用的 SD 卡命令,具體見下表:

SD NAND,貼片式TF卡,貼片式SD卡

SPI 模式下,上述各命令中,命令 CMD0 的 CRC7 校驗為固定的 1001_010;命令CMD8 的 CRC7 校驗為固定的 1000_011;其他命令的 CRC7 校驗在 SPI 模式下無作用,賦值為 1111_111 即可。

④ 響應(yīng)格式

當(dāng) SD NAND接收到命令時,會向 SD NAND回傳命令響應(yīng)。SD NAND有 5 種類型的命令響應(yīng):R1、R1b、R2、R3、R7;SDIO NAND還支持另外兩種命令響應(yīng):R4、R5。下文只對部分響應(yīng)做介紹。

R1 響應(yīng)格式,具體見下圖:

SD NAND,貼片式TF卡,貼片式SD卡

in idle state:當(dāng)該位為 1 時,表示 SD NAND處于空閑狀態(tài)

erase reset:因為接收到無需擦除操作的命令,擦除操作被復(fù)位

illegal command:接收到一個無效的命令代碼

com crc error:接收到的上一個命令的 CRC 校驗錯誤

erase sequence error:擦除命令的控制順序錯誤

address error:讀寫的數(shù)據(jù)地址不對齊(數(shù)據(jù)地址需要按塊大小對齊)

parameter error:命令的參數(shù)錯誤

R3 響應(yīng)格式,具體見下圖:

SD NAND,貼片式TF卡,貼片式SD卡

R3 響應(yīng)包括 5 個字節(jié),首先返回的第 1 個字節(jié)內(nèi)容為 R1,剩下的其余字節(jié)為 OCR( Operation Conditions Register, 操作條件寄存器)寄存器的內(nèi)容。

R7 響應(yīng)格式,具體見下圖:

SD NAND,貼片式TF卡,貼片式SD卡

R7 響應(yīng)包括 5 個字節(jié),首先返回的第 1 個字節(jié)內(nèi)容為 R1,R7 [31:28]位為命令版本,R7[27:12]為保留位,R7[11:8]為反饋的電壓范圍,最后 1 個字節(jié)為檢查模式。

6、FPGA實現(xiàn)SD NAND讀寫

接下來編寫FPGA的Verilog代碼實現(xiàn)向SD NAND的指定扇區(qū)中寫入512個字節(jié)的數(shù)據(jù),寫完后將數(shù)據(jù)讀出,并通過指示燈的方式驗證數(shù)據(jù)是否被正確讀寫。需要說明的是,后文的讀寫操作均采用SPI模式。

6.1、設(shè)計思路

① 上電時序

SD NAND同其他的許多芯片一樣上電后需要保持一定的時間以便維持電壓穩(wěn)定,這個時間通常是74+個時鐘周期,一般實際應(yīng)用中可設(shè)置參數(shù)為74~100。只有經(jīng)過這個過渡時間后,才可以執(zhí)行后續(xù)的SD NAND初始化操作。

SD NAND,貼片式TF卡,貼片式SD卡

② 初始化時序

SD NAND在正常讀寫操作之前,必須先對SD NAND進(jìn)行初始化,使其工作在預(yù)期的工作模式。初始化流程如下:

SD NAND,貼片式TF卡,貼片式SD卡SD NAND,貼片式TF卡,貼片式SD卡

1.SD NAND完成上電后,主機(jī)FPGA先對從機(jī)SD NAND發(fā)送至少74個以上的同步時鐘,在上電同步期間,片選CS引腳和MOSI引腳必須為高電平(MOSI引腳除發(fā)送命令或數(shù)據(jù)外,其余時刻都為高電平);

2.拉低片選CS引腳,發(fā)送命令CMD0(0x40)復(fù)位SD NAND,命令發(fā)送完成后等待SD NAND返回響應(yīng)數(shù)據(jù);

3.SD NAND返回響應(yīng)數(shù)據(jù)后,先等待8個時鐘周期再拉高片選CS信號,此時判斷返回的響應(yīng)數(shù)據(jù)。如果返回的數(shù)據(jù)為復(fù)位完成信號0x01,在接收返回信息期間片選CS為低電平, 此時SD NAND進(jìn)入SPI模式,并開始進(jìn)行下一步,如果返回的值為其它值,則重新執(zhí)行第2步;

4.拉低片選CS引腳,發(fā)送命令CMD8(0x48)查詢SD NAND的版本號,只有SD2.0版本才支持此命令,命令發(fā)送完成后等待SD NAND返回響應(yīng)數(shù)據(jù);

5.SD NAND返回響應(yīng)數(shù)據(jù)后,先等待8個時鐘周期再拉高片選CS信號,此時判斷返回的響應(yīng)數(shù)據(jù)。如果返回的電壓范圍為4’b0001即2.7V~3.6V,說明2.0版本,進(jìn)行下一步,否則重新執(zhí)行第4步;

6.拉低片選CS引腳,發(fā)送命令CMD55(0x77)告訴SD NAND下一次發(fā)送的命令是應(yīng)用相關(guān)命令,命令發(fā)送完成后等待SD NAND返回響應(yīng)數(shù)據(jù);

7.SD NAND返回響應(yīng)數(shù)據(jù)后,先等待8個時鐘周期再拉高片選CS信號,此時判斷返回的響應(yīng)數(shù)據(jù)。如果返回的數(shù)據(jù)為空閑信號0x01,開始進(jìn)行下一步,否則重新執(zhí)行第6步。

8.拉低片選CS引腳,發(fā)送命令A(yù)CMD41(0x69)查詢SD NAND是否初始化完成,命令發(fā)送完成后等待SD NAND返回響應(yīng)數(shù)據(jù);

9.SD NAND返回響應(yīng)數(shù)據(jù)后,先等待8個時鐘周期再拉高片選CS信號,此時判斷返回的響應(yīng)數(shù)據(jù)。如果返回的數(shù)據(jù)為0x00,此時初始化完成,否則重新執(zhí)行第6步。

③ 寫操作時序

至此,SD NAND完成了復(fù)位以及初始化操作,進(jìn)入到SPI模式的讀寫操作。SD NAND讀寫一次的數(shù)據(jù)量必須為512字節(jié)的整數(shù)倍,即對SD NAND讀寫操作的最少數(shù)據(jù)量為512 個字節(jié)。我們可以通過命令CMD16來配置單次讀寫操作的數(shù)據(jù)長度,以使每次讀寫的數(shù)據(jù)量為 (n*512)個字節(jié)(n≥1),本次SD NAND的讀寫操作使用默認(rèn)配置,即單次讀寫操作的數(shù)據(jù)量為512個字節(jié)。

SD NAND的寫操作時序圖如下圖所示:

SD NAND,貼片式TF卡,貼片式SD卡

拉低片選信號 CS_N,向 SD NAND寫入命令 CMD24,命令號為 0x58,攜帶參數(shù)為 4字節(jié)的 SD NAND寫扇區(qū)地址,CRC 校驗字節(jié)未使用直接寫入 0xFF,命令發(fā)送完成后 等待 SD NAND返回響應(yīng)數(shù)據(jù)

若 SD NAND返回正確響應(yīng)數(shù)據(jù) R1 為 0x00,等待 8 個時鐘周期,向 SD NAND寫入令牌0xFE,緊隨其后寫入 512 個字節(jié)的數(shù)據(jù)

數(shù)據(jù)發(fā)送完成后,再向 SD NAND寫入 2 個字節(jié)的 CRC 校驗字節(jié)。SPI 模式下不對數(shù)據(jù)進(jìn)行 CRC 校驗,直接寫入兩個字節(jié)的 0xFF

校驗數(shù)據(jù)發(fā)送完成后, SD NAND會有響應(yīng)數(shù)據(jù)返回,隨后 SD NAND將 Miso 信號拉低進(jìn)入寫忙狀態(tài)

MISO 信號再次拉高后 SD NAND退出寫忙狀態(tài),等待 8 個時鐘周期后拉高片選信號,SD NAND數(shù)據(jù)寫操作完成,可以執(zhí)行其它操作

④ 讀操作時序

SD NAND的讀操作時序圖如下圖所示:

SD NAND,貼片式TF卡,貼片式SD卡

1.拉低片選信號 CS_N, 向 SD NAND寫入命令 CMD17,命令號為 0x51,攜帶參數(shù)為 4字節(jié)的 SD NAND讀扇區(qū)地址,CRC 校驗字節(jié)未使用直接寫入 0xFF,命令發(fā)送完成后 等待 SD NAND返回響應(yīng)數(shù)據(jù)

2.若 SD NAND返回正確響應(yīng)數(shù)據(jù) R1 為 0x00,以 SD NAND返回的數(shù)據(jù)頭 0xFE 為標(biāo)志,接收自 SD NAND讀出的 512 字節(jié)數(shù)據(jù)和 2 字節(jié)的 CRC 校驗字節(jié)

3.解析到數(shù)據(jù)頭 0xFE 后,接下來接收 SD NAND返回的 512 個字節(jié)的數(shù)據(jù)

4.數(shù)據(jù)解析完成后,接下來接收2個字節(jié)的 CRC 校驗值。 由于 SPI 模式下不對數(shù)據(jù)進(jìn)行 CRC 校驗,可直接忽略這兩個字節(jié)

5.CRC 校驗字節(jié)接收完畢,等待 8 個時鐘周期,拉高片選信號 CS_N,一次數(shù)據(jù)讀操作完成

⑤ 程序設(shè)計

通過前面介紹的SD NAND初始化、寫操作以及讀操作可知,SD NAND的這3個操作是相互獨(dú)立且不能同時進(jìn)行的,因此我們可以將SD NAND的初始化、寫操作以及讀操作分別劃分為3個獨(dú)立的模塊,最后將這三個模塊例化在SD NAND的控制器模塊中,便于在其它工程項目中使用。

下圖是系統(tǒng)框圖,PLL時鐘模塊(PLL)為各個模塊提供驅(qū)動時鐘,SD NAND測試數(shù)據(jù)產(chǎn)生模塊產(chǎn)生測試數(shù)據(jù)寫入SD NAND,寫完后從SD NAND中讀出數(shù)據(jù),最終讀寫測試結(jié)果由LED顯示模塊通過控制LED燈的顯示狀態(tài)來指示。

SD NAND,貼片式TF卡,貼片式SD卡

頂層模塊:頂層模塊完成了對其它四個模塊的例化,SD NAND測試數(shù)據(jù)產(chǎn)生模塊產(chǎn)生的開始寫入信號及數(shù)據(jù)連接至SD NAND控制器模塊,數(shù)據(jù)寫完后從SD NAND控制器中讀出數(shù)據(jù), 并驗證數(shù)據(jù)的正確性,將驗證的結(jié)果連接至LED顯示模塊。

PLL時鐘模塊:PLL時鐘模塊通過調(diào)用鎖相環(huán)(PLL)IP核來實現(xiàn),總共輸出2個時鐘,頻率都是50Mhz,但兩個時鐘相位相差180度。我們知道,SD卡的SPI通信模式為CPOL=1, CPHA=1;即SPI_CLK在空閑時為高電平,數(shù)據(jù)發(fā)送是在時鐘的第一個邊沿,也就是SPI_CLK由高 電平到低電平的跳變,所以數(shù)據(jù)采集是在上升沿,數(shù)據(jù)發(fā)送是在下降沿。為了在程序代碼中統(tǒng) 一使用上升沿,我們使用兩個相位相差180度的時鐘來對SD NAND進(jìn)行操作。

SD NAND測試數(shù)據(jù)產(chǎn)生模塊:SD NAND測試數(shù)據(jù)產(chǎn)生模塊產(chǎn)生的開始寫入信號和數(shù)據(jù)寫入SD NAND控制器模塊中,數(shù)據(jù)寫完后從SD NAND控制器中讀出數(shù)據(jù),并驗證數(shù)據(jù)的正確性,將驗證的結(jié)果發(fā)送給LED顯示模塊。

SD NAND控制器模塊:SD NAND控制器模塊例化了SD NAND初始化模塊、 SD NAND寫數(shù)據(jù)模塊和SD NAND讀數(shù)據(jù)模塊。SD NAND初始化模塊完成對SD NAND的上電初始化操作;SD NAND寫數(shù)據(jù)模塊完成對SD NAND的寫操作;SD NAND讀數(shù)據(jù)模塊完成對SD NAND的讀操作。 由于這三個模塊都操作了SD NAND的引腳信號,且這三個模塊在同一時間內(nèi)不會同時操作,所以此模塊實現(xiàn)了對其它三個模塊的例化以及選擇SD NAND的引腳連接至其中某一個模塊。

LED顯示模塊:LED顯示模塊將SD NAND測試數(shù)據(jù)產(chǎn)生模塊輸出的驗證結(jié)果值, 通過控制LED燈的顯示狀態(tài)來指示。

SD NAND控制器部分代碼如下:

module sd_ctrl_top(

input clk_ref , //時鐘信號

input clk_ref_180deg, //時鐘信號,與clk_ref相位相差180度

input rst_n , //復(fù)位信號,低電平有效

//SD卡接口

input sd_miso , //SD卡SPI串行輸入數(shù)據(jù)信號

output sd_clk , //SD卡SPI時鐘信號

output reg sd_cs , //SD卡SPI片選信號

output reg sd_mosi , //SD卡SPI串行輸出數(shù)據(jù)信號

//用戶寫SD卡接口

input wr_start_en , //開始寫SD卡數(shù)據(jù)信號

input [31:0] wr_sec_addr , //寫數(shù)據(jù)扇區(qū)地址

input [15:0] wr_data , //寫數(shù)據(jù)

output wr_busy , //寫數(shù)據(jù)忙信號

output wr_req , //寫數(shù)據(jù)請求信號

//用戶讀SD卡接口

input rd_start_en , //開始讀SD卡數(shù)據(jù)信號

input [31:0] rd_sec_addr , //讀數(shù)據(jù)扇區(qū)地址

output rd_busy , //讀數(shù)據(jù)忙信號

output rd_val_en , //讀數(shù)據(jù)有效信號

output [15:0] rd_val_data , //讀數(shù)據(jù)

output sd_init_done //SD卡初始化完成信號

);

//wire define

wire init_sd_clk ; //初始化SD卡時的低速時鐘

wire init_sd_cs ; //初始化模塊SD片選信號

wire init_sd_mosi ; //初始化模塊SD數(shù)據(jù)輸出信號

wire wr_sd_cs ; //寫數(shù)據(jù)模塊SD片選信號

wire wr_sd_mosi ; //寫數(shù)據(jù)模塊SD數(shù)據(jù)輸出信號

wire rd_sd_cs ; //讀數(shù)據(jù)模塊SD片選信號

wire rd_sd_mosi ; //讀數(shù)據(jù)模塊SD數(shù)據(jù)輸出信號

//*****************************************************

//** main code

//*****************************************************

//SD卡的SPI_CLK

assign sd_clk = (sd_init_done==1'b0) ? init_sd_clk : clk_ref_180deg;

//SD卡接口信號選擇

always @(*) begin

//SD卡初始化完成之前,端口信號和初始化模塊信號相連

if(sd_init_done == 1'b0) begin

sd_cs = init_sd_cs;

sd_mosi = init_sd_mosi;

end

else if(wr_busy) begin

sd_cs = wr_sd_cs;

sd_mosi = wr_sd_mosi;

end

else if(rd_busy) begin

sd_cs = rd_sd_cs;

sd_mosi = rd_sd_mosi;

end

else begin

sd_cs = 1'b1;

sd_mosi = 1'b1;

end

end

//SD卡初始化

sd_init u_sd_init(

.clk_ref (clk_ref),

.rst_n (rst_n),

.sd_miso (sd_miso),

.sd_clk (init_sd_clk),

.sd_cs (init_sd_cs),

.sd_mosi (init_sd_mosi),

.sd_init_done (sd_init_done)

);

//SD卡寫數(shù)據(jù)

sd_write u_sd_write(

.clk_ref (clk_ref),

.clk_ref_180deg (clk_ref_180deg),

.rst_n (rst_n),

.sd_miso (sd_miso),

.sd_cs (wr_sd_cs),

.sd_mosi (wr_sd_mosi),

//SD卡初始化完成之后響應(yīng)寫操作

.wr_start_en (wr_start_en & sd_init_done),

.wr_sec_addr (wr_sec_addr),

.wr_data (wr_data),

.wr_busy (wr_busy),

.wr_req (wr_req)

);

//SD卡讀數(shù)據(jù)

sd_read u_sd_read(

.clk_ref (clk_ref),

.clk_ref_180deg (clk_ref_180deg),

.rst_n (rst_n),

.sd_miso (sd_miso),

.sd_cs (rd_sd_cs),

.sd_mosi (rd_sd_mosi),

//SD卡初始化完成之后響應(yīng)讀操作

.rd_start_en (rd_start_en & sd_init_done),

.rd_sec_addr (rd_sec_addr),

.rd_busy (rd_busy),

.rd_val_en (rd_val_en),

.rd_val_data (rd_val_data)

);

endmodule

SD NAND控制器模塊輸出的sd_init_done(SD NAND初始化完成信號)連接至SD NAND測試數(shù)據(jù)產(chǎn)生模塊,只有在SD NAND初始化完成之后(sd_init_done為高電平),才能對SD NAND進(jìn)行讀寫測試。SD NAND控制器模塊將SD NAND的初始化以及讀寫操作封裝成方便用戶調(diào)用的接口,SD NAND測試數(shù)據(jù)產(chǎn)生模塊只需對SD NAND控制器模塊的用戶接口進(jìn)行操作即可完成對SD NAND的讀寫操作。


6.2、仿真結(jié)果

一般的測試中,我們都需要先進(jìn)行仿真來觀察時序等測試行為。此次實驗由于找不到好的SD NAND的Verilog模型,所以仿真測試略。

6.3、實驗結(jié)果

上文已經(jīng)說了常用的相機(jī)中的TF卡與工業(yè)級的SD NAND(貼片式T卡)的區(qū)別,所以本次實驗我選用的是深圳雷龍公司的一款SD NAND產(chǎn)品----CSNP32GCR01-AOW。

這是一家專業(yè)做存儲產(chǎn)品的公司,NAND Flash是其主要產(chǎn)品。 該公司專注NAND Flash設(shè)計研發(fā)13年,在這一塊可以說是相當(dāng)專業(yè)。如果你對NAND Flash仍有疑惑的問題,或者你想在你的設(shè)計中使用NAND Flash產(chǎn)品,都可以直接聯(lián)系:深圳市雷龍發(fā)展有限公司


實驗結(jié)果其實沒什么好看的,LED燈常量表明說明從SD NAND讀出的512個字節(jié)(256個16位數(shù)據(jù)) 與寫入的數(shù)據(jù)相同,SD NAND讀寫測試程序下載驗證成功。

PS:有個小細(xì)節(jié)可以說下,雷龍公司的SD NAND開發(fā)板還是蠻用心的,封裝都是標(biāo)準(zhǔn)的Micro SD的封裝,只要你的FPGA開發(fā)板上有SD卡座,就可以直接插上使用了,即插即用十分方便,有心了。

poYBAGOcMxWAFbYpAB7b9KQiN9U897.png

【本文轉(zhuǎn)載自CSDN,作者:孤獨(dú)的單刀】


親愛的卡友們,歡迎光臨雷龍官網(wǎng),如果看完文章之后還是有疑惑或不懂的地方,請聯(lián)系我們,自己去理解或猜答案是件很累的事,請把最麻煩的事情交給我們來處理,術(shù)業(yè)有專攻,聞道有先后,深圳市雷龍發(fā)展專注存儲行業(yè)13年,專業(yè)提供小容量存儲解決方案。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1645

    文章

    22040

    瀏覽量

    618186
  • NAND
    +關(guān)注

    關(guān)注

    16

    文章

    1722

    瀏覽量

    138113
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1678

    瀏覽量

    151752
  • SD卡
    +關(guān)注

    關(guān)注

    2

    文章

    578

    瀏覽量

    65654
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    NAND FlashSD NAND的存儲扇區(qū)架構(gòu)差異

    NAND Flash?和?SDSD NAND)的存儲扇區(qū)分配表都是用于管理存儲設(shè)備中扇區(qū)的分
    的頭像 發(fā)表于 03-13 15:20 ?1124次閱讀
    <b class='flag-5'>NAND</b> <b class='flag-5'>Flash</b>與<b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>的存儲扇區(qū)架構(gòu)差異

    Nand flashSDSD NAND)存儲扇區(qū)分配表異同

    FlashSDSD NAND)的存儲扇區(qū)分配表都是用于管理存儲設(shè)備中扇區(qū)的分配信息。它們記錄了哪些扇區(qū)已被使用、哪些是空閑的,以
    發(fā)表于 03-13 10:45

    [上手體驗]雷龍SD NAND:比TF更小更耐用

    和SPI FLASH以及 NAND FLASH,基本沒聽說過SD NAND。查閱了雷龍官方介紹),得知S
    發(fā)表于 03-08 14:28

    CS創(chuàng)世SD NAND【貼片式sd】的測試使用說明

    今天收到了來自深圳市雷龍發(fā)展有限公司寄來的存儲,它是一款自帶壞塊管理的貼片式NAND Flash,適用于嵌入式系統(tǒng)。SD NAND尺寸小巧
    的頭像 發(fā)表于 02-17 15:45 ?425次閱讀
    CS創(chuàng)世<b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>【貼片式<b class='flag-5'>sd</b><b class='flag-5'>卡</b>】的測試使用說明

    雷龍SD NAND測試報告

    。(具體看底部視頻)如果讀卡器是3.0的,估計讀寫速度應(yīng)該能大大提升。手頭沒有3.0讀卡器,所以測試暫時無法實現(xiàn)。測試板也沒有2.54插針,所以也無法使用單片機(jī)進(jìn)行讀寫測試。哎,以后再試了??傊?,對于雷龍
    發(fā)表于 02-08 14:12

    雷龍SD NAND試用

    了解以便測試與使用。 芯片不用寫驅(qū)動程序自帶壞塊管理的NAND Flash(貼片式TF),尺寸小巧,簡單易用,兼容性強(qiáng),穩(wěn)定可靠,固件可定制,LGA-8封裝,標(biāo)準(zhǔn)SDIO接口,兼容SPI/S
    發(fā)表于 01-19 13:26

    SD NAND、SPI NAND 和 Raw NAND 的定義與比較

    問題,再也不用為SD的接觸穩(wěn)定性操心! SD nandSD 、SPI Nor
    的頭像 發(fā)表于 01-15 18:16 ?777次閱讀
    <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>、SPI <b class='flag-5'>NAND</b> 和 Raw <b class='flag-5'>NAND</b> 的定義與比較

    SD NAND、SPI NAND 和 Raw NAND 的定義與比較

    問題,再也不用為SD的接觸穩(wěn)定性操心!   SD nandSD 、SPI Nor
    發(fā)表于 01-15 18:15

    關(guān)于SD NAND 的概述

    Flash驅(qū)動,降低了工程師的開發(fā)難度。   減少CPU負(fù)荷:將針對NAND Flash的操作交由SD NAND處理,減輕了CPU的負(fù)擔(dān),提
    發(fā)表于 12-06 11:22

    SD NAND 概述

    SD NAND是一種小型、可表面貼裝的存儲解決方案,適用于各種嵌入式系統(tǒng)和便攜式設(shè)備。SD NAND技術(shù)是近年來在存儲領(lǐng)域內(nèi)的一項創(chuàng)新,它結(jié)合了傳統(tǒng)
    的頭像 發(fā)表于 12-06 11:21 ?713次閱讀

    SD NAND技術(shù)簡介

    SD NAND是一種基于NAND Flash技術(shù)的嵌入式存儲解決方案,具備SD協(xié)議兼容性。它結(jié)
    的頭像 發(fā)表于 12-05 15:32 ?687次閱讀
    <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>技術(shù)簡介

    雷龍CS SD NAND:貼片式TF體驗與性能測試

    轉(zhuǎn)接板并接入電腦后,可以直接識別到U盤設(shè)備,容量為7.2GB。說明CS SD NAND能夠完美的兼容SD,可以直接進(jìn)行替代。 復(fù)制一些大文件至貼片式的TF
    發(fā)表于 11-26 10:04

    一文帶你了解什么是SD NAND存儲芯片

    實際應(yīng)用中很常見,下圖是SD簡單化的內(nèi)部結(jié)構(gòu)。   SD存儲單元是使用的FLASH,FLASH
    發(fā)表于 11-13 15:20

    Arduino程序:實現(xiàn)SD NAND(貼片sd)的讀寫功能

      單片機(jī)上傳程序的時候,有時候感覺它的rom和 ram有時直接限制了他的使用,之前使用eeprom,和sd模塊. []()   然后最近看到了出的SD NAND 就是下面這個
    發(fā)表于 11-07 17:45

    國產(chǎn)安路FPGA SD NAND FLASH 初步描述

    說起SD NAND FLASH常被聯(lián)想到SD,SD NAN
    發(fā)表于 10-16 18:12