|
这是fatfs在LPC1788上的底层驱动,也就是diskio.c文件,下面只是读函数,正常情况下只需调用
if(MS_BulkRecv(sector, count, buff) == OK)
return RES_OK;
else
return RES_ERROR;
上面这四句就可以了,但是由于USB DMA RAM不能是0x10000000到0x10010000这个内存空间,所以只能用外设RAM或者是SDRAM,
但是在MS_BulkRecv(sector, count, buff_tmp) 这个函数中只要count大于8就会进入Host_WDHWait()函数中,且跳不出来。但count小于8就没有问题
可以正常传输。有没有哪个大神知道是怎么回事???
DRESULT disk_read (
BYTE drv, /* Physical drive number */
BYTE *buff, /* Pointer to the data buffer to store read data */
DWORD sector, /* Start sector number (LBA) */
BYTE count /* Sector count (1..255) */
)
{
BYTE *buff_tmp; //willow add
DWORD sector_tmp;
uint32_t i;
buff_tmp=buff;
sector_tmp=sector;
if(!count) return RES_PARERR;
if(drv == 0)
{
if (Stat & STA_NOINIT) return RES_NOTRDY;
//willow change //防止接收緩沖區溢出
if((uint32)buff<0x10010000)
{
for(i=0;i<count;i++)
{
if(MS_BulkRecv(sector_tmp++, 1, UserBuffer) != OK)
return RES_ERROR;
memcpy(buff_tmp,(const void *)UserBuffer,512); //??
buff_tmp+=512;
}
return RES_OK;
}
else
{
while(count)
{
if(count>=8)
{
if(MS_BulkRecv(sector, 8, buff_tmp) == OK)
{
count-=8;
buff_tmp+=4096;// (8*512)
}
else
return RES_ERROR;
}
else
{
if(MS_BulkRecv(sector, count, buff_tmp) == OK)
return RES_OK;
else
return RES_ERROR;
}
}
return RES_OK;
}
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|