600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > zynq UltraScale+ MPSoC 测试SD卡的写入速度

zynq UltraScale+ MPSoC 测试SD卡的写入速度

时间:2024-03-06 08:56:21

相关推荐

zynq UltraScale+ MPSoC 测试SD卡的写入速度

目录

一、 PL端准备二、 PS端编程1、main.c2、platform_zynqmp.c3、platform_config.h三、 测试与总结

一、 PL端准备

我的开发板只有一个SD卡槽,只能测试SD2.0的卡,PL端zynq中需要勾选一下,如下图所示。

二、 PS端编程

编程方面需要结合自己所需,查看通用模块系统文件中的函数,具体可看如下连接。

http://elm-/fsw/ff/00index_e.html

在开始编程之前,板级支持包要勾选xilffs,如下图。

我的程序如下,一共只有三个文件:

1、main.c

/* ------------------------------------------------------------ *//*Include File Definitions*//* ------------------------------------------------------------ */#include <stdio.h>#include "math.h"#include <ctype.h>#include <stdlib.h>#include "xil_types.h"#include "xil_cache.h"#include "xparameters.h"#include "sleep.h"#include "ff.h"/** XPAR redefines*//* ------------------------------------------------------------ *//*Global Variables*//* ------------------------------------------------------------ *//** Framebuffers for video data*/#define WRITE_DATA_MAX 1024*1024*10/** Interrupt struct and function*/extern u64 get_time_ms(); //调用获取时间函数u64 time1,time2;static FIL fil;/* File object */static FATFS fatfs;u8 write_data[WRITE_DATA_MAX];u64 count=0;unsigned int write_count;int main(void){FRESULT rc;//装载数据for(count=0;count<WRITE_DATA_MAX;count++){write_data[count]=49;}rc = f_mount(&fatfs, "", 1); //开辟工作区if (rc != FR_OK){printf("失败\r\n");return 0 ;}rc = f_open(&fil, "test.txt", FA_CREATE_ALWAYS | FA_WRITE); //打开文件//写入数据time1=get_time_ms();f_write(&fil,write_data,WRITE_DATA_MAX,&write_count); //写入数据time2=get_time_ms();printf("%ld\r\n",time2-time1); //输出写入数据用时f_close(&fil); //关闭文件f_unmount(""); //注销工作区printf("test完成");return 0;}

2、platform_zynqmp.c

#if defined (__arm__) || defined (__aarch64__)#include "xparameters.h"#include "xparameters_ps.h"/* defines XPAR values */#include "xil_cache.h"#include "xscugic.h"#include "xil_printf.h"#include "platform_config.h"#ifdef PLATFORM_ZYNQMP#include "xttcps.h"#include "xtime_l.h"u64 get_time_ms(){#define COUNTS_PER_MILLI_SECOND (COUNTS_PER_SECOND/1000)#if defined(ARMR5)XTime tCur = 0;static XTime tlast = 0, tHigh = 0;u64_t time;XTime_GetTime(&tCur);if (tCur < tlast)tHigh++;tlast = tCur;time = (((u64_t) tHigh) << 32U) | (u64_t)tCur;return (time/COUNTS_PER_MILLI_SECOND);#elseXTime tCur = 0;XTime_GetTime(&tCur);return (tCur/COUNTS_PER_MILLI_SECOND);#endif}#endif#endif

3、platform_config.h

#ifndef __PLATFORM_CONFIG_H_#define __PLATFORM_CONFIG_H_#define PLATFORM_EMAC_BASEADDR XPAR_XEMACPS_0_BASEADDR#define PLATFORM_ZYNQMP #endif

三、 测试与总结

我测试的是比较低速的SD卡,从串口打印输出,写入10M数据,用时2269ms,也就是4.4M/s,看起来确实是低速。

如果还需要进行其他测试,例如读取,可自行查看API函数的说明,里面写的非常详细。本次就记录这么多吧~~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。