SDBlockDevice: Convert to Chrono

pull/12904/head
Kevin Bracey 2020-03-03 16:53:16 +02:00
parent d1ae0d570c
commit f35667fcd4
2 changed files with 8 additions and 7 deletions

View File

@ -149,6 +149,7 @@
#include <errno.h> #include <errno.h>
using namespace mbed; using namespace mbed;
using namespace std::chrono;
#ifndef MBED_CONF_SD_CMD_TIMEOUT #ifndef MBED_CONF_SD_CMD_TIMEOUT
#define MBED_CONF_SD_CMD_TIMEOUT 5000 /*!< Timeout in ms for response */ #define MBED_CONF_SD_CMD_TIMEOUT 5000 /*!< Timeout in ms for response */
@ -163,7 +164,7 @@ using namespace mbed;
#endif #endif
#define SD_COMMAND_TIMEOUT MBED_CONF_SD_CMD_TIMEOUT #define SD_COMMAND_TIMEOUT milliseconds{MBED_CONF_SD_CMD_TIMEOUT}
#define SD_CMD0_GO_IDLE_STATE_RETRIES MBED_CONF_SD_CMD0_IDLE_STATE_RETRIES #define SD_CMD0_GO_IDLE_STATE_RETRIES MBED_CONF_SD_CMD0_IDLE_STATE_RETRIES
#define SD_DBG 0 /*!< 1 - Enable debugging */ #define SD_DBG 0 /*!< 1 - Enable debugging */
#define SD_CMD_TRACE 0 /*!< 1 - Enable SD command tracing */ #define SD_CMD_TRACE 0 /*!< 1 - Enable SD command tracing */
@ -355,7 +356,7 @@ int SDBlockDevice::_initialise_card()
_spi_timer.start(); _spi_timer.start();
do { do {
status = _cmd(ACMD41_SD_SEND_OP_COND, arg, 1, &response); status = _cmd(ACMD41_SD_SEND_OP_COND, arg, 1, &response);
} while ((response & R1_IDLE_STATE) && (_spi_timer.read_ms() < SD_COMMAND_TIMEOUT)); } while ((response & R1_IDLE_STATE) && (_spi_timer.elapsed_time() < SD_COMMAND_TIMEOUT));
_spi_timer.stop(); _spi_timer.stop();
// Initialization complete: ACMD41 successful // Initialization complete: ACMD41 successful
@ -894,7 +895,7 @@ uint32_t SDBlockDevice::_go_idle_state()
if (R1_IDLE_STATE == response) { if (R1_IDLE_STATE == response) {
break; break;
} }
rtos::ThisThread::sleep_for(1); rtos::ThisThread::sleep_for(1ms);
} }
return response; return response;
} }
@ -1093,7 +1094,7 @@ bool SDBlockDevice::_wait_token(uint8_t token)
_spi_timer.stop(); _spi_timer.stop();
return true; return true;
} }
} while (_spi_timer.read_ms() < 300); // Wait for 300 msec for start token } while (_spi_timer.elapsed_time() < 300ms); // Wait for 300 msec for start token
_spi_timer.stop(); _spi_timer.stop();
debug_if(SD_DBG, "_wait_token: timeout\n"); debug_if(SD_DBG, "_wait_token: timeout\n");
return false; return false;
@ -1101,7 +1102,7 @@ bool SDBlockDevice::_wait_token(uint8_t token)
// SPI function to wait till chip is ready // SPI function to wait till chip is ready
// The host controller should wait for end of the process until DO goes high (a 0xFF is received). // The host controller should wait for end of the process until DO goes high (a 0xFF is received).
bool SDBlockDevice::_wait_ready(uint16_t ms) bool SDBlockDevice::_wait_ready(std::chrono::duration<uint32_t, std::milli> timeout)
{ {
uint8_t response; uint8_t response;
_spi_timer.reset(); _spi_timer.reset();
@ -1112,7 +1113,7 @@ bool SDBlockDevice::_wait_ready(uint16_t ms)
_spi_timer.stop(); _spi_timer.stop();
return true; return true;
} }
} while (_spi_timer.read_ms() < ms); } while (_spi_timer.elapsed_time() < timeout);
_spi_timer.stop(); _spi_timer.stop();
return false; return false;
} }

View File

@ -267,7 +267,7 @@ private:
void _spi_wait(uint8_t count); void _spi_wait(uint8_t count);
bool _wait_token(uint8_t token); /**< Wait for token */ bool _wait_token(uint8_t token); /**< Wait for token */
bool _wait_ready(uint16_t ms = 300); /**< 300ms default wait for card to be ready */ bool _wait_ready(std::chrono::duration<uint32_t, std::milli> timeout = std::chrono::milliseconds{300}); /**< 300ms default wait for card to be ready */
int _read(uint8_t *buffer, uint32_t length); int _read(uint8_t *buffer, uint32_t length);
int _read_bytes(uint8_t *buffer, uint32_t length); int _read_bytes(uint8_t *buffer, uint32_t length);
uint8_t _write(const uint8_t *buffer, uint8_t token, uint32_t length); uint8_t _write(const uint8_t *buffer, uint8_t token, uint32_t length);