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

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

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

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

基于Zynq FPGA對雷龍SD NAND的測試

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

掃碼添加小助手

加入工程師交流群

文章目錄

一、SD NAND特征

1.1 SD卡簡介

1.2 SD卡Block圖

二、SD卡樣片

三、Zynq測試平臺搭建

3.1 測試流程

3.2 SOC搭建

四、軟件搭建

五、測試結(jié)果

六、總結(jié)

一、SD NAND特征

1.1 SD卡簡介

??雷龍的SD NAND有很多型號,在測試中使用的是CSNP4GCR01-AWM與CSNP32GCR01-AOW。芯片是基于NAND FLASH和 SD控制器實現(xiàn)的SD卡。具有強大的壞塊管理和糾錯功能,并且在意外掉電的情況下同樣能保證數(shù)據(jù)的安全。

??其特點如下:

接口支持SD2.0 2線或4線;

電壓支持:2.7V-3.6V;

默認模式:可變時鐘速率0 - 25MHz,高達12.5 MB/s的接口速度(使用4條并行數(shù)據(jù)線)

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

工作溫度:-40°C ~ +85°C

存儲溫度:-55°C ~ +125°C

待機電流小于250uA

修正內(nèi)存字段錯誤;

內(nèi)容保護機制——符合SDMI最高安全標準

SDNAND密碼保護(CMD42 - LOCK_UNLOCK)

采用機械開關(guān)的寫保護功能

內(nèi)置寫保護功能(永久和臨時)

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

舒適擦除機制

??該SD卡支持SDIO讀寫和SPI讀寫,最高讀寫速度可達25MB/s,實際讀寫速度要結(jié)合MCU和接口情況實測獲得。通常在簡單嵌入式系統(tǒng)并對讀寫速度要求不高的情況下,會使用SPI協(xié)議進行讀寫。但不管使用SDIO還是SPI都需要符合相關(guān)的協(xié)議規(guī)范,才能建立相應(yīng)的文件系統(tǒng);

1.2 SD卡Block圖

get?code=M2U4NTY5ODk0YTZkMjFkOWI3MWVlZmU4OTM3M2VjNTcsMTcwMzIzNzI1Mzg3NQ==

?該SD卡封裝為LGA-8;引腳分配與定義如下;在這里插入圖片描述:

get?code=YmQxZTRmYjU0ZGI5OTNhOTVlZDQzOWYxNDQwMmUyM2EsMTcwMzIzNzI1Mzg3NQ==

二、SD卡樣片

??與樣片同時寄來的還有轉(zhuǎn)接板,轉(zhuǎn)接板將LGA-8封裝的芯片轉(zhuǎn)接至SD卡封裝,這樣只需將轉(zhuǎn)接板插入SD卡卡槽即可使用。

在這里插入圖片描述:

get?code=ZmQ3NzUyZGU3MDdmZmExNTQ4ODkyN2U0NzEzNmNjMDEsMTcwMzIzNzI1Mzg3NQ==

三、Zynq測試平臺搭建

  • ??測試平臺為 Xilinx 的Zynq 7020 FPGA芯片;
  • ??板卡:Digilent Zybo Z7
  • ??Vivado版本:2018.3
  • ??文件系統(tǒng):FATFS
  • ??SD卡接口:SD2.0

3.1 測試流程

??本次測試主要針對4G和32G兩個不同容量的SD卡,在Zynq FPGA上搭建SD卡讀寫回路,從而對SD卡讀寫速度進行測試,并檢驗讀寫一致性;

測試流程:

??進入測試程序前,首先會對SD卡初始化并初始化建立FATFS文件系統(tǒng),隨后進入測試SD卡測試程序,在測試程序中,會寫入一定大小的文件,然后對寫入文件的時間進行測量,得到寫入時間;然后再將寫入的文件讀出,測量獲得讀出時間,并將讀出數(shù)據(jù)與寫入數(shù)據(jù)相比較,檢測是否讀寫出錯。

??通過寫入時間、讀出時間可計算得到寫入速度、讀出速度;將以上過程重復(fù)100次并打印報告。

