大学生
最后登录1970-1-1
在线时间 小时
注册时间2015-3-20
|
楼主 |
发表于 2016-11-7 22:37:02
|
显示全部楼层
是的,我配置的是
#define _MIN_SS 512
#define _MAX_SS 4096
#define _VOLUMES 2
/* Number of volumes (logical drives) to be used. */
SD卡的擦除,单块和多块读写测试都成功了,用的是标准库1.7版本的官方示例代码。
现在看来问题就出在diskio.c中的移植代码上。
经过单步调试我现在已经把问题进一步范围缩小了。
fmount()函数会调用一个find_volume(); find_volume()这个函数会调用disk_ioctl(),
disk_ioctl()函数中,关于SD卡的代码我是这样实现的:
case DEV_SD :
switch(cmd)
{
case CTRL_SYNC:
break;
//扇区数量
case GET_SECTOR_COUNT:
*(DWORD*)buff = SDCardInfo.CardCapacity/SDCardInfo.CardBlockSize;
break;
//扇区大小
case GET_SECTOR_SIZE:
*(WORD*)buff = SDCardInfo.CardBlockSize;
break;
//擦除时多少个扇区
case GET_BLOCK_SIZE:
*(DWORD*)buff = 1;
break;
case CTRL_TRIM:
break;
default:
break;
之后find_volume()又调用了disk_read()
我的disk_read()是这样实现的:
case DEV_SD :
status = SD_ReadMultiBlocks(buff, sector*SDCardInfo.CardBlockSize, SDCardInfo.CardBlockSize, count);
if(status != SD_OK)
break;
status = SD_WaitReadOperation();
if(status != SD_OK)
break;
while(SD_GetStatus() != SD_TRANSFER_OK);
res = RES_OK;
break;
经过调试就是在上面红色的代码处出错的,我想是不是传入的参数有问题呢?
32G卡是可以执行成功的,2G卡就失败。
前面已经说了,2G读出的blocksize是1024,32G读出的blocksize是512.
不知道是啥问题。
|
|