Removed hardcoded values for block size

pull/7774/head
Deepika 2017-06-21 15:00:47 -05:00
parent c890e0cfc7
commit 99f3d25f44
1 changed files with 21 additions and 21 deletions

View File

@ -234,9 +234,13 @@ SDBlockDevice::SDBlockDevice(PinName mosi, PinName miso, PinName sclk, PinName c
{ {
_cs = 1; _cs = 1;
_card_type = SDCARD_None; _card_type = SDCARD_None;
// Set default to 100kHz for initialisation and 1MHz for data transfer // Set default to 100kHz for initialisation and 1MHz for data transfer
_init_sck = 100000; _init_sck = 100000;
_transfer_sck = 1000000; _transfer_sck = 1000000;
// Only HC block size is supported.
_block_size = BLOCK_SIZE_HC;
} }
SDBlockDevice::~SDBlockDevice() SDBlockDevice::~SDBlockDevice()
@ -323,8 +327,6 @@ int SDBlockDevice::_initialise_card()
debug_if(SD_DBG, "Card Initialized: Version 1.x Card\n"); debug_if(SD_DBG, "Card Initialized: Version 1.x Card\n");
} }
// Only HC block size is supported.
_block_size = BLOCK_SIZE_HC;
return status; return status;
} }
@ -343,8 +345,8 @@ int SDBlockDevice::init()
_sectors = _sd_sectors(); _sectors = _sd_sectors();
// Set block length to 512 (CMD16) // Set block length to 512 (CMD16)
if (_cmd(CMD16_SET_BLOCKLEN, 512) != 0) { if (_cmd(CMD16_SET_BLOCKLEN, _block_size) != 0) {
debug_if(_dbg, "Set 512-byte block timed out\n"); debug_if(_dbg, "Set %d-byte block timed out\n", _block_size);
_lock.unlock(); _lock.unlock();
return BD_ERROR_DEVICE_ERROR; return BD_ERROR_DEVICE_ERROR;
} }
@ -377,7 +379,7 @@ int SDBlockDevice::program(const void *b, bd_addr_t addr, bd_size_t size)
while (size > 0) { while (size > 0) {
if(SDCARD_V2HC == _card_type) { if(SDCARD_V2HC == _card_type) {
// SDHC and SDXC Cards (CCS=1) use block unit address (512 Bytes unit) // SDHC and SDXC Cards (CCS=1) use block unit address (512 Bytes unit)
block = addr / 512; block = addr / _block_size;
}else { }else {
// SDSC Card (CCS=0) uses byte unit address // SDSC Card (CCS=0) uses byte unit address
block = addr; block = addr;
@ -389,10 +391,10 @@ int SDBlockDevice::program(const void *b, bd_addr_t addr, bd_size_t size)
} }
// send the data block // send the data block
_write(buffer, 512); _write(buffer, _block_size);
buffer += 512; buffer += _block_size;
addr += 512; addr += _block_size;
size -= 512; size -= _block_size;
} }
_lock.unlock(); _lock.unlock();
return 0; return 0;
@ -415,7 +417,7 @@ int SDBlockDevice::read(void *b, bd_addr_t addr, bd_size_t size)
while (size > 0) { while (size > 0) {
if(SDCARD_V2HC == _card_type) { if(SDCARD_V2HC == _card_type) {
// SDHC and SDXC Cards (CCS=1) use block unit address (512 Bytes unit) // SDHC and SDXC Cards (CCS=1) use block unit address (512 Bytes unit)
block = addr / 512; block = addr / _block_size;
}else { }else {
// SDSC Card (CCS=0) uses byte unit address // SDSC Card (CCS=0) uses byte unit address
block = addr; block = addr;
@ -427,10 +429,10 @@ int SDBlockDevice::read(void *b, bd_addr_t addr, bd_size_t size)
} }
// receive the data // receive the data
_read(buffer, 512); _read(buffer, _block_size);
buffer += 512; buffer += _block_size;
addr += 512; addr += _block_size;
size -= 512; size -= _block_size;
} }
_lock.unlock(); _lock.unlock();
return 0; return 0;
@ -443,17 +445,17 @@ int SDBlockDevice::erase(bd_addr_t addr, bd_size_t size)
bd_size_t SDBlockDevice::get_read_size() const bd_size_t SDBlockDevice::get_read_size() const
{ {
return 512; return _block_size;
} }
bd_size_t SDBlockDevice::get_program_size() const bd_size_t SDBlockDevice::get_program_size() const
{ {
return 512; return _block_size;
} }
bd_size_t SDBlockDevice::get_erase_size() const bd_size_t SDBlockDevice::get_erase_size() const
{ {
return 512; return _block_size;
} }
bd_size_t SDBlockDevice::size() const bd_size_t SDBlockDevice::size() const
@ -464,7 +466,7 @@ bd_size_t SDBlockDevice::size() const
sectors = _sectors; sectors = _sectors;
} }
_lock.unlock(); _lock.unlock();
return 512*sectors; return _block_size*sectors;
} }
void SDBlockDevice::debug(bool dbg) void SDBlockDevice::debug(bool dbg)
@ -702,7 +704,6 @@ uint32_t SDBlockDevice::_sd_sectors() {
switch (csd_structure) { switch (csd_structure) {
case 0: case 0:
_block_size = 512;
c_size = ext_bits(csd, 73, 62); c_size = ext_bits(csd, 73, 62);
c_size_mult = ext_bits(csd, 49, 47); c_size_mult = ext_bits(csd, 49, 47);
read_bl_len = ext_bits(csd, 83, 80); read_bl_len = ext_bits(csd, 83, 80);
@ -711,12 +712,11 @@ uint32_t SDBlockDevice::_sd_sectors() {
mult = 1 << (c_size_mult + 2); mult = 1 << (c_size_mult + 2);
blocknr = (c_size + 1) * mult; blocknr = (c_size + 1) * mult;
capacity = blocknr * block_len; capacity = blocknr * block_len;
blocks = capacity / 512; blocks = capacity / _block_size;
debug_if(_dbg, "\n\rSDBlockDevice\n\rc_size: %d \n\rcapacity: %ld \n\rsectors: %lld\n\r", c_size, capacity, blocks); debug_if(_dbg, "\n\rSDBlockDevice\n\rc_size: %d \n\rcapacity: %ld \n\rsectors: %lld\n\r", c_size, capacity, blocks);
break; break;
case 1: case 1:
_block_size = 512;
hc_c_size = ext_bits(csd, 63, 48); hc_c_size = ext_bits(csd, 63, 48);
blocks = (hc_c_size+1)*1024; blocks = (hc_c_size+1)*1024;
debug_if(_dbg, "\n\rSDHC Card \n\rhc_c_size: %d\n\rcapacity: %lld \n\rsectors: %lld\n\r", hc_c_size, blocks*512, blocks); debug_if(_dbg, "\n\rSDHC Card \n\rhc_c_size: %d\n\rcapacity: %lld \n\rsectors: %lld\n\r", hc_c_size, blocks*512, blocks);