| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 | 
							- /*-----------------------------------------------------------------------*/
 
- /* Low level disk I/O module skeleton for FatFs     (C)ChaN, 2013        */
 
- /*-----------------------------------------------------------------------*/
 
- /* If a working storage control module is available, it should be        */
 
- /* attached to the FatFs via a glue function rather than modifying it.   */
 
- /* This is an example of glue functions to attach various exsisting      */
 
- /* storage control module to the FatFs module with a defined API.        */
 
- /*-----------------------------------------------------------------------*/
 
- #include "diskio.h"		/* FatFs lower layer API */
 
- #include <string.h> // memcpy
 
- #include "stm32f4xx.h"
 
- #include "../SD_Card/sdio_sd.h"
 
- #define BLOCK_SIZE            512 /* Block Size in Bytes */
 
- /* Definitions of physical drive number for each media */
 
- #define ATA		0
 
- #define MMC		1
 
- #define USB		2
 
- /*-----------------------------------------------------------------------*/
 
- /* Inidialize a Drive                                                    */
 
- /*-----------------------------------------------------------------------*/
 
- DSTATUS disk_initialize (
 
- 	BYTE pdrv				/* Physical drive nmuber (0..) */
 
- )
 
- {
 
- 	SD_Error  Status;
 
- 	/* Supports only single drive */
 
- 	if (pdrv) return STA_NOINIT;
 
- 	/*-------------------------- SD Init ----------------------------- */
 
- 	Status = SD_Init();
 
- 	if (Status!=SD_OK ) return STA_NOINIT;
 
- 	else return RES_OK;
 
- }
 
- /*-----------------------------------------------------------------------*/
 
- /* Get Disk Status                                                       */
 
- /*-----------------------------------------------------------------------*/
 
- DSTATUS disk_status (
 
- 	BYTE pdrv		/* Physical drive nmuber (0..) */
 
- )
 
- {
 
- 	DSTATUS stat = 0;
 
- 	if (SD_Detect() != SD_PRESENT)
 
- 		stat |= STA_NODISK;
 
- 	// STA_NOTINIT - Subsystem not initailized
 
- 	// STA_PROTECTED - Write protected, MMC/SD switch if available
 
- 	return(stat);
 
- }
 
- /*-----------------------------------------------------------------------*/
 
- /* Read Sector(s)                                                        */
 
- /*-----------------------------------------------------------------------*/
 
- DRESULT disk_read (
 
- 	BYTE pdrv,		/* Physical drive nmuber (0..) */
 
- 	BYTE *buff,		/* Data buffer to store read data */
 
- 	DWORD sector,	/* Sector address (LBA) */
 
- 	UINT count		/* Number of sectors to read (1..128) */
 
- )
 
- {
 
- 	SDTransferState state;
 
- 	DRESULT res = RES_OK;
 
- 	if (SD_Detect() != SD_PRESENT) return RES_NOTRDY;
 
- 	if (count == 0) return RES_PARERR;
 
- 	//SD_ReadMultiBlocks ( buff, sector, 512, 1 );
 
- 	SD_ReadMultiBlocksFIXED (buff, sector, 512, count);
 
- 	SD_WaitReadOperation();
 
-     do {
 
-       state = SD_GetStatus();
 
-       if(state == SD_TRANSFER_ERROR) {
 
-         res = RES_ERROR;
 
-         break;
 
-       }
 
- 	} while (state != SD_TRANSFER_OK);
 
- 	return res;
 
- }
 
- /*-----------------------------------------------------------------------*/
 
- /* Write Sector(s)                                                       */
 
- /*-----------------------------------------------------------------------*/
 
- #if _USE_WRITE
 
- DRESULT disk_write (
 
- 	BYTE pdrv,			/* Physical drive nmuber (0..) */
 
- 	const BYTE *buff,	/* Data to be written */
 
- 	DWORD sector,		/* Sector address (LBA) */
 
- 	UINT count			/* Number of sectors to write (1..128) */
 
- )
 
- {
 
- 	//SDTransferState state;
 
- 	//  DRESULT res = RES_OK;
 
- 	if (SD_Detect( ) != SD_PRESENT) return RES_NOTRDY;
 
- 	if (count == 0) return RES_PARERR;
 
- 	//SD_WriteMultiBlocks ( (uint8_t *)buff, sector, 512, count );
 
- 	SD_WriteMultiBlocksFIXED ((uint8_t *)buff, sector, 512, count);
 
- 	SD_WaitWriteOperation();
 
- 	while (SD_GetStatus() != SD_TRANSFER_OK);
 
- 	return RES_OK;
 
- }
 
- #endif
 
- /*-----------------------------------------------------------------------*/
 
- /* Miscellaneous Functions                                               */
 
- /*-----------------------------------------------------------------------*/
 
- #if _USE_IOCTL
 
- DRESULT disk_ioctl (
 
- 	BYTE pdrv,		/* Physical drive nmuber (0..) */
 
- 	BYTE cmd,		/* Control code */
 
- 	void *buff		/* Buffer to send/receive control data */
 
- )
 
- {
 
- 	return RES_OK;
 
- }
 
- #endif
 
 
  |