标题:
STM32文件系统FATFS(4)
[打印本页]
作者:
yuyang911220
时间:
2015-5-30 21:55
标题:
STM32文件系统FATFS(4)
6、实现disk_write()函数
该函数主要实现对SD卡进行写数据操作,和读数据操作一样也分单块写和多块写,建议实现多块写的方式,这样可以提高写数据速度。
实现后的程序如下:
DRESULT disk_write (
BYTE drv, /* Physical drive nmuber (0..) */
const BYTE *buff, /* Data to be written */
DWORD sector, /* Sector address (LBA) */
BYTE count /* Number of sectors to write (1..255) */
)
{
int Status;
if( !count )
{
return RES_PARERR; /* count不能等于0,否则返回参数错误 */
}
switch (drv)
{
case 0:
if(count==1) /* 1个sector的写操作 */
{
Status = MSD0_WriteSingleBlock( sector , (uint8_t *)(&buff[0]) );
if(Status == 0){
return RES_OK;
}else{
return RES_ERROR;
}
}
else /* 多个sector的写操作 */
{
Status = MSD0_WriteMultiBlock( sector , (uint8_t *)(&buff[0]) , count );
if(Status == 0){
return RES_OK;
}else{
return RES_ERROR;
}
}
case 1:
if(count==1) /* 1个sector的写操作 */
{
return RES_OK;
}
else /* 多个sector的写操作 */
{
return RES_OK;
}
default:return RES_ERROR;
}
}
复制代码
MSD0_WriteSingleBlock()和MSD0_WriteMultiBlock()函数都是SD卡操作的底层函数,我们在SPI_MSD0_Driver.c文件中实现。
7、实现disk_ioctl()函数
该函数在磁盘格式化、获取文件系统信息等操作时会被调用。
实现后的程序如下:
DRESULT disk_ioctl (
BYTE drv, /* Physical drive nmuber (0..) */
BYTE ctrl, /* Control code */
void *buff /* Buffer to send/receive control data */
)
{
if (drv==0)
{
MSD0_GetCardInfo(&SD0_CardInfo);
switch (ctrl)
{
case CTRL_SYNC :
return RES_OK;
case GET_SECTOR_COUNT :
*(DWORD*)buff = SD0_CardInfo.Capacity/SD0_CardInfo.BlockSize;
return RES_OK;
case GET_BLOCK_SIZE :
*(WORD*)buff = SD0_CardInfo.BlockSize;
return RES_OK;
case CTRL_POWER :
break;
case CTRL_LOCK :
break;
case CTRL_EJECT :
break;
/* MMC/SDC command */
case MMC_GET_TYPE :
break;
case MMC_GET_CSD :
break;
case MMC_GET_CID :
break;
case MMC_GET_OCR :
break;
case MMC_GET_SDSTAT :
break;
}
}else if(drv==1){
switch (ctrl)
{
case CTRL_SYNC :
return RES_OK;
case GET_SECTOR_COUNT :
return RES_OK;
case GET_SECTOR_SIZE :
return RES_OK;
case GET_BLOCK_SIZE :
return RES_OK;
case CTRL_POWER :
break;
case CTRL_LOCK :
break;
case CTRL_EJECT :
break;
/* MMC/SDC command */
case MMC_GET_TYPE :
break;
case MMC_GET_CSD :
break;
case MMC_GET_CID :
break;
case MMC_GET_OCR :
break;
case MMC_GET_SDSTAT :
break;
}
}
else{
return RES_PARERR;
}
return RES_PARERR;
}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0