在一直FatFs的时候,开始好多重定义问题,后来注释了一些头文件才好了。。
后面测试的时候,可以在卡里面新建文件,可以新建多级目录。可是无法往新建的txt文件里面写数据是怎么回事?
SD卡我是调用之前用的,应该SD的驱动程序没有问题吧?是不是要修改哪里?
下面是diskio.c里面的驱动程序,求助大神帮忙看下哪里有问题没?
DSTATUS disk_initialize (
BYTE drv /* Physical drive nmuber (0..) */
)
{
u8 state;
state = SD_Init();
if(state == 99)
{
return STA_NODISK; //NO CSRD
}
else if(state == 1)
{
return STA_NOINIT; //TIME OUT
}
else if(state == 0)
{
return STA_SUCCESS; // SUCCESS
}
else return STA_NOINIT; // Other Error
}
DSTATUS disk_status (
BYTE drv /* Physical drive nmuber (0..) */
)
{
return 0;
}
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) */
)
{
u8 res=0;
if(count==1) //1个sector的读操作
{
res = SD_ReadSingleBlock(sector, buff);
}
else //多个sector的读操作
{
res = SD_ReadMultiBlock(sector, buff, count);
}
/*
do
{
if(SD_ReadSingleBlock(sector, buff)!=0)
{
res = 1;
break;
}
buff+=512;
}while(--count);
*/
//处理返回值,将SPI_SD_driver.c的返回值转成ff.c的返回值
if(res == 0x00)
{
return RES_OK;
}
else
{
return RES_ERROR;
}
}
#if _READONLY == 0
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) */
)
{
u8 res;
// 读写操作
if(count == 1)
{
res = SD_WriteSingleBlock(sector, buff);
}
else
{
res = SD_WriteMultiBlock(sector, buff, count);
}
// 返回值转换
if(res == 0)
{
return RES_OK;
}
else
{
return RES_ERROR;
}
}
#endif /* _READONLY */
DRESULT disk_ioctl (
BYTE drv, /* Physical drive nmuber (0..) */
BYTE ctrl, /* Control code */
void *buff /* Buffer to send/receive control data */
)
{
DRESULT res;
if (drv)
{
return RES_PARERR; //仅支持单磁盘操作,否则返回参数错误
}
//FATFS目前版本仅需处理CTRL_SYNC,GET_SECTOR_COUNT,GET_BLOCK_SIZ三个命令
switch(ctrl)
{
case CTRL_SYNC:
res = RES_OK;
break;
case GET_BLOCK_SIZE:
*(WORD*)buff = 512;
res = RES_OK;
break;
case GET_SECTOR_COUNT:
*(DWORD*)buff = SD_GetCapacity();
res = RES_OK;
break;
default:
res = RES_PARERR;
break;
}
return res;
}
|