USB Mass Storage Device with SD card, updated with block count for compatibility with latest USB library

Dependents:   FTHR_USBMSD_Demo Airio-Base_MSD_test

Fork of USBMSD_SD by Samuel Mokrani

Files at this revision

API Documentation at this revision

Comitter:
switches
Date:
Wed Nov 16 18:24:52 2016 +0000
Parent:
2:055119ccf5a7
Commit message:
Added block count to read and write functions

Changed in this revision

USBMSD_SD.cpp Show annotated file Show diff for this revision Revisions of this file
USBMSD_SD.h Show annotated file Show diff for this revision Revisions of this file
diff -r 055119ccf5a7 -r cce1e689c548 USBMSD_SD.cpp
--- a/USBMSD_SD.cpp	Mon Jan 21 10:40:05 2013 +0000
+++ b/USBMSD_SD.cpp	Wed Nov 16 18:24:52 2016 +0000
@@ -222,25 +222,33 @@
     return 0;
 }
 
-int USBMSD_SD::disk_write(const uint8_t *buffer, uint64_t block_number) {
-    // set write address for single block (CMD24)
-    if (_cmd(24, block_number * cdv) != 0) {
-        return 1;
+int USBMSD_SD::disk_write(const uint8_t* buffer, uint64_t block_number, uint8_t count) {
+    for (uint64_t b = block_number; b < block_number + count; b++) {
+        // set write address for single block (CMD24)
+        if (_cmd(24, b * cdv) != 0) {
+            return 1;
+        }
+        
+        // send the data block
+        _write(buffer, 512);
+        buffer += 512;
     }
     
-    // send the data block
-    _write(buffer, 512);
     return 0;
 }
 
-int USBMSD_SD::disk_read(uint8_t *buffer, uint64_t block_number) {
-    // set read address for single block (CMD17)
-    if (_cmd(17, block_number * cdv) != 0) {
-        return 1;
+int USBMSD_SD::disk_read(uint8_t* buffer, uint64_t block_number, uint8_t count) {
+    for (uint64_t b = block_number; b < block_number + count; b++) {
+        // set read address for single block (CMD17)
+        if (_cmd(17, b * cdv) != 0) {
+            return 1;
+        }
+        
+        // receive the data
+        _read(buffer, 512);
+        buffer += 512;
     }
-    
-    // receive the data
-    _read(buffer, 512);
+
     return 0;
 }
 
diff -r 055119ccf5a7 -r cce1e689c548 USBMSD_SD.h
--- a/USBMSD_SD.h	Mon Jan 21 10:40:05 2013 +0000
+++ b/USBMSD_SD.h	Wed Nov 16 18:24:52 2016 +0000
@@ -54,8 +54,8 @@
     USBMSD_SD(PinName mosi, PinName miso, PinName sclk, PinName cs);
     virtual int disk_initialize();
     virtual int disk_status();
-    virtual int disk_read(uint8_t * buffer, uint64_t block_number);
-    virtual int disk_write(const uint8_t * buffer, uint64_t block_number);
+    virtual int disk_read(uint8_t * buffer, uint64_t block_number, uint8_t count);
+    virtual int disk_write(const uint8_t * buffer, uint64_t block_number, uint8_t count);
     virtual int disk_sync();
     virtual uint64_t disk_sectors();