Skip to content

Commit dbc75ef

Browse files
author
Deepika
committed
Change mutex to PlatformMutex
1 parent 790d207 commit dbc75ef

File tree

2 files changed

+38
-34
lines changed

2 files changed

+38
-34
lines changed

SDBlockDevice.cpp

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@
242242
#define SPI_READ_ERROR_OFR (0x1 << 3) /*!< Out of Range */
243243

244244
SDBlockDevice::SDBlockDevice(PinName mosi, PinName miso, PinName sclk, PinName cs, uint64_t hz)
245-
: _spi(mosi, miso, sclk), _cs(cs), _is_initialized(0)
245+
: _sectors(0), _spi(mosi, miso, sclk), _cs(cs), _is_initialized(0)
246246
{
247247
_cs = 1;
248248
_card_type = SDCARD_NONE;
@@ -253,6 +253,7 @@ SDBlockDevice::SDBlockDevice(PinName mosi, PinName miso, PinName sclk, PinName c
253253

254254
// Only HC block size is supported.
255255
_block_size = BLOCK_SIZE_HC;
256+
_erase_size = BLOCK_SIZE_HC;
256257
}
257258

258259
SDBlockDevice::~SDBlockDevice()
@@ -346,44 +347,45 @@ int SDBlockDevice::_initialise_card()
346347

347348
int SDBlockDevice::init()
348349
{
349-
_lock.lock();
350+
lock();
350351
int err = _initialise_card();
351352
_is_initialized = (err == BD_ERROR_OK);
352353
if (!_is_initialized) {
353354
debug_if(SD_DBG, "Fail to initialize card\n");
354-
_lock.unlock();
355+
unlock();
355356
return err;
356357
}
357358
debug_if(SD_DBG, "init card = %d\n", _is_initialized);
358359
_sectors = _sd_sectors();
359360
// CMD9 failed
360361
if (0 == _sectors) {
361-
_lock.unlock();
362+
unlock();
362363
return BD_ERROR_DEVICE_ERROR;
363364
}
364365

365366
// Set block length to 512 (CMD16)
366367
if (_cmd(CMD16_SET_BLOCKLEN, _block_size) != 0) {
367368
debug_if(SD_DBG, "Set %d-byte block timed out\n", _block_size);
368-
_lock.unlock();
369+
unlock();
369370
return BD_ERROR_DEVICE_ERROR;
370371
}
371372

372373
// Set SCK for data transfer
373374
err = _freq();
374375
if (err) {
375-
_lock.unlock();
376+
unlock();
376377
return err;
377378
}
378-
_lock.unlock();
379+
unlock();
379380
return BD_ERROR_OK;
380381
}
381382

382383
int SDBlockDevice::deinit()
383384
{
384-
_lock.lock();
385+
lock();
385386
_is_initialized = false;
386-
_lock.unlock();
387+
_sectors = 0;
388+
unlock();
387389
return 0;
388390
}
389391

@@ -394,9 +396,9 @@ int SDBlockDevice::program(const void *b, bd_addr_t addr, bd_size_t size)
394396
return SD_BLOCK_DEVICE_ERROR_PARAMETER;
395397
}
396398

397-
_lock.lock();
399+
lock();
398400
if (!_is_initialized) {
399-
_lock.unlock();
401+
unlock();
400402
return SD_BLOCK_DEVICE_ERROR_NO_INIT;
401403
}
402404

@@ -417,7 +419,7 @@ int SDBlockDevice::program(const void *b, bd_addr_t addr, bd_size_t size)
417419
if (blockCnt == 1) {
418420
// Single block write command
419421
if (BD_ERROR_OK != (status = _cmd(CMD24_WRITE_BLOCK, addr))) {
420-
_lock.unlock();
422+
unlock();
421423
return status;
422424
}
423425

@@ -435,7 +437,7 @@ int SDBlockDevice::program(const void *b, bd_addr_t addr, bd_size_t size)
435437

436438
// Multiple block write command
437439
if (BD_ERROR_OK != (status = _cmd(CMD25_WRITE_MULTIPLE_BLOCK, addr))) {
438-
_lock.unlock();
440+
unlock();
439441
return status;
440442
}
441443

@@ -457,7 +459,7 @@ int SDBlockDevice::program(const void *b, bd_addr_t addr, bd_size_t size)
457459
}
458460

459461
_deselect();
460-
_lock.unlock();
462+
unlock();
461463
return status;
462464
}
463465

@@ -467,9 +469,9 @@ int SDBlockDevice::read(void *b, bd_addr_t addr, bd_size_t size)
467469
return SD_BLOCK_DEVICE_ERROR_PARAMETER;
468470
}
469471

470-
_lock.lock();
472+
lock();
471473
if (!_is_initialized) {
472-
_lock.unlock();
474+
unlock();
473475
return SD_BLOCK_DEVICE_ERROR_PARAMETER;
474476
}
475477

@@ -490,7 +492,7 @@ int SDBlockDevice::read(void *b, bd_addr_t addr, bd_size_t size)
490492
status = _cmd(CMD17_READ_SINGLE_BLOCK, addr);
491493
}
492494
if (BD_ERROR_OK != status) {
493-
_lock.unlock();
495+
unlock();
494496
return status;
495497
}
496498

@@ -509,7 +511,7 @@ int SDBlockDevice::read(void *b, bd_addr_t addr, bd_size_t size)
509511
if (size > _block_size) {
510512
status = _cmd(CMD12_STOP_TRANSMISSION, 0x0);
511513
}
512-
_lock.unlock();
514+
unlock();
513515
return status;
514516
}
515517

@@ -519,9 +521,9 @@ int SDBlockDevice::erase(bd_addr_t addr, bd_size_t size)
519521
return SD_BLOCK_DEVICE_ERROR_PARAMETER;
520522
}
521523

522-
_lock.lock();
524+
lock();
523525
if (!_is_initialized) {
524-
_lock.unlock();
526+
unlock();
525527
return SD_BLOCK_DEVICE_ERROR_NO_INIT;
526528
}
527529
int status = BD_ERROR_OK;
@@ -544,17 +546,17 @@ int SDBlockDevice::erase(bd_addr_t addr, bd_size_t size)
544546

545547
// Start lba sent in start command
546548
if (BD_ERROR_OK != (status = _cmd(CMD32_ERASE_WR_BLK_START_ADDR, addr))) {
547-
_lock.unlock();
549+
unlock();
548550
return status;
549551
}
550552

551553
// End lba = addr+size sent in end addr command
552554
if (BD_ERROR_OK != (status = _cmd(CMD33_ERASE_WR_BLK_END_ADDR, addr+size))) {
553-
_lock.unlock();
555+
unlock();
554556
return status;
555557
}
556558
status = _cmd(CMD38_ERASE, 0x0);
557-
_lock.unlock();
559+
unlock();
558560
return status;
559561
}
560562

@@ -575,13 +577,7 @@ bd_size_t SDBlockDevice::get_erase_size() const
575577

576578
bd_size_t SDBlockDevice::size() const
577579
{
578-
bd_size_t sectors = 0;
579-
_lock.lock();
580-
if (_is_initialized) {
581-
sectors = _sectors;
582-
}
583-
_lock.unlock();
584-
return _block_size*sectors;
580+
return _block_size*_sectors;
585581
}
586582

587583
void SDBlockDevice::debug(bool dbg)
@@ -591,10 +587,10 @@ void SDBlockDevice::debug(bool dbg)
591587

592588
int SDBlockDevice::frequency(uint64_t freq)
593589
{
594-
_lock.lock();
590+
lock();
595591
_transfer_sck = freq;
596592
int err = _freq();
597-
_lock.unlock();
593+
unlock();
598594
return err;
599595
}
600596

SDBlockDevice.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
#include "BlockDevice.h"
2929
#include "mbed.h"
30-
30+
#include "platform/PlatformMutex.h"
3131

3232
/** Access an SD Card using SPI
3333
*
@@ -219,7 +219,15 @@ class SDBlockDevice : public BlockDevice {
219219
void _select();
220220
void _deselect();
221221

222-
mutable Mutex _lock;
222+
virtual void lock() {
223+
_mutex.lock();
224+
}
225+
226+
virtual void unlock() {
227+
_mutex.unlock();
228+
}
229+
230+
PlatformMutex _mutex;
223231
uint32_t _block_size;
224232
uint32_t _erase_size;
225233
bool _is_initialized;

0 commit comments

Comments
 (0)