get?code=NGM4YzJlOGY1ZTdmODFjZjQxMDFjNDkxNGFjYjA2NDcsMTcwMzIzNzI1Mzg3NQ==

3.2 SOC搭建

??硬件搭建框圖如下,我們在本次系統(tǒng)中使用PS端的SDIO接口來驅(qū)動SD NAND芯片,并通過UART向PC打印報告;

??PL端的硬件搭建也很簡單,只需一個Timer定時器來做時間測量;

get?code=NTNhNTBkNzkxMzE2MGRhMGNkYTczNjFkYTVjMGUxZjgsMTcwMzIzNzI1Mzg3NQ==

我們直接使用Zybo板卡文件創(chuàng)建一個工程,工程會將Zybo具有的硬件資源配置好;

get?code=MzY0MWQ4ZjBlNTY2NWUxNTA4OGIwOWExM2RjYTg5YTMsMTcwMzIzNzI1Mzg3Ng==

首先點擊setting->IP->Repository->+;添加Timer IP核的路徑,Timer IP核會在工程中給出;

get?code=Yjk1ZDk5ZGJiNWMyMmIyZjdiMDE4YmU0MWE2N2FiNGMsMTcwMzIzNzI1Mzg3Ng==

?點擊Create Block Design創(chuàng)建BD工程

get?code=YmNmZGY0OGY4YTBlYTkwZjE0ODE3NzI2ZjUzYWM3ODEsMTcwMzIzNzI1Mzg3Ng==

?在創(chuàng)建的過程中添加Zynq 內(nèi)核;

get?code=ZjkzYzQ0YjM4OTJmMjcxMGZkMTJhYWE0MDMyNDY0NzcsMTcwMzIzNzI1Mzg3Ng==

由于我們使用了板卡文件,所以內(nèi)核IP是配置好的,我們只需稍作修改即可,如果是其他板卡,則需要自行配置DDR等配置;

??雙擊內(nèi)核IP,點擊Clock Configuration->PL Fabric Clocks,將FCLK_CLK0的時鐘頻率修改為100Mhz

get?code=NTg0ZjhkMjEwOGMxZmI1NTMwY2E4Njc5NTM0MDZiYmYsMTcwMzIzNzI1Mzg3Ng==

?添加TimerA IP;

get?code=NGJlZTQ3NjFkZTExMDc1NjI0OGZlY2U2YTE3MjllNGEsMTcwMzIzNzI1Mzg3Ng==

依次點擊上方的自動設(shè)計,完成SOC搭建;

get?code=NDQ5MzRhMDljYjk1YTA4OTlkZGM5MjkxMDRiMmEyNzQsMTcwMzIzNzI1Mzg3Ng==

?點擊BD設(shè)計,并創(chuàng)建頂層文件

get?code=YWVkNzhjMzJjYjUzZTNhNTNiYTUzZTU5MjdjNjljMmQsMTcwMzIzNzI1Mzg3Ng==

生成比特流文件;

get?code=ODVjNDU5NDdjYWEyNzEwZTFiNmJlNmYzYWM0ZDcwZWIsMTcwMzIzNzI1Mzg3Ng==

在生成比特流文件后,將其導(dǎo)入SDK;

??點擊Export->Export Hardware,導(dǎo)出硬件;然后點擊Launch SDK打開SDK進行軟件設(shè)計;

get?code=M2Y0YmE2NjhiODE4NjUwMzA5NjBlM2M5MTlhOGEwNzcsMTcwMzIzNzI1Mzg3Ng==get?code=YzQyM2RjMWY1ZjZkYWJkMDQzMmI0NzQ2MDdiYjYzOTAsMTcwMzIzNzI1Mzg3Ng==

四、軟件搭建

??在SDK中新建一個空白工程;

??點擊file -> new -> Application project;

get?code=OTFiMjQxZmRmOTZiY2ZhMjRjYzA3MTUwNjM4ZDkzMzQsMTcwMzIzNzI1Mzg3Ng==

在新建的過程中創(chuàng)建一個main.c文件,并在里面編寫測試程序如下:

??在每次讀寫開始前,通過TimerA0_start()函數(shù)開始計時,在讀寫結(jié)束后可以通過TimerA0_stop()結(jié)束計時,從而測得消耗時間。

??相應(yīng)的Timer驅(qū)動函數(shù)在user/TimerA_user.c中定義;

  1. #include "xparameters.h" /* SDK generated parameters */
  2. #include "xsdps.h" /* SD device driver */
  3. #include "xil_printf.h"
  4. #include "ff.h"
  5. #include "xil_cache.h"
  6. #include "xplatform_info.h"
  7. #include "time.h"
  8. #include "../user/headfile.h"
  9. #define PACK_LEN 32764
  10. static FIL fil; /* File object */
  11. static FATFS fatfs;
  12. static char FileName[32] = "Test.txt";
  13. static char *SD_File;
  14. char DestinationAddress[PACK_LEN] ;
  15. char txt[1024];
  16. char test_buffer[PACK_LEN];
  17. void TimerA0_init()
  18. {
  19. TimerA_reset(TimerA0);//reset timerA device
  20. TimerA_Set_Clock_Division(TimerA0,100);//divide clock as 100000000/100 = 1Mhz
  21. TimerA_Stop_Counter(TimerA0);//stop timerA
  22. }
  23. void TimerA0_start()
  24. {
  25. TimerA_SetAs_CONTINUS_Mode(TimerA0);
  26. }
  27. void TimerA0_stop()
  28. {
  29. TimerA_Stop_Counter(TimerA0);
  30. }
  31. uint32 SDCard_test()
  32. {
  33. uint8 Res;
  34. uint32 NumBytesRead;
  35. uint32 NumBytesWritten;
  36. uint32 BuffCnt;
  37. uint8 work[FF_MAX_SS];
  38. uint32 take_time=0;
  39. uint32 speed = 0;
  40. uint32 test_time = 0;
  41. uint32 w_t=0;
  42. uint32 r_t=0;
  43. float wsum = 0;
  44. float rsum = 0;
  45. TCHAR *Path = "0:/";
  46. for(int i=0;i
  47. {
  48. test_buffer[i] = 'a';
  49. }
  50. Res = f_mount(&fatfs, Path, 0);
  51. if (Res != FR_OK) {
  52. return XST_FAILURE;
  53. }
  54. Res = f_mkfs(Path, FM_FAT32, 0, work, sizeof work);
  55. if (Res != FR_OK) {
  56. return XST_FAILURE;
  57. }
  58. SD_File = (char *)FileName;
  59. Res = f_open(&fil, SD_File, FA_CREATE_ALWAYS | FA_WRITE | FA_READ);
  60. if (Res) {
  61. return XST_FAILURE;
  62. }
  63. Res = f_lseek(&fil, 0);
  64. if (Res) {
  65. return XST_FAILURE;
  66. }
  67. while(1)
  68. {
  69. TimerA_reset(TimerA0);
  70. TimerA0_start();
  71. Res = f_write(&fil, (const void*)test_buffer, PACK_LEN,
  72. &NumBytesWritten);
  73. TimerA0_stop();
  74. take_time = TimerA_Read_Counter_Register(TimerA0);
  75. w_t+=take_time;
  76. xil_printf("--------------------------------\n");
  77. xil_printf("take time:%d us\n",take_time);
  78. speed = PACK_LEN*(1000000/((float)(take_time)));
  79. sprintf(txt,"write speed:%.2f MB/s\n",(float)(speed)/1024/1024);
  80. wsum = wsum+speed;
  81. xil_printf(txt);
  82. xil_printf("--------------------------------\n");
  83. if (Res) {
  84. return XST_FAILURE;
  85. }
  86. Res = f_lseek(&fil, 0);
  87. if (Res) {
  88. return XST_FAILURE;
  89. }
  90. TimerA_reset(TimerA0);
  91. TimerA0_start();
  92. Res = f_read(&fil, (void*)DestinationAddress, PACK_LEN,
  93. &NumBytesRead);
  94. TimerA0_stop();
  95. take_time = TimerA_Read_Counter_Register(TimerA0);
  96. r_t+=take_time;
  97. xil_printf("--------------------------------\n");
  98. xil_printf("take time:%d us\n",take_time);
  99. speed = PACK_LEN*(1000000/((float)(take_time)));
  100. sprintf(txt,"read speed:%.2f MB/s\n",(float)(speed)/1024/1024);
  101. rsum = rsum+speed;
  102. xil_printf(txt);
  103. xil_printf("--------------------------------\n");
  104. if (Res) {
  105. return XST_FAILURE;
  106. }
  107. for(BuffCnt = 0; BuffCnt < PACK_LEN; BuffCnt++){
  108. if(test_buffer[BuffCnt] != DestinationAddress[BuffCnt]){
  109. xil_printf("%dno",BuffCnt);
  110. return XST_FAILURE;
  111. }
  112. }
  113. xil_printf("test num:%d data check right!\n",test_time+1);
  114. test_time++;
  115. if(test_time==100)
  116. {
  117. sprintf(txt,"Total write: %.2f KB,Take time:%.2f ms, Write speed:%.2f MB/s\n",PACK_LEN*100/1024.0,w_t/100.0/1000.0,wsum/100/1024/1024);
  118. xil_printf(txt);
  119. sprintf(txt,"Total read: %.2f KB,Take time:%.2f ms, Read speed:%.2f MB/s\n",PACK_LEN*100/1024.0,r_t/100.0/1000.0,rsum/100/1024/1024);
  120. xil_printf(txt);
  121. Res = f_close(&fil);
  122. if (Res) {
  123. return XST_FAILURE;
  124. }
  125. return 0;
  126. }
  127. }
  128. }
  129. int main(void)
  130. {
  131. TimerA0_init();
  132. SDCard_test();
  133. xil_printf("finish");
  134. return 0;
  135. }

五、測試結(jié)果

??經(jīng)測試,兩種型號的芯片讀寫速度如下圖表所示。

??其SD NAND的讀寫速度隨著讀寫數(shù)據(jù)量的增加而增加,并且讀速率大于寫速率,這符合SD卡的特性;

??對比兩種型號SD NAND芯片,發(fā)現(xiàn)CSNP32GCR01-AOW型號具有更高的讀寫速度;

get?code=YmIxMzU2YjU2MDJjMWVmYzViMmVmYzczNjlmNmU5ODYsMTcwMzIzNzI1Mzg3Ng==get?code=NGNlMzk5Zjc5NTEzYWM5MzM4N2QxZGNmNWRkMjEzNjYsMTcwMzIzNzI1Mzg3Ng==get?code=NjJmYWI2MDE4YTFhYWY3YmY2ZjY0MjA2Yzc5MWIyYmUsMTcwMzIzNzI1Mzg3Ng==

六、總結(jié)

??本來打算拿這些樣片去試試信息安全領(lǐng)域是否有所應(yīng)用,但發(fā)現(xiàn)其似乎內(nèi)置了復(fù)位或初始化,導(dǎo)致無法提取上電時的不確定值,故無法提取該SD NAND的物理不可克隆特性,所以這方面的測試無法進行;

??對于芯片正常讀寫的測試結(jié)果,還是很讓人滿意的,芯片的價格也很合理。并且LGA-8封裝更適合無卡槽的嵌入式開發(fā)板設(shè)計,在一定的應(yīng)用領(lǐng)域有著簡化硬件設(shè)計、減小硬件面積的功能。

————————————————

【本文轉(zhuǎn)載自CSDN,作者:PPRAM】

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

    關(guān)注

    1646

    文章

    22054

    瀏覽量

    618818
  • 測試
    +關(guān)注

    關(guān)注

    8

    文章

    5708

    瀏覽量

    128929
  • NAND
    +關(guān)注

    關(guān)注

    16

    文章

    1722

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    SD卡—雷龍 SD NAND

    一、SD卡介紹 1.基本介紹 本質(zhì):nand flash + 控制芯片 1.SD卡 ,Secure Digital Card,稱為安全數(shù)字卡(安全數(shù)碼卡)。SD卡系列主要有三種:
    的頭像 發(fā)表于 07-21 17:59 ?131次閱讀
    <b class='flag-5'>SD</b>卡—<b class='flag-5'>雷龍</b> <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>

    【嵌入式開發(fā)】SD卡—雷龍 SD NAND

    、R7。 R1響應(yīng)格式: 2.SD卡操作步驟介紹 SPI模式下 SD卡初始化 SD卡單塊數(shù)據(jù)塊讀取流程 五、雷龍 SD
    發(fā)表于 07-21 17:56

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

    前幾天,有幸得到了深圳雷龍發(fā)展公司送來的SD NAND樣品。他們給了兩顆32Gbit的SD NAND以及一塊轉(zhuǎn)接板,并且已經(jīng)將
    發(fā)表于 03-08 14:28

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

    今天收到了來自深圳市雷龍發(fā)展有限公司寄來的存儲卡,它是一款自帶壞塊管理的貼片式NAND Flash,適用于嵌入式系統(tǒng)。SD NAND尺寸小巧,支持SPI/
    的頭像 發(fā)表于 02-17 15:45 ?445次閱讀
    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>使用說明

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

      今天收到了來自深圳市雷龍發(fā)展有限公司寄來的存儲卡,它是一款自帶壞塊管理的貼片式NAND Flash,適用于嵌入式系統(tǒng)。SD NAND尺寸小巧,支持SPI/
    發(fā)表于 02-12 15:05

    雷龍SD NAND測試報告

    本帖最后由 xxkj2010 于 2025-2-8 14:23 編輯 雷龍SD NAND測試報告一次偶然的機會,很幸運得到深圳市雷龍發(fā)
    發(fā)表于 02-08 14:12

    雷龍 SD NAND 簡單使用

    前段時間收到了雷龍廠家郵寄的兩個 SD NAND 樣片,說要發(fā)文章的,一直擱置了,今天測試 esp32 的開發(fā)板的時候,發(fā)現(xiàn)之前的 SD
    發(fā)表于 01-31 15:41

    雷龍SD NAND試用

    、CSNP32GCR01-AOW分別為8GB、4GB雷龍二代SD NAND.前者樣片幫焊接在轉(zhuǎn)接板上,后者單芯片可以在需要SD NAND的開
    發(fā)表于 01-19 13:26

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

    的類型,擦寫次數(shù)可達5~10萬次,保證了SD NAND的耐用性。   高低溫測試SD NAND已通過10k次隨機掉電和高低溫沖擊
    發(fā)表于 12-06 11:22

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

    最近有幸獲得了雷龍發(fā)展提供的貼片式TF卡樣品,收到的快遞中包含兩片 CS SD NAND 芯片和一個轉(zhuǎn)接板。以下是芯片和轉(zhuǎn)接板的實物照片: 產(chǎn)品簡介 此次測試的芯片型號
    發(fā)表于 11-26 10:04

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

    不是SD NAND具體原因在SD測試下面會說明,具體實驗步驟如下。本次使用的是SD卡。   創(chuàng)建Vivado工程文件,選擇對應(yīng)的芯片型號
    發(fā)表于 11-13 15:20

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

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

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

    等優(yōu)點。這一節(jié)我們主要是介紹一下SD NAND FLASH,該應(yīng)用實例的SD NAND FLASH采用深圳市雷龍發(fā)展有限公司的CSNP1GC
    發(fā)表于 10-16 18:12

    SD NAND測試套件:提升存儲芯片驗證效率

    SD NAND轉(zhuǎn)接板和燒錄座是一種專為工程師設(shè)計的輔助工具,它能夠?qū)⒉煌叽绲?b class='flag-5'>SD NAND芯片轉(zhuǎn)換為通用TF接口封裝,從而方便地進行性能測試
    的頭像 發(fā)表于 08-13 09:44 ?759次閱讀
    <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b><b class='flag-5'>測試</b>套件:提升存儲芯片驗證效率

    SD NAND芯片的測評與使用 基于卷積神經(jīng)網(wǎng)絡(luò)的數(shù)字識別

    和32gbit的SD NAND FLASH芯片以及一份測試板卡。 簡介: 根據(jù)官方文檔的描述,這款芯片采用LGA-8封裝,具有標準SDIO接口,并同時兼容SPI和SD接口。因此,可以直
    的頭像 發(fā)表于 07-24 18:08 ?1803次閱讀