This library implements a USB Mass Storage device in the ethernet RAM bank

Dependents:   Lab8_USB-MSD_RAM_HelloWorld_mbed

Fork of USBMSD_SD by avnish aggarwal

Committer:
jakowisp
Date:
Wed Mar 26 07:45:40 2014 +0000
Revision:
5:eebd06a7ddf0
Setup the library to use both AHBSRAM0 and AHBSRAM1.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jakowisp 5:eebd06a7ddf0 1 /** This library is based on the USBMSD_SD library.
jakowisp 5:eebd06a7ddf0 2 * Modifications for using RAM were made by avnisha
jakowisp 5:eebd06a7ddf0 3 * Only modifications doen by Dwayne Dilbeck were to remove the SD functions, and change the RAM location to the Ethernet RAM
jakowisp 5:eebd06a7ddf0 4 */
jakowisp 5:eebd06a7ddf0 5
jakowisp 5:eebd06a7ddf0 6
jakowisp 5:eebd06a7ddf0 7 #include "USBMSD_RAM.h"
jakowisp 5:eebd06a7ddf0 8 #include "mbed_debug.h"
jakowisp 5:eebd06a7ddf0 9
jakowisp 5:eebd06a7ddf0 10 #define SD_COMMAND_TIMEOUT 5000
jakowisp 5:eebd06a7ddf0 11 #define SD_DBG 0
jakowisp 5:eebd06a7ddf0 12 #define BLOCKS 32
jakowisp 5:eebd06a7ddf0 13 #define FS BLOCKS*512
jakowisp 5:eebd06a7ddf0 14
jakowisp 5:eebd06a7ddf0 15 LocalFileSystem local("local");
jakowisp 5:eebd06a7ddf0 16
jakowisp 5:eebd06a7ddf0 17 char s0[FS] __attribute__((section("AHBSRAM1")));
jakowisp 5:eebd06a7ddf0 18 char s1[FS] __attribute__((section("AHBSRAM0")));
jakowisp 5:eebd06a7ddf0 19 int status = 1;
jakowisp 5:eebd06a7ddf0 20
jakowisp 5:eebd06a7ddf0 21 USBMSD_RAM::USBMSD_RAM(PinName mosi, PinName miso, PinName sclk, PinName cs) :
jakowisp 5:eebd06a7ddf0 22 _spi(mosi, miso, sclk), _cs(cs) {
jakowisp 5:eebd06a7ddf0 23 _cs = 1;
jakowisp 5:eebd06a7ddf0 24
jakowisp 5:eebd06a7ddf0 25 printf("cons\n");
jakowisp 5:eebd06a7ddf0 26 connect();
jakowisp 5:eebd06a7ddf0 27 }
jakowisp 5:eebd06a7ddf0 28
jakowisp 5:eebd06a7ddf0 29 int USBMSD_RAM::disk_initialize() {
jakowisp 5:eebd06a7ddf0 30
jakowisp 5:eebd06a7ddf0 31 printf("ini\n");
jakowisp 5:eebd06a7ddf0 32 status--;
jakowisp 5:eebd06a7ddf0 33 return 0;
jakowisp 5:eebd06a7ddf0 34 }
jakowisp 5:eebd06a7ddf0 35
jakowisp 5:eebd06a7ddf0 36 int USBMSD_RAM::disk_write(const uint8_t *buffer, uint64_t block_number) {
jakowisp 5:eebd06a7ddf0 37
jakowisp 5:eebd06a7ddf0 38 //
jakowisp 5:eebd06a7ddf0 39 // find the correct block and write
jakowisp 5:eebd06a7ddf0 40 //
jakowisp 5:eebd06a7ddf0 41 int offset;
jakowisp 5:eebd06a7ddf0 42 int i;
jakowisp 5:eebd06a7ddf0 43 char *s;
jakowisp 5:eebd06a7ddf0 44
jakowisp 5:eebd06a7ddf0 45 //printf("write\n");
jakowisp 5:eebd06a7ddf0 46 if (block_number > (BLOCKS -1)) return 1;
jakowisp 5:eebd06a7ddf0 47 offset = 512 * block_number;
jakowisp 5:eebd06a7ddf0 48 if (block_number < FS)
jakowisp 5:eebd06a7ddf0 49 s=(char *)&s0;
jakowisp 5:eebd06a7ddf0 50 else
jakowisp 5:eebd06a7ddf0 51 s=(char *)&s1;
jakowisp 5:eebd06a7ddf0 52 for (i = 0; i < 512; i++) {
jakowisp 5:eebd06a7ddf0 53 s[offset + i] = buffer[i];
jakowisp 5:eebd06a7ddf0 54 }
jakowisp 5:eebd06a7ddf0 55 return 0;
jakowisp 5:eebd06a7ddf0 56 }
jakowisp 5:eebd06a7ddf0 57
jakowisp 5:eebd06a7ddf0 58 int USBMSD_RAM::disk_read(uint8_t *buffer, uint64_t block_number) {
jakowisp 5:eebd06a7ddf0 59
jakowisp 5:eebd06a7ddf0 60 int offset;
jakowisp 5:eebd06a7ddf0 61 int i;
jakowisp 5:eebd06a7ddf0 62 char *s;
jakowisp 5:eebd06a7ddf0 63
jakowisp 5:eebd06a7ddf0 64 //printf("read\n");
jakowisp 5:eebd06a7ddf0 65 if (block_number > (BLOCKS -1)) return 1;
jakowisp 5:eebd06a7ddf0 66 offset = 512 * block_number;
jakowisp 5:eebd06a7ddf0 67 if (block_number < FS)
jakowisp 5:eebd06a7ddf0 68 s=(char *)&s0;
jakowisp 5:eebd06a7ddf0 69 else
jakowisp 5:eebd06a7ddf0 70 s=(char *)&s1;
jakowisp 5:eebd06a7ddf0 71 for (i = 0; i < 512; i++) {
jakowisp 5:eebd06a7ddf0 72 buffer[i] = s[offset + i];
jakowisp 5:eebd06a7ddf0 73 }
jakowisp 5:eebd06a7ddf0 74 return 0;
jakowisp 5:eebd06a7ddf0 75 }
jakowisp 5:eebd06a7ddf0 76
jakowisp 5:eebd06a7ddf0 77 int USBMSD_RAM::disk_status() {
jakowisp 5:eebd06a7ddf0 78 printf("status\n");
jakowisp 5:eebd06a7ddf0 79 return status;
jakowisp 5:eebd06a7ddf0 80 }
jakowisp 5:eebd06a7ddf0 81
jakowisp 5:eebd06a7ddf0 82
jakowisp 5:eebd06a7ddf0 83 int USBMSD_RAM::disk_sync() { printf("sync\n"); return 0; }
jakowisp 5:eebd06a7ddf0 84 uint64_t USBMSD_RAM::disk_size() {
jakowisp 5:eebd06a7ddf0 85 printf("size\n");
jakowisp 5:eebd06a7ddf0 86 printf("Location s0 : %x\n", &s0);
jakowisp 5:eebd06a7ddf0 87 printf("Location s1 : %x\n", &s1);
jakowisp 5:eebd06a7ddf0 88 return 2*FS;
jakowisp 5:eebd06a7ddf0 89 }
jakowisp 5:eebd06a7ddf0 90 uint64_t USBMSD_RAM::disk_sectors() { printf("sectors\n"); return BLOCKS; }