Цитата
Сталкнулся с подобной проблемой, можете более подробно описать "костыль" rolleyes.gif
/*-----------------------------------------------------------------------*/
/* Read Sector(s) */
DRESULT disk_read (
BYTE drv, /* Physical drive nmuber (0..) */
BYTE *buff, /* Data buffer to store read data */
DWORD sector, /* Sector address (LBA) */
BYTE count /* Number of sectors to read (1..255) */
)
{
SD_Error Status;
if( !count )
{
return RES_PARERR; /* countІ»ДЬµИУЪ0Ј¬·сФт·µ»ШІОКэґнОу */
}
switch (drv)
{
case 0:
if(count==1) /* 1ёцsectorµД¶БІЩЧч */
{
if(SDCardInfo.CardBlockSize>512){ //<---------- костыль
Status = SD_ReadBlock( buff ,sector << 9 , 512 );
}
else{
Status = SD_ReadBlock( buff ,sector << 9 , SDCardInfo.CardBlockSize );
}
}
else /* ¶аёцsectorµД¶БІЩЧч */
{
if(SDCardInfo.CardBlockSize>512){
Status = SD_ReadMultiBlocks( buff ,sector << 9 , 512, count);
}
else{
Status = SD_ReadMultiBlocks( buff ,sector << 9 ,SDCardInfo.CardBlockSize,count);
}
}
if(Status == SD_OK)
{
return RES_OK;
}
else
{
return RES_ERROR;
}
case 1:
break;
case 2:
break;
default:
break;
}
return RES_ERROR;
}
/*-----------------------------------------------------------------------*/
/* Miscellaneous Functions */
DRESULT disk_ioctl (
BYTE drv, /* Physical drive nmuber (0..) */
BYTE ctrl, /* Control code */
void *buff /* Buffer to send/receive control data */
)
{
volatile unsigned char rc = RES_PARERR;
if (drv){
rc = RES_PARERR; /* ЅцЦ§іЦµҐґЕЕМІЩЧчЈ¬·сФт·µ»ШІОКэґнОу */
}
else{
switch (ctrl){
case CTRL_SYNC :
rc = RES_OK;
break;
case GET_SECTOR_COUNT : {
//*(DWORD*)buff = SDCardInfo.CardCapacity/SDCardInfo.CardBlockSize;
*(DWORD*)buff = SDCardInfo.CardCapacity/512; //<---------- костыль
rc = RES_OK;
break;
}
case GET_BLOCK_SIZE : {
//*(WORD*)buff = SDCardInfo.CardBlockSize;
*(WORD*)buff = 512; //<---------- костыль
rc = RES_OK;
break;
}
case GET_SECTOR_SIZE : {
*(WORD*)buff = SDCardInfo.CardBlockSize;
rc = RES_OK;
break;
}
case CTRL_POWER :
break;
case CTRL_LOCK :
break;
case CTRL_EJECT :
break;
case MMC_GET_TYPE : /* MMC/SDC command */
break;
case MMC_GET_CSD :
break;
case MMC_GET_CID :
break;
case MMC_GET_OCR :
break;
case MMC_GET_SDSTAT :
break;
default :
break;
}
}
return rc;
}