发 帖  
原厂入驻New
申请华秋企业认证 多层板首单免费打样!
30s提交资料,10分钟通过审核(免费赔付+顺丰包邮)>>立即报名

[经验] 【MYD-CZU3EG开发板试用体验】【图像篇】 EMMC测速

2019-11-12 08:57:45  410 Xilffs FatFs Zynq
分享
0
对于图像处理,需要数据源和储存地,而EMMC可以充当储存地,同时也可以充当数据源的作用。测试EMMC速度, 也即测试在1s内能写多少数据,或者写特定数目数据花了多长时间;对于测试可以在基于Linux测试,也可以裸机运行fatfs库实现,本例使用后者。
xilinx提供了预先移植好的Fatfs库,改名为Xilffs,使用这个库需要在BSP内启用Xilffs,如下步骤:
1.找到bsp的.mss文件,双击打开它;
1.png
2.点击Modi fy thisBSP’s Settings;
2.png
3.勾选xilffs;

3.png
4.点击OK
4.png
然后就可以编写操作EMMC的代码了,使用库需要包含ff.h头文件,SDK在启用Xilffs后会自动将Xilffs的相关头文件包含进他们的include路径。
测试步骤:
  • 1.     挂载EMMC,使用f_mount,其中Path使用”0:/”,因为CZ3EG板卡EMMC放在了SD1,如果是SD2,则使用”1:/”;
  • 2.     格式化EMMC成fat32格式,这一步可选,板卡出厂预先烧了Linux系统,其中EMMC被用作ROOTFS,使用的格式不是FAT系列,直接使用fopen会报错;
  • 3.     使用f_open在EMMC上建立一个文件,设置权限可读写;
  • 4.     使用Get_time获取当前时间
  • 5.     使用f_write写特定数量数目,我写入0x1000000byte;
  • 6.     使用Get_time获取当前时间,计算速度
  • 7.     使用Get_time获取当前时间
  • 8.     使用f_read写特定数量数目,我写入0x1000000byte;
  • 9.     使用Get_time获取当前时间,计算速度
实验结果如下
批注 2019-11-12 055637.png
根据结果,读速度约为90Mbyte,写约为20M;
本次代码如下:
  1. #include <stdio.h>
  2. #include "platform.h"
  3. #include "xil_printf.h"
  4. #include "ff.h"
  5. #include "xtime_l.h"

  6. FATFS fatfs;
  7. int main() {
  8.        FIL fil;
  9.        FRESULT rc;
  10.        UINT bw;

  11.        BYTE work[FF_MAX_SS];

  12.        XTime tStart;
  13.        XTime tEnd;
  14.        XTime tDIFf;
  15.        double tPeRFS;

  16.        init_platform();
  17.        rc = f_mount(&fatfs, "0:/", 0);

  18.        rc = f_mkfs("0:/", FM_FAT32, 0, work, sizeof work);
  19.        if (rc != FR_OK) {
  20.               return 1;
  21.        }

  22.        int t = 20;
  23.        while (t--) {
  24.               rc = f_open(&fil, "SD_TEST.txt", FA_CREATE_ALWAYS | FA_WRITE | FA_READ);
  25.               if (rc) {
  26.                      xil_printf("ERROR : f_open returned %d\r\n", rc);
  27.                      return 1;
  28.               }
  29.               rc = f_lseek(&fil, 0);
  30.               if (rc) {
  31.                      xil_printf("ERROR : f_lseek returned %d\r\n", rc);
  32.                      return 1;
  33.               }

  34.               XTime_GetTime(&tStart);

  35.               rc = f_write(&fil, (void*) 0x00000000, 0x1000000, &bw);
  36.               if (rc) {
  37.                      xil_printf("ERROR : f_write returned %d\r\n", rc);
  38.                      return 1;
  39.               }

  40.               XTime_GetTime(&tEnd);
  41.               tDiff = tEnd - tStart;
  42.               /* Convert tPerf into seconds */
  43.               tPerfS = (1.0 * tDiff / (1.0 * COUNTS_PER_SECOND));
  44.               xil_printf(
  45.                             "SD Write bandwidth: %d MB/s, Time: %d ms, Actual write bytes: %d\n\r",
  46.                             (int) ((0x1000000 * 1.0 / tPerfS) / 1024 / 1024),
  47.                             (int) (tPerfS * 1000), bw);
  48.               rc = f_lseek(&fil, 0);

  49.               XTime_GetTime(&tStart);
  50.               rc = f_read(&fil, (void*) 0x10000000, 0x1000000, &bw);
  51.               if (rc) {
  52.                      xil_printf("ERROR : read returned %d\r\n", rc);
  53.                      return 1;
  54.               }
  55.               XTime_GetTime(&tEnd);
  56.               tDiff = tEnd - tStart;
  57.               /* Convert tPerf into seconds */
  58.               tPerfS = (1.0 * tDiff / (1.0 * COUNTS_PER_SECOND));
  59.               //printf("SD Write bandwidth: %f MB/s, Time: %f s\n\r", (0x1000000*1.0/tPerfS)/1024/1024, tPerfS);
  60.               xil_printf(
  61.                             "SD Read bandwidth: %d MB/s, Time: %d ms, Actual read bytes: %d\n\r",
  62.                             (int) ((0x1000000 * 1.0 / tPerfS) / 1024 / 1024),
  63.                             (int) (tPerfS * 1000), bw);

  64.               rc = f_close(&fil);
  65.               if (rc) {
  66.                      xil_printf("ERROR : f_close returned %d\r\n", rc);
  67.                      return 1;
  68.               }
  69.        }
  70.        cleanup_platform();
  71.        return 0;
  72. }
复制代码


相关经验

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

发经验
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表