⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diskio.c[2010-03-16-09-00-51].sfb

📁 STM32_fatfs_shell_SDHC.rar
💻 SFB
字号:
/*-----------------------------------------------------------------------*/
/* Low level disk I/O module skeleton for FatFs     (C)ChaN, 2007        */
/*-----------------------------------------------------------------------*/
/* This is a stub disk I/O module that acts as front end of the existing */
/* disk I/O modules and attach it to FatFs module with common interface. */
/*-----------------------------------------------------------------------*/
#include "config.h"
#include "diskio.h"
#include "SD_driver.h"
#include "dataflash.h"
DSTATUS disk_initialize (
	BYTE drv				/* Physical drive nmuber (0..) */
)
{	
 switch (drv) {
	case 0 :
		SPI_FLASH_Init();	  
		// translate the reslut code here

		return 0;

	case 1 :
		SPI_Configuration();
		bw=SD_Init();
		// translate the reslut code here

		return 0;

	case 2 :
		return STA_NOINIT;
	}
	return STA_NOINIT;
}



/*-----------------------------------------------------------------------*/
/* Return Disk Status                                                    */

DSTATUS disk_status (
	BYTE drv		/* Physical drive nmuber (0..) */
)
{
   	 switch (drv) {
	case 0 :
		
		// translate the reslut code here

		return 0;

	case 1 :
		// translate the reslut code here

		return 0;

	case 2 :
		// translate the reslut code here

		return 0;

	 default:
        break;
	}
	return STA_NOINIT;
}



/*-----------------------------------------------------------------------*/
/* 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) */
)
{

   BYTE *pBuf = buff;
  	u8 res=0;
    if ( !count)
    {    
        return RES_PARERR;  //仅支持单磁盘操作,count不能等于0,否则返回参数错误
    }

switch (drv){
 case 0:
    while(count)
    {
        DataFlash_ReadSector(sector,pBuf);
        sector++;
        pBuf += 512; // SD卡扇区大小为512字节
        count--;
    }
	return RES_OK ;
 case 1:
    if(count==1)            //1个sector的读操作      
    {                                                
        res = SD_ReadSingleBlock(sector, buff);      
    }                                                
    else                    //多个sector的读操作     
    {                                                
        res = SD_ReadMultiBlock(sector, buff, count);
    }                                                
    //处理返回值,将SPI_SD_driver.c的返回值转成ff.c的返回值
    if(res == 0x00)
    {
        return RES_OK;
    }
    else
    {
        return RES_ERROR;
    }

 case 2:	
	 break;
 default:
        break;
}
return RES_ERROR;
}



/*-----------------------------------------------------------------------*/
/* Write Sector(s)                                                       */

#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) */
)
{
    BYTE *pBuf = (BYTE*)buff;

    	u8 res;
    if ( !count)
    {    
        return RES_PARERR;  //仅支持单磁盘操作,count不能等于0,否则返回参数错误
    }

   switch (drv){
   case 0:
    while(count)
    {
       DataFlash_WriteSector(sector,buff); 
	   sector++;
       pBuf += 512; // SD卡扇区大小为512字节
       count--;
    }
	return RES_OK ;
    case 1:
    if(count==1)            //1个sector的读操作      
    {                                                
        res = SD_WriteSingleBlock(sector, buff);      
    }                                                
    else                    //多个sector的读操作     
    {                                                
        res = SD_WriteMultiBlock(sector, buff, count);
    }                                                
    //处理返回值,将SPI_SD_driver.c的返回值转成ff.c的返回值
    if(res == 0x00)
    {
        return RES_OK;
    }
    else
    {
        return RES_ERROR;
    }
case 2:
	 break;
  default :
  break;
}
 return RES_ERROR;

}
#endif /* _READONLY */



/*-----------------------------------------------------------------------*/
/* Miscellaneous Functions                                               */

DRESULT disk_ioctl (
	BYTE drv,		/* Physical drive nmuber (0..) */
	BYTE ctrl,		/* Control code */
	void *buff		/* Buffer to send/receive control data */
)
{
 if (drv)
    {    
        return RES_PARERR;  //仅支持单磁盘操作,否则返回参数错误
    }
	switch (ctrl) {
	case CTRL_SYNC :
		return 0;
	case GET_SECTOR_COUNT : 
       *((DWORD*)buff) = 0x1000; // 2Mbyte
	    return RES_OK;

	case GET_BLOCK_SIZE :
        *((DWORD*)buff) = 512; 
	    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;	
	}
	return RES_PARERR;
    
}


/*-----------------------------------------------------------------------*/
/* User defined function to give a current time to fatfs module          */
/* 31-25: Year(0-127 org.1980), 24-21: Month(1-12), 20-16: Day(1-31) */                                                                                                                                                                                                                                          
/* 15-11: Hour(0-23), 10-5: Minute(0-59), 4-0: Second(0-29 *2) */                                                                                                                                                                                                                                                
DWORD get_fattime (void)
{
   
    return 0;
}

//得到文件Calendar格式的建立日期,是DWORD get_fattime (void) 逆变换							


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -