SD Card Interface class. Log raw data bytes to memory addresses of your choice, or format the card and use the FAT file system to write files.

Dependencies:   mbed

Committer:
Blaze513
Date:
Mon Aug 23 01:31:50 2010 +0000
Revision:
2:716abfa4a4d0
Parent:
1:94c648931f84
Child:
3:210eb67b260c

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Blaze513 2:716abfa4a4d0 1 /*-----------------------------------------------------------------------*/
Blaze513 2:716abfa4a4d0 2 /* Low level disk I/O module skeleton for FatFs (C)ChaN, 2007 */
Blaze513 2:716abfa4a4d0 3 /*-----------------------------------------------------------------------*/
Blaze513 2:716abfa4a4d0 4 /* This is a stub disk I/O module that acts as front end of the existing */
Blaze513 2:716abfa4a4d0 5 /* disk I/O modules and attach it to FatFs module with common interface. */
Blaze513 2:716abfa4a4d0 6 /*-----------------------------------------------------------------------*/
Blaze513 2:716abfa4a4d0 7
Blaze513 2:716abfa4a4d0 8 #include "diskio.h"
Blaze513 2:716abfa4a4d0 9
Blaze513 2:716abfa4a4d0 10 DSTATUS disk_initialize(BYTE drv)
Blaze513 2:716abfa4a4d0 11 {
Blaze513 2:716abfa4a4d0 12 if (FATFileSystem::DriveArray[drv])
Blaze513 2:716abfa4a4d0 13 {
Blaze513 2:716abfa4a4d0 14 return (DSTATUS)FATFileSystem::DriveArray[drv]->disk_initialize();
Blaze513 2:716abfa4a4d0 15 }
Blaze513 2:716abfa4a4d0 16 else
Blaze513 2:716abfa4a4d0 17 {
Blaze513 2:716abfa4a4d0 18 return STA_NOINIT;
Blaze513 2:716abfa4a4d0 19 }
Blaze513 2:716abfa4a4d0 20 }
Blaze513 2:716abfa4a4d0 21
Blaze513 2:716abfa4a4d0 22 DSTATUS disk_status(BYTE drv)
Blaze513 2:716abfa4a4d0 23 {
Blaze513 2:716abfa4a4d0 24 if (FATFileSystem::DriveArray[drv])
Blaze513 2:716abfa4a4d0 25 {
Blaze513 2:716abfa4a4d0 26 return (DSTATUS)FATFileSystem::DriveArray[drv]->disk_status();
Blaze513 2:716abfa4a4d0 27 }
Blaze513 2:716abfa4a4d0 28 else
Blaze513 2:716abfa4a4d0 29 {
Blaze513 2:716abfa4a4d0 30 return STA_NOINIT;
Blaze513 2:716abfa4a4d0 31 }
Blaze513 2:716abfa4a4d0 32 }
Blaze513 2:716abfa4a4d0 33
Blaze513 2:716abfa4a4d0 34 DRESULT disk_read(BYTE drv, BYTE* buff, DWORD sector, BYTE count)
Blaze513 2:716abfa4a4d0 35 {
Blaze513 2:716abfa4a4d0 36 if (FATFileSystem::DriveArray[drv])
Blaze513 2:716abfa4a4d0 37 {
Blaze513 2:716abfa4a4d0 38 return (DRESULT)FATFileSystem::DriveArray[drv]->disk_read((unsigned char*)buff,
Blaze513 2:716abfa4a4d0 39 (unsigned long)sector, (unsigned char)count);
Blaze513 2:716abfa4a4d0 40 }
Blaze513 2:716abfa4a4d0 41 else
Blaze513 2:716abfa4a4d0 42 {
Blaze513 2:716abfa4a4d0 43 return RES_NOTRDY;
Blaze513 2:716abfa4a4d0 44 }
Blaze513 2:716abfa4a4d0 45 }
Blaze513 2:716abfa4a4d0 46
Blaze513 2:716abfa4a4d0 47 #if _READONLY == 0
Blaze513 2:716abfa4a4d0 48 DRESULT disk_write(BYTE drv, const BYTE* buff, DWORD sector, BYTE count)
Blaze513 2:716abfa4a4d0 49 {
Blaze513 2:716abfa4a4d0 50 if (FATFileSystem::DriveArray[drv])
Blaze513 2:716abfa4a4d0 51 {
Blaze513 2:716abfa4a4d0 52 return (DRESULT)FATFileSystem::DriveArray[drv]->disk_write((const unsigned char*)buff,
Blaze513 2:716abfa4a4d0 53 (unsigned long)sector, (unsigned char)count);
Blaze513 2:716abfa4a4d0 54 }
Blaze513 2:716abfa4a4d0 55 else
Blaze513 2:716abfa4a4d0 56 {
Blaze513 2:716abfa4a4d0 57 return RES_NOTRDY;
Blaze513 2:716abfa4a4d0 58 }
Blaze513 2:716abfa4a4d0 59 }
Blaze513 2:716abfa4a4d0 60 #endif
Blaze513 2:716abfa4a4d0 61
Blaze513 2:716abfa4a4d0 62 DRESULT disk_ioctl(BYTE drv, BYTE ctrl, void* buff)
Blaze513 2:716abfa4a4d0 63 {
Blaze513 2:716abfa4a4d0 64 switch (ctrl)
Blaze513 2:716abfa4a4d0 65 {
Blaze513 2:716abfa4a4d0 66 case CTRL_SYNC:
Blaze513 2:716abfa4a4d0 67 if (FATFileSystem::DriveArray[drv])
Blaze513 2:716abfa4a4d0 68 {
Blaze513 2:716abfa4a4d0 69 return (DRESULT)FATFileSystem::DriveArray[drv]->disk_sync();
Blaze513 2:716abfa4a4d0 70 }
Blaze513 2:716abfa4a4d0 71 else
Blaze513 2:716abfa4a4d0 72 {
Blaze513 2:716abfa4a4d0 73 return RES_NOTRDY;
Blaze513 2:716abfa4a4d0 74 }
Blaze513 2:716abfa4a4d0 75
Blaze513 2:716abfa4a4d0 76 case GET_SECTOR_SIZE:
Blaze513 2:716abfa4a4d0 77 if (FATFileSystem::DriveArray[drv])
Blaze513 2:716abfa4a4d0 78 {
Blaze513 2:716abfa4a4d0 79 WORD Result = FATFileSystem::DriveArray[drv]->disk_sector_size();
Blaze513 2:716abfa4a4d0 80 if (Result > 0)
Blaze513 2:716abfa4a4d0 81 {
Blaze513 2:716abfa4a4d0 82 *((WORD*)buff) = Result;
Blaze513 2:716abfa4a4d0 83 return RES_OK;
Blaze513 2:716abfa4a4d0 84 }
Blaze513 2:716abfa4a4d0 85 else
Blaze513 2:716abfa4a4d0 86 {
Blaze513 2:716abfa4a4d0 87 return RES_ERROR;
Blaze513 2:716abfa4a4d0 88 }
Blaze513 2:716abfa4a4d0 89 }
Blaze513 2:716abfa4a4d0 90 else
Blaze513 2:716abfa4a4d0 91 {
Blaze513 2:716abfa4a4d0 92 return RES_NOTRDY;
Blaze513 2:716abfa4a4d0 93 }
Blaze513 2:716abfa4a4d0 94
Blaze513 2:716abfa4a4d0 95 case GET_SECTOR_COUNT:
Blaze513 2:716abfa4a4d0 96 if (FATFileSystem::DriveArray[drv])
Blaze513 2:716abfa4a4d0 97 {
Blaze513 2:716abfa4a4d0 98 DWORD Result = FATFileSystem::DriveArray[drv]->disk_sector_count();
Blaze513 2:716abfa4a4d0 99 if (Result > 0)
Blaze513 2:716abfa4a4d0 100 {
Blaze513 2:716abfa4a4d0 101 *((DWORD*)buff) = Result;
Blaze513 2:716abfa4a4d0 102 return RES_OK;
Blaze513 2:716abfa4a4d0 103 }
Blaze513 2:716abfa4a4d0 104 else
Blaze513 2:716abfa4a4d0 105 {
Blaze513 2:716abfa4a4d0 106 return RES_ERROR;
Blaze513 2:716abfa4a4d0 107 }
Blaze513 2:716abfa4a4d0 108 }
Blaze513 2:716abfa4a4d0 109 else
Blaze513 2:716abfa4a4d0 110 {
Blaze513 2:716abfa4a4d0 111 return RES_NOTRDY;
Blaze513 2:716abfa4a4d0 112 }
Blaze513 2:716abfa4a4d0 113
Blaze513 2:716abfa4a4d0 114 case GET_BLOCK_SIZE:
Blaze513 2:716abfa4a4d0 115 if (FATFileSystem::DriveArray[drv])
Blaze513 2:716abfa4a4d0 116 {
Blaze513 2:716abfa4a4d0 117 DWORD Result = FATFileSystem::DriveArray[drv]->disk_block_size();
Blaze513 2:716abfa4a4d0 118 if (Result > 0)
Blaze513 2:716abfa4a4d0 119 {
Blaze513 2:716abfa4a4d0 120 *((DWORD*)buff) = Result;
Blaze513 2:716abfa4a4d0 121 return RES_OK;
Blaze513 2:716abfa4a4d0 122 }
Blaze513 2:716abfa4a4d0 123 else
Blaze513 2:716abfa4a4d0 124 {
Blaze513 2:716abfa4a4d0 125 return RES_ERROR;
Blaze513 2:716abfa4a4d0 126 }
Blaze513 2:716abfa4a4d0 127 }
Blaze513 2:716abfa4a4d0 128 else
Blaze513 2:716abfa4a4d0 129 {
Blaze513 2:716abfa4a4d0 130 return RES_NOTRDY;
Blaze513 2:716abfa4a4d0 131 }
Blaze513 2:716abfa4a4d0 132
Blaze513 2:716abfa4a4d0 133 default:
Blaze513 2:716abfa4a4d0 134 return RES_PARERR;
Blaze513 2:716abfa4a4d0 135 }
Blaze513 1:94c648931f84 136 }