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 07:12:13 2010 +0000
Revision:
3:210eb67b260c
Parent:
2:716abfa4a4d0
Child:
6:ddf09d859ed7

        

Who changed what in which revision?

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