USBMSD SD card Hello World for Mbed platforms

Dependencies:   mbed USBMSD_SD USBDevice

Committer:
samux
Date:
Mon Nov 14 12:08:32 2011 +0000
Revision:
7:6494da2a5c60
Child:
8:534fd41d8cc7
will try to use ChaNFSSD

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 7:6494da2a5c60 16 BYTE drv /* Physical drive nmuber (0..) */
samux 7:6494da2a5c60 17 )
samux 7:6494da2a5c60 18 {
samux 7:6494da2a5c60 19 FFSDEBUG("disk_initialize on drv [%d]\n", drv);
samux 7:6494da2a5c60 20 return (DSTATUS)FATFileSystem::_ffs[drv]->disk_initialize();
samux 7:6494da2a5c60 21 }
samux 7:6494da2a5c60 22
samux 7:6494da2a5c60 23 DSTATUS disk_status (
samux 7:6494da2a5c60 24 BYTE drv /* Physical drive nmuber (0..) */
samux 7:6494da2a5c60 25 )
samux 7:6494da2a5c60 26 {
samux 7:6494da2a5c60 27 FFSDEBUG("disk_status on drv [%d]\n", drv);
samux 7:6494da2a5c60 28 return (DSTATUS)FATFileSystem::_ffs[drv]->disk_status();
samux 7:6494da2a5c60 29 }
samux 7:6494da2a5c60 30
samux 7:6494da2a5c60 31 DRESULT disk_read (
samux 7:6494da2a5c60 32 BYTE drv, /* Physical drive nmuber (0..) */
samux 7:6494da2a5c60 33 BYTE *buff, /* Data buffer to store read data */
samux 7:6494da2a5c60 34 DWORD sector, /* Sector address (LBA) */
samux 7:6494da2a5c60 35 BYTE count /* Number of sectors to read (1..255) */
samux 7:6494da2a5c60 36 )
samux 7:6494da2a5c60 37 {
samux 7:6494da2a5c60 38 FFSDEBUG("disk_read(sector %d, count %d) on drv [%d]\n", sector, count, drv);
samux 7:6494da2a5c60 39 for(int s=sector; s<sector+count; s++) {
samux 7:6494da2a5c60 40 FFSDEBUG(" disk_read(sector %d)\n", s);
samux 7:6494da2a5c60 41 int res = FATFileSystem::_ffs[drv]->disk_read((char*)buff, s);
samux 7:6494da2a5c60 42 if(res) {
samux 7:6494da2a5c60 43 return RES_PARERR;
samux 7:6494da2a5c60 44 }
samux 7:6494da2a5c60 45 buff += 512;
samux 7:6494da2a5c60 46 }
samux 7:6494da2a5c60 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 7:6494da2a5c60 52 BYTE drv, /* Physical drive nmuber (0..) */
samux 7:6494da2a5c60 53 const BYTE *buff, /* Data to be written */
samux 7:6494da2a5c60 54 DWORD sector, /* Sector address (LBA) */
samux 7:6494da2a5c60 55 BYTE count /* Number of sectors to write (1..255) */
samux 7:6494da2a5c60 56 )
samux 7:6494da2a5c60 57 {
samux 7:6494da2a5c60 58 FFSDEBUG("disk_write(sector %d, count %d) on drv [%d]\n", sector, count, drv);
samux 7:6494da2a5c60 59 for(int s=sector; s<sector+count; s++) {
samux 7:6494da2a5c60 60 FFSDEBUG(" disk_write(sector %d)\n", s);
samux 7:6494da2a5c60 61 int res = FATFileSystem::_ffs[drv]->disk_write((char*)buff, sector);
samux 7:6494da2a5c60 62 if(res) {
samux 7:6494da2a5c60 63 return RES_PARERR;
samux 7:6494da2a5c60 64 }
samux 7:6494da2a5c60 65 buff += 512;
samux 7:6494da2a5c60 66 }
samux 7:6494da2a5c60 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 7:6494da2a5c60 72 BYTE drv, /* Physical drive nmuber (0..) */
samux 7:6494da2a5c60 73 BYTE ctrl, /* Control code */
samux 7:6494da2a5c60 74 void *buff /* Buffer to send/receive control data */
samux 7:6494da2a5c60 75 )
samux 7:6494da2a5c60 76 {
samux 7:6494da2a5c60 77 FFSDEBUG("disk_ioctl(%d)\n", ctrl);
samux 7:6494da2a5c60 78 switch(ctrl) {
samux 7:6494da2a5c60 79 case CTRL_SYNC:
samux 7:6494da2a5c60 80 if(FATFileSystem::_ffs[drv] == NULL) {
samux 7:6494da2a5c60 81 return RES_NOTRDY;
samux 7:6494da2a5c60 82 } else if(FATFileSystem::_ffs[drv]->disk_sync()) {
samux 7:6494da2a5c60 83 return RES_ERROR;
samux 7:6494da2a5c60 84 }
samux 7:6494da2a5c60 85 return RES_OK;
samux 7:6494da2a5c60 86 case GET_SECTOR_COUNT:
samux 7:6494da2a5c60 87 if(FATFileSystem::_ffs[drv] == NULL) {
samux 7:6494da2a5c60 88 return RES_NOTRDY;
samux 7:6494da2a5c60 89 } else {
samux 7:6494da2a5c60 90 int res = FATFileSystem::_ffs[drv]->disk_sectors();
samux 7:6494da2a5c60 91 if(res > 0) {
samux 7:6494da2a5c60 92 *((DWORD*)buff) = res; // minimum allowed
samux 7:6494da2a5c60 93 return RES_OK;
samux 7:6494da2a5c60 94 } else {
samux 7:6494da2a5c60 95 return RES_ERROR;
samux 7:6494da2a5c60 96 }
samux 7:6494da2a5c60 97 }
samux 7:6494da2a5c60 98 case GET_BLOCK_SIZE:
samux 7:6494da2a5c60 99 *((DWORD*)buff) = 1; // default when not known
samux 7:6494da2a5c60 100 return RES_OK;
samux 7:6494da2a5c60 101
samux 7:6494da2a5c60 102 }
samux 7:6494da2a5c60 103 return RES_PARERR;
samux 7:6494da2a5c60 104 }
samux 7:6494da2a5c60 105