UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

取消
显示结果 
搜索替代 
您的意思是: 
Adventurer
Adventurer
262 次查看
注册日期: ‎12-23-2018

ZCU106开发板SD卡读写BMP图片

1、ZCU106开发板,读取使用xliffs 4.0库读取SD卡文件成功不管大小多少(尝试了45000字节),但是在读取BMP图片的时候, 当读取大于147*147(21609字节)的时候 f_read(&fil,frame,147*147,&br)显示失败。程序挂掉进入函数。

void Xil_SyncAbortHandler(void *CallBackRef){(void) CallBackRef;xdbg_printf(XDBG_DEBUG_ERROR, "Synchronous abort \n");while(1) {;}}

2、图片的大小为496*368。

3、数组大小均没有越界。

4、开发平台2018.3VIVADO win10.

5、代码如下:

#include "platform.h"
#include "ff.h"
#include "xparameters.h"
#include "xgpiops.h"
#include "xstatus.h"
#include "xplatform_info.h"
#include <xil_printf.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;
}

void bmp_load(char *bmp,u8 *frame)
{
short y,x;
short XImage,YImage;
FIL fil;
u32 iPixelAddr = 0;
FRESULT res;
unsigned char TMPBUF[64];
unsigned char line_buf[2000];
u32 br;

res = f_open(&fil,bmp,FA_OPEN_EXISTING | FA_READ);
if(res != FR_OK)
{
return;
}
res = f_read(&fil,&TMPBUF,54,&br);
xil_printf("brValue:%d\r\n",br);
if(res != FR_OK)
{
return;
}
XImage = (unsigned short int)TMPBUF[19]*256 + TMPBUF[18]; //这里计算的是图像的Width和Height
YImage = (unsigned short int)TMPBUF[23]*256 + TMPBUF[22];

xil_printf("Begin%d\r\n ",TMPBUF[11]);xil_printf("%dEnd\r\n",TMPBUF[10]); //这里表明前多少数据是无效的

xil_printf("Begin%d\r\n",XImage);
xil_printf("%dEnd\r\n",YImage);
//从前64个数据里之后,图像数据从第1079开始,-54是因为前面已经读取了54个数据了
//这里的1078是直接手算的,并不是程序算的。
res = f_read(&fil,&line_buf[0],1078-54,&br);
xil_printf("BR%d\r\n",br);
int i;

f_read(&fil,frame,147*147,&br);
xil_printf("N%d K%d K%d\r\n,",br,frame[0],frame[200*200-1]);

xil_printf("Yes");
f_close(&fil);
}

int main()
{
init_platform();
int rc;

xil_printf("hello\n\r");

rc = SD_Init();
if(XST_SUCCESS != rc)
{
xil_printf("fail to init SD Card.");
}
else
{
xil_printf("success to init SD Card.\n\r");
}

while(1)
{
u8 frameGet[200*200];
bmp_load("ONE16.bmp",&frameGet);
xil_printf("V%d V%d",frameGet[0],frameGet[200*200-1]);//输出两个像素点的值
}


cleanup_platform();
return 0;
}

0 项奖励
3 条回复3
Xilinx Employee
Xilinx Employee
218 次查看
注册日期: ‎05-11-2010

回复: ZCU106开发板SD卡读写BMP图片

可能是stack size和heap size小了。加大试试。

0 项奖励
Adventurer
Adventurer
154 次查看
注册日期: ‎12-23-2018

回复: ZCU106开发板SD卡读写BMP图片

您好: 1、我发现将SD卡的数据读取到PS的DDR中时一次可以读取6MB左右,但是读到PL中的DDR中的时候一次只能读取几K,因为需要快速读取里面的数据,所以需要一次性读出来? 2、ZCU106这个平台理论读取SD卡的速度时多少,在哪里能查到?
0 项奖励
Adventurer
Adventurer
152 次查看
注册日期: ‎12-23-2018

回复: ZCU106开发板SD卡读写BMP图片

stack size和heap size 这两个已经到8MB了,放到PS的DDR中,没用。

0 项奖励