Files
diplomarbeit/Tester/SW/Eclipse/lib/MmcFilesystem/fat_diskio.c
T
Matthias 6cc948eef8 Moved remotely
git-svn-id: file:///srv/dev-disk-by-uuid-17e88007-4d0c-45e0-8757-cacfcc458630/repositories/svn/Diplomarbeit@113 9fe90eed-be63-e94b-8204-d34ff4c2ff93
2009-01-12 08:38:14 +00:00

193 lines
5.8 KiB
C

/* ---------------------------------------------------------------------------
* diskio.c (C)ChaN, 2007
* ---------------------------------------------------------------------------
* Micro-key bv
* Industrieweg 28, 9804 TG Noordhorn
* Postbus 92, 9800 AB Zuidhorn
* The Netherlands
* Tel: +31 594 503020
* Fax: +31 594 505825
* Email: support@microkey.nl
* Web: www.microkey.nl
* ---------------------------------------------------------------------------
* Description:
* 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.
*
* ---------------------------------------------------------------------------
* Version(s): 0.2, Aug 11, 2008, MMi
* Edited to fit into LAN_2636 Project
* Change disk_write and disk_read functions to work with MMC
* disable multible drive support
*
* 0.1, 2007 ChanN
* Creation
* ---------------------------------------------------------------------------
*/
/* ---------------------------------------------------------------------------
* System include files
* ---------------------------------------------------------------------------
*/
#include "LPC23xx.h"
#include "types.h"
/* ---------------------------------------------------------------------------
* Application include files
* ---------------------------------------------------------------------------
*/
#include "fat_diskio.h"
#include "rtc.h"
#include "mmc.h"
#include "mmc_transfer.h"
/* ---------------------------------------------------------------------------
* Local constant and macro definitions
* ---------------------------------------------------------------------------
*/
#define ATA 0
#define MMC 1
#define USB 2
#define PAGESIZE 512 /* Pagesize of Card in Byte */
/* ---------------------------------------------------------------------------
* Global variable definitions
* ---------------------------------------------------------------------------
*/
/* ---------------------------------------------------------------------------
* Local variable definitions
* ---------------------------------------------------------------------------
*/
/* ---------------------------------------------------------------------------
* Local function definitions
* ---------------------------------------------------------------------------
*/
DSTATUS disk_initialize(UINT8 drive)
{
DSTATUS stat = 0;
/* Multidevice support disabled, always return "Operation suceeded" */
switch (drive)
{
case ATA:
return (stat);
case MMC:
return (stat);
case USB:
return (stat);
default:
return (stat);
}
return STA_NOINIT;
}
DSTATUS disk_status(UINT8 drive)
{
DSTATUS stat = 0;
/* Multidevice support disabled, always return "Operation suceeded" */
switch (drive)
{
case ATA:
return (stat);
case MMC:
return (stat);
case USB:
return (stat);
default:
return (stat);
}
return STA_NOINIT;
}
DRESULT disk_ioctl(UINT8 drive, UINT8 ctrl, void *buffer)
{
DRESULT res = 0;
/* Multidevice support disabled, always return "Operation suceeded" */
switch (drive)
{
case ATA:
return (res);
case MMC:
return (res);
case USB:
return (res);
default:
return (res);
}
return RES_PARERR;
}
DRESULT disk_read(UINT8 drive, pUINT8 buffer, UINT32 sector, UINT8 count)
{
UINT32 readResult = 1;
MmcState_t cardResult; /* returned from the card reading */
/* Read MMC/SD card on the desired sector for desired length
* The multiplications are necessary because the File Systems counts in
* sectors whereas the original MMC/SD driver requires the adress offset
*/
cardResult = CardRead(buffer, (sector * PAGESIZE), (count * PAGESIZE));
/* Switch corresponding to the read result */
switch (cardResult)
{
case MmcOk:
/* Enter here, the reading worked without problems */
readResult = 0;
break;
default:
/* enter here, there were some problems while reading */
readResult = 1;
break;
}
return (readResult);
}
#if _READONLY == 0 /* defined in diskio.h */
DRESULT disk_write(UINT8 drive, pUINT8 buffer, UINT32 sector, UINT8 count)
{
UINT32 writeResult = 1;
MmcState_t cardResult;
/* Read MMC/SD card on the desired sector for desired length
* The multiplications are necessary because the File Systems counts in
* sectors whereas the original MMC/SD driver requires the adress offset
*/
cardResult = CardWrite(buffer, (sector * PAGESIZE), (count * PAGESIZE));
/* Switch corresponding to the read result */
switch (cardResult)
{
case MmcOk:
/* Enter here, the writing worked without problems */
writeResult = 0;
break;
default:
/* enter here, there were some problems while writing */
writeResult = 1;
break;
}
return (writeResult);
}
#endif /* _READONLY */