精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

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

深圳市雷龍發展有限公司 ? 2023-12-22 17:45 ? 次閱讀

文章目錄

一、SD NAND特征

1.1 SD卡簡介

1.2 SD卡Block圖

二、SD卡樣片

三、Zynq測試平臺搭建

3.1 測試流程

3.2 SOC搭建

四、軟件搭建

五、測試結果

六、總結

一、SD NAND特征

1.1 SD卡簡介

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

??其特點如下:

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

電壓支持:2.7V-3.6V;

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

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

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

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

待機電流小于250uA

修正內存字段錯誤;

內容保護機制——符合SDMI最高安全標準

SDNAND密碼保護(CMD42 - LOCK_UNLOCK)

采用機械開關的寫保護功能

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

應用程序特定命令

舒適擦除機制

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

1.2 SD卡Block圖

get?code=M2U4NTY5ODk0YTZkMjFkOWI3MWVlZmU4OTM3M2VjNTcsMTcwMzIzNzI1Mzg3NQ==

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

get?code=YmQxZTRmYjU0ZGI5OTNhOTVlZDQzOWYxNDQwMmUyM2EsMTcwMzIzNzI1Mzg3NQ==

二、SD卡樣片

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

在這里插入圖片描述:

get?code=ZmQ3NzUyZGU3MDdmZmExNTQ4ODkyN2U0NzEzNmNjMDEsMTcwMzIzNzI1Mzg3NQ==

三、Zynq測試平臺搭建

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

3.1 測試流程

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

測試流程:

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

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

get?code=NGM4YzJlOGY1ZTdmODFjZjQxMDFjNDkxNGFjYjA2NDcsMTcwMzIzNzI1Mzg3NQ==

3.2 SOC搭建

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

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

get?code=NTNhNTBkNzkxMzE2MGRhMGNkYTczNjFkYTVjMGUxZjgsMTcwMzIzNzI1Mzg3NQ==

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

get?code=MzY0MWQ4ZjBlNTY2NWUxNTA4OGIwOWExM2RjYTg5YTMsMTcwMzIzNzI1Mzg3Ng==

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

get?code=Yjk1ZDk5ZGJiNWMyMmIyZjdiMDE4YmU0MWE2N2FiNGMsMTcwMzIzNzI1Mzg3Ng==

?點擊Create Block Design創建BD工程

get?code=YmNmZGY0OGY4YTBlYTkwZjE0ODE3NzI2ZjUzYWM3ODEsMTcwMzIzNzI1Mzg3Ng==

?在創建的過程中添加Zynq 內核;

get?code=ZjkzYzQ0YjM4OTJmMjcxMGZkMTJhYWE0MDMyNDY0NzcsMTcwMzIzNzI1Mzg3Ng==

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

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

get?code=NTg0ZjhkMjEwOGMxZmI1NTMwY2E4Njc5NTM0MDZiYmYsMTcwMzIzNzI1Mzg3Ng==

?添加TimerA IP;

get?code=NGJlZTQ3NjFkZTExMDc1NjI0OGZlY2U2YTE3MjllNGEsMTcwMzIzNzI1Mzg3Ng==

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

get?code=NDQ5MzRhMDljYjk1YTA4OTlkZGM5MjkxMDRiMmEyNzQsMTcwMzIzNzI1Mzg3Ng==

?點擊BD設計,并創建頂層文件

get?code=YWVkNzhjMzJjYjUzZTNhNTNiYTUzZTU5MjdjNjljMmQsMTcwMzIzNzI1Mzg3Ng==

生成比特流文件;

get?code=ODVjNDU5NDdjYWEyNzEwZTFiNmJlNmYzYWM0ZDcwZWIsMTcwMzIzNzI1Mzg3Ng==

在生成比特流文件后,將其導入SDK;

??點擊Export->Export Hardware,導出硬件;然后點擊Launch SDK打開SDK進行軟件設計;

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

四、軟件搭建

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

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

get?code=OTFiMjQxZmRmOTZiY2ZhMjRjYzA3MTUwNjM4ZDkzMzQsMTcwMzIzNzI1Mzg3Ng==

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

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

??相應的Timer驅動函數在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. }

五、測試結果

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

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

??對比兩種型號SD NAND芯片,發現CSNP32GCR01-AOW型號具有更高的讀寫速度;

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

六、總結

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

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

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

【本文轉載自CSDN,作者:PPRAM】

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1626

    文章

    21678

    瀏覽量

    602031
  • 測試
    +關注

    關注

    8

    文章

    5174

    瀏覽量

    126488
  • NAND
    +關注

    關注

    16

    文章

    1678

    瀏覽量

    136029
收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

    的市場份額,有著不可取代的地位。 隨著芯片的發展存儲芯片的趨勢也開始不甘落后,有著越來越多的新型的芯片問世,這里就要提起SD NAND芯片了,市面上主流的生產廠家就是雷龍SD
    的頭像 發表于 11-13 15:17 ?752次閱讀
    一文帶你了解什么是<b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>存儲芯片

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

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

    國產安路FPGA SD NAND FLASH 初步描述

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

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

    SD NAND轉接板和燒錄座是一種專為工程師設計的輔助工具,它能夠將不同尺寸的SD NAND芯片轉換為通用TF接口封裝,從而方便地進行性能測試
    的頭像 發表于 08-13 09:44 ?324次閱讀
    <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b><b class='flag-5'>測試</b>套件:提升存儲芯片驗證效率

    SD NAND芯片的測評與使用 基于卷積神經網絡的數字識別

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

    淺談SD NAND

    SD NAND內部主要由NAND Flash和Flash Controller組成,大多數人把NAND FLASH 叫做閃存,是一種長壽命的非易失性的存儲器,即使在斷電情況下仍能保持所
    的頭像 發表于 06-25 14:20 ?751次閱讀
    淺談<b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>

    NAND flash測試-雷龍發展

      文章目錄 **  一、簡介** **  二、速度測試**   最近比較忙,也一直沒空發什么文章,這算是新年第一篇吧,正好最近收到了一個雷龍的flash芯片,先拿來玩一下吧。   有興趣的小伙伴
    發表于 06-14 16:25

    NAND flash測試-雷龍發展

    文章目錄 一、簡介 二、速度測試 最近比較忙,也一直沒空發什么文章,這算是新年第一篇吧,正好最近收到了一個雷龍的flash芯片,先拿來玩一下吧。 有興趣的小伙伴可以去雷龍官網找小姐姐領取一個免費試用
    的頭像 發表于 06-14 16:20 ?426次閱讀
    <b class='flag-5'>NAND</b> flash<b class='flag-5'>測試</b>-<b class='flag-5'>雷龍</b>發展

    SD NAND和SPI NAND的區別

    SD NAND和SPI NAND各有優缺點,適用于不同的應用場景。SD NAND提供更高的讀寫速度和大容量存儲,適合需要高性能和大容量存儲的
    的頭像 發表于 06-04 14:26 ?1839次閱讀

    stm32 CubeMx 怎么實現SD卡/sd nand FATFS讀寫測試

    本實驗僅用于記錄和分享技術經驗若涉及侵權請聯系我刪除。   stm32 CubeMx 實現SD卡/sd nand FATFS讀寫測試。   材料:stm32F407ZGT6開發板、
    發表于 01-09 17:37

    什么是SD NAND存儲芯片? SD NAND與TF卡的區別

    什么是SD NAND?它俗稱貼片式T卡,貼片式TF卡,貼片式SD卡,貼片式內存卡,貼片式閃存卡,貼片式卡...等等。雖然SD NAND 和T
    的頭像 發表于 01-06 14:35 ?1687次閱讀
    什么是<b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>存儲芯片? <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>與TF卡的區別

    什么是SD NAND存儲芯片?

    前言   大家好,我們一般在STM32項目開發中或者在其他嵌入式開發中,經常會用到存儲芯片存儲數據。今天我和大家來介紹一款存儲芯片,我這里采用(雷龍) CS創世 SD NAND 。   S
    發表于 01-05 17:54

    基于Zynq FPGA雷龍SD NAND測試

    文章目錄 一、SD NAND特征 1.1 SD卡簡介 1.2 SD卡Block圖 二、SD卡樣片 三、Z
    發表于 12-22 17:43