电子说
(4)修改disk_read函数如下所示。
DRESULT disk_read( BYTE pdrv, BYTE *buff, LBA_t sector, UINT count )
{
int result;
switch( pdrv )
{
//SD卡
case SD_CARD :
result = SD_ReadDisk( buff, sector, count ) ;
//读出错
while( result )
{
SD_Init() ; //重新初始化SD卡
result = SD_ReadDisk( buff, sector, count ) ;
}
break;
//外部FLASH读写
case EX_FLASH :
for( ; count>0; count-- )
{
W25QXX_Read( buff, sector*512, 512 ) ;
sector++;
buff+=512;
}
break;
case DEV_USB : break;
}
if( result )
return RES_ERROR ;
else
return RES_OK ;
}
(5)修改disk_write函数如下所示。
#if FF_FS_READONLY == 0
DRESULT disk_write( BYTE pdrv, const BYTE *buff, LBA_t sector, UINT count )
{
int result;
switch ( pdrv )
{
//SD卡
case SD_CARD :
result = SD_WriteDisk( ( u8* )buff, sector, count ) ;
//写出错
while( result )
{
SD_Init() ; //重新初始化SD卡
result = SD_WriteDisk( ( u8* )buff, sector, count ) ;
}
break ;
//外部FLASH
case EX_FLASH :
for( ; count>0; count-- )
{
W25QXX_Write( ( u8* )buff, sector*512, 512 ) ;
sector ++ ;
buff += 512 ;
}
break ;
//其他
case DEV_USB :
break ;
}
if( result )
return RES_ERROR ;
else
return RES_OK ;
}
#endif
(6)修改disk_ioctl函数如下所示。
DRESULT disk_ioctl( BYTE pdrv, BYTE cmd, void *buff )
{
DRESULT res;
//SD卡
if( pdrv==SD_CARD )
{
switch( cmd )
{
case CTRL_SYNC :
res = RES_OK ;
break ;
case GET_SECTOR_SIZE :
*( DWORD* )buff = 512 ;
res = RES_OK;
break ;
case GET_BLOCK_SIZE :
*( WORD* )buff = SDCardInfo.CardBlockSize ;
res = RES_OK ;
break ;
case GET_SECTOR_COUNT :
*( DWORD* )buff = SDCardInfo.CardCapacity/512 ;
res = RES_OK ;
break;
default :
res = RES_PARERR ;
break ;
}
}
//外部FLASH
else if( pdrv==EX_FLASH )
{
switch( cmd )
{
case CTRL_SYNC :
res = RES_OK ;
break ;
case GET_SECTOR_SIZE :
*( WORD* )buff = 512 ;
res = RES_OK ;
break ;
case GET_BLOCK_SIZE :
*( WORD* )buff = 8 ;
res = RES_OK ;
break ;
case GET_SECTOR_COUNT :
*( DWORD* )buff = 2048*12 ;
res = RES_OK ;
break ;
default :
res = RES_PARERR ;
break ;
}
}
else
res = RES_ERROR ; //其他的不支持
return res;
}
(7)由于新版的文件系统去掉了获取时间函数,所以这一个函数需要我们自己添加。
//获取时间
DWORD get_fattime()
{
return 0 ;
}
全部0条评论
快来发表一下你的评论吧 !