USBMSD SD card Hello World for Mbed platforms

Dependencies:   mbed USBMSD_SD USBDevice

Committer:
samux
Date:
Mon Nov 14 17:50:02 2011 +0000
Revision:
8:534fd41d8cc7
Parent:
7:6494da2a5c60
Child:
9:9c343b9ee6d8
doesn\'t work...

Who changed what in which revision?

UserRevisionLine numberNew contents of line
samux 7:6494da2a5c60 1 /*-----------------------------------------------------------------------*/
samux 7:6494da2a5c60 2 /* Low level disk I/O module skeleton for FatFs (C)ChaN, 2007 */
samux 7:6494da2a5c60 3 /*-----------------------------------------------------------------------*/
samux 7:6494da2a5c60 4 /* This is a stub disk I/O module that acts as front end of the existing */
samux 7:6494da2a5c60 5 /* disk I/O modules and attach it to FatFs module with common interface. */
samux 7:6494da2a5c60 6 /*-----------------------------------------------------------------------*/
samux 7:6494da2a5c60 7
samux 7:6494da2a5c60 8 #include "diskio.h"
samux 7:6494da2a5c60 9 #include <stdio.h>
samux 7:6494da2a5c60 10 #include <string.h>
samux 7:6494da2a5c60 11 #include "FATFileSystem.h"
samux 7:6494da2a5c60 12
samux 7:6494da2a5c60 13 #include "mbed.h"
samux 7:6494da2a5c60 14
samux 7:6494da2a5c60 15 DSTATUS disk_initialize (
samux 8:534fd41d8cc7 16 BYTE drv /* Physical drive nmuber (0..) */
samux 7:6494da2a5c60 17 )
samux 7:6494da2a5c60 18 {
samux 8:534fd41d8cc7 19 FFSDEBUG("disk_initialize on drv [%d]\n", drv);
samux 8:534fd41d8cc7 20 return (DSTATUS)FATFileSystem::_ffs[drv]->disk_initialize();
samux 7:6494da2a5c60 21 }
samux 7:6494da2a5c60 22
samux 7:6494da2a5c60 23 DSTATUS disk_status (
samux 8:534fd41d8cc7 24 BYTE drv /* Physical drive nmuber (0..) */
samux 7:6494da2a5c60 25 )
samux 7:6494da2a5c60 26 {
samux 8:534fd41d8cc7 27 FFSDEBUG("disk_status on drv [%d]\n", drv);
samux 8:534fd41d8cc7 28 return (DSTATUS)FATFileSystem::_ffs[drv]->disk_status();
samux 7:6494da2a5c60 29 }
samux 7:6494da2a5c60 30
samux 7:6494da2a5c60 31 DRESULT disk_read (
samux 8:534fd41d8cc7 32 BYTE drv, /* Physical drive nmuber (0..) */
samux 8:534fd41d8cc7 33 BYTE *buff, /* Data buffer to store read data */
samux 8:534fd41d8cc7 34 DWORD sector, /* Sector address (LBA) */
samux 8:534fd41d8cc7 35 BYTE count /* Number of sectors to read (1..255) */
samux 7:6494da2a5c60 36 )
samux 7:6494da2a5c60 37 {
samux 8:534fd41d8cc7 38 FFSDEBUG("disk_read(sector %d, count %d) on drv [%d]\n", sector, count, drv);
samux 8:534fd41d8cc7 39 for(int s=sector; s<sector+count; s++) {
samux 8:534fd41d8cc7 40 FFSDEBUG(" disk_read(sector %d)\n", s);
samux 8:534fd41d8cc7 41 int res = FATFileSystem::_ffs[drv]->disk_read((char*)buff, s);
samux 8:534fd41d8cc7 42 if(res) {
samux 8:534fd41d8cc7 43 return RES_PARERR;
samux 8:534fd41d8cc7 44 }
samux 8:534fd41d8cc7 45 buff += 512;
samux 8:534fd41d8cc7 46 }
samux 8:534fd41d8cc7 47 return RES_OK;
samux 7:6494da2a5c60 48 }
samux 7:6494da2a5c60 49
samux 7:6494da2a5c60 50 #if _READONLY == 0
samux 7:6494da2a5c60 51 DRESULT disk_write (
samux 8:534fd41d8cc7 52 BYTE drv, /* Physical drive nmuber (0..) */
samux 8:534fd41d8cc7 53 const BYTE *buff, /* Data to be written */
samux 8:534fd41d8cc7 54 DWORD sector, /* Sector address (LBA) */
samux 8:534fd41d8cc7 55 BYTE count /* Number of sectors to write (1..255) */
samux 7:6494da2a5c60 56 )
samux 7:6494da2a5c60 57 {
samux 8:534fd41d8cc7 58 FFSDEBUG("disk_write(sector %d, count %d) on drv [%d]\n", sector, count, drv);
samux 8:534fd41d8cc7 59 for(int s=sector; s<sector+count; s++) {
samux 8:534fd41d8cc7 60 FFSDEBUG(" disk_write(sector %d)\n", s);
samux 8:534fd41d8cc7 61 int res = FATFileSystem::_ffs[drv]->disk_write((char*)buff, sector);
samux 8:534fd41d8cc7 62 if(res) {
samux 8:534fd41d8cc7 63 return RES_PARERR;
samux 8:534fd41d8cc7 64 }
samux 8:534fd41d8cc7 65 buff += 512;
samux 8:534fd41d8cc7 66 }
samux 8:534fd41d8cc7 67 return RES_OK;
samux 7:6494da2a5c60 68 }
samux 7:6494da2a5c60 69 #endif /* _READONLY */
samux 7:6494da2a5c60 70
samux 7:6494da2a5c60 71 DRESULT disk_ioctl (
samux 8:534fd41d8cc7 72 BYTE drv, /* Physical drive nmuber (0..) */
samux 8:534fd41d8cc7 73 BYTE ctrl, /* Control code */
samux 8:534fd41d8cc7 74 void *buff /* Buffer to send/receive control data */
samux 7:6494da2a5c60 75 )
samux 7:6494da2a5c60 76 {
samux 8:534fd41d8cc7 77 FFSDEBUG("disk_ioctl(%d)\n", ctrl);
samux 8:534fd41d8cc7 78 switch(ctrl) {
samux 8:534fd41d8cc7 79 case CTRL_SYNC:
samux 8:534fd41d8cc7 80 if(FATFileSystem::_ffs[drv] == NULL) {
samux 8:534fd41d8cc7 81 return RES_NOTRDY;
samux 8:534fd41d8cc7 82 } else if(FATFileSystem::_ffs[drv]->disk_sync()) {
samux 8:534fd41d8cc7 83 return RES_ERROR;
samux 8:534fd41d8cc7 84 }
samux 8:534fd41d8cc7 85 return RES_OK;
samux 8:534fd41d8cc7 86 case GET_SECTOR_COUNT:
samux 8:534fd41d8cc7 87 if(FATFileSystem::_ffs[drv] == NULL) {
samux 8:534fd41d8cc7 88 return RES_NOTRDY;
samux 8:534fd41d8cc7 89 } else {
samux 8:534fd41d8cc7 90 int res = FATFileSystem::_ffs[drv]->disk_sectors();
samux 8:534fd41d8cc7 91 if(res > 0) {
samux 8:534fd41d8cc7 92 *((DWORD*)buff) = res; // minimum allowed
samux 8:534fd41d8cc7 93 return RES_OK;
samux 8:534fd41d8cc7 94 } else {
samux 8:534fd41d8cc7 95 return RES_ERROR;
samux 8:534fd41d8cc7 96 }
samux 8:534fd41d8cc7 97 }
samux 8:534fd41d8cc7 98 case GET_BLOCK_SIZE:
samux 8:534fd41d8cc7 99 *((DWORD*)buff) = 1; // default when not known
samux 8:534fd41d8cc7 100 return RES_OK;
samux 7:6494da2a5c60 101
samux 8:534fd41d8cc7 102 }
samux 8:534fd41d8cc7 103 return RES_PARERR;
samux 7:6494da2a5c60 104 }
samux 7:6494da2a5c60 105