USBMSD SD card Hello World for Mbed platforms

Dependencies:   mbed USBMSD_SD USBDevice

Committer:
samux
Date:
Tue Nov 15 09:16:25 2011 +0000
Revision:
9:9c343b9ee6d8
Parent:
8:534fd41d8cc7
ok, will try to protect disk

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