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
Revision 3:cce1e689c548, committed 2016-11-16
- 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();