实验环境 vivado2017.3 xc7z010clg400-1
1.block design1.点击create block design,添加zynq ip核 2.配置zynq ip核 i.因为不涉及PL部分,取消勾选下面两个选项
ii.勾选SD0和UART1
iii.bank1电压设置为1.8V(不要选CD,因为我的开发板原理图上没有CD,但是网上其他教程有的勾选了,我勾选后读取SD卡会失败,why??)
iiii.取消PL端的clk iiiii.选择DDR型号
3.run block automation,validate design,generate output products,create hdl wrapper 4.generate bitstream 5.file->export->export hardware 6.file->launch sdk
1.新建一个工程模板 2.右键test_bsp,进行BSP设置 3.勾选xilffs库,然后点击xilffs进行设置
4.设置xilffs支持长文件名
5.复制如下代码到源文件:
/*
* main.c
*
* Created on: 2016年8月20日
* Author: hsp
* 本文件实现SD写入一段字符串,然后从其中读出并打印到串口。
*
*/
#include
#include "platform.h"
#include "xparameters.h"
#include "xil_printf.h"
#include "ff.h"
#include "xdevcfg.h"
static FATFS fatfs;
int SD_Init()
{
FRESULT rc;
rc = f_mount(&fatfs,"",0);
if(rc)
{
xil_printf("ERROR : f_mount returned %d\r\n",rc);
return XST_FAILURE;
}
return XST_SUCCESS;
}
int SD_Transfer_read(char *FileName,u32 DestinationAddress,u32 ByteLength)
{
FIL fil;
FRESULT rc;
UINT br;
rc = f_open(&fil,FileName,FA_READ);
if(rc)
{
xil_printf("ERROR : f_open returned %d\r\n",rc);
return XST_FAILURE;
}
rc = f_lseek(&fil, 0);
if(rc)
{
xil_printf("ERROR : f_lseek returned %d\r\n",rc);
return XST_FAILURE;
}
rc = f_read(&fil, (void*)DestinationAddress,ByteLength,&br);
if(rc)
{
xil_printf("ERROR : f_read returned %d\r\n",rc);
return XST_FAILURE;
}
rc = f_close(&fil);
if(rc)
{
xil_printf(" ERROR : f_close returned %d\r\n", rc);
return XST_FAILURE;
}
return XST_SUCCESS;
}
int SD_Transfer_write(char *FileName,u32 SourceAddress,u32 ByteLength)
{
FIL fil;
FRESULT rc;
UINT bw;
rc = f_open(&fil,FileName,FA_CREATE_ALWAYS | FA_WRITE);
if(rc)
{
xil_printf("ERROR : f_open returned %d\r\n",rc);
return XST_FAILURE;
}
rc = f_lseek(&fil, 0);
if(rc)
{
xil_printf("ERROR : f_lseek returned %d\r\n",rc);
return XST_FAILURE;
}
rc = f_write(&fil,(void*) SourceAddress,ByteLength,&bw);
if(rc)
{
xil_printf("ERROR : f_write returned %d\r\n", rc);
return XST_FAILURE;
}
rc = f_close(&fil);
if(rc){
xil_printf("ERROR : f_close returned %d\r\n",rc);
return XST_FAILURE;
}
return XST_SUCCESS;
}
#define FILE "test.txt"
int main()
{
init_platform();
const char src_str[] = "hsp test sd card write and read!";
u32 len = strlen(src_str);
SD_Init();
SD_Transfer_write(FILE,(u32)src_str,(len+1));//当直接指定len时没有写出,需要指定较大的长度才会写出,原因未知
char dest_str[33];//len
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?