distortos  v0.7.0
object-oriented C++ RTOS for microcontrollers
SdCard.hpp
Go to the documentation of this file.
1 
12 #ifndef INCLUDE_DISTORTOS_DEVICES_MEMORY_SDCARD_HPP_
13 #define INCLUDE_DISTORTOS_DEVICES_MEMORY_SDCARD_HPP_
14 
17 
18 #include "distortos/Mutex.hpp"
19 
20 namespace distortos
21 {
22 
23 namespace devices
24 {
25 
26 class SdMmcCardLowLevel;
27 
36 class SdCard : public BlockDevice
37 {
38 public:
39 
41  constexpr static size_t blockSize {512};
42 
51  constexpr explicit SdCard(SdMmcCardLowLevel& sdMmcCard, const bool _4BitBusMode = true,
52  const uint32_t maxClockFrequency = 25000000) :
53  busyDeadline_{},
54  mutex_{Mutex::Type::recursive, Mutex::Protocol::priorityInheritance},
55  sdCard_{sdMmcCard},
56  auSize_{},
57  blocksCount_{},
58  maxClockFrequency_{maxClockFrequency},
60  rca_{},
63  _4BitBusMode_{_4BitBusMode},
65  openCount_{}
66  {
67 
68  }
69 
78  ~SdCard() override;
79 
94  int close() override;
95 
116  int erase(uint64_t address, uint64_t size) override;
117 
122  size_t getBlockSize() const override;
123 
128  uint64_t getSize() const override;
129 
145  void lock() override;
146 
159  int open() override;
160 
182  int read(uint64_t address, void* buffer, size_t size) override;
183 
193  int synchronize() override;
194 
205  void unlock() override;
206 
228  int write(uint64_t address, const void* buffer, size_t size) override;
229 
230 private:
231 
236  void deinitialize();
237 
256  int initialize();
257 
260 
263 
266 
268  uint32_t auSize_;
269 
271  size_t blocksCount_;
272 
275 
277  uint16_t eraseTimeoutMs_;
278 
280  uint16_t rca_;
281 
283  uint16_t readTimeoutMs_;
284 
286  uint16_t writeTimeoutMs_;
287 
290 
293 
295  uint8_t openCount_;
296 };
297 
298 } // namespace devices
299 
300 } // namespace distortos
301 
302 #endif // INCLUDE_DISTORTOS_DEVICES_MEMORY_SDCARD_HPP_
constexpr SdCard(SdMmcCardLowLevel &sdMmcCard, const bool _4BitBusMode=true, const uint32_t maxClockFrequency=25000000)
SdCard's constructor.
Definition: SdCard.hpp:51
Mutex mutex_
mutex used to serialize access to this object
Definition: SdCard.hpp:262
uint32_t maxClockFrequency_
max allowed clock frequency of SD card, Hz
Definition: SdCard.hpp:274
int read(uint64_t address, void *buffer, size_t size) override
Reads data from SD card.
Definition: SdCard.cpp:1491
void unlock() override
Unlocks the device which was previously locked by current thread.
Definition: SdCard.cpp:1552
uint64_t getSize() const override
Definition: SdCard.cpp:1442
int close() override
Closes SD card.
Definition: SdCard.cpp:1350
uint8_t openCount_
number of times this device was opened but not yet closed
Definition: SdCard.hpp:295
SynchronousSdMmcCardLowLevel is a synchronous wrapper for SdMmcCardLowLevel which implements SdMmcCar...
Definition: SynchronousSdMmcCardLowLevel.hpp:29
size_t blocksCount_
number of blocks available on SD card
Definition: SdCard.hpp:271
BlockDevice class header.
void deinitialize()
Deinitializes SD card.
Definition: SdCard.cpp:1624
uint16_t rca_
relative card address
Definition: SdCard.hpp:280
std::chrono::time_point< TickClock > time_point
basic time_point type of clock
Definition: TickClock.hpp:42
int write(uint64_t address, const void *buffer, size_t size) override
Writes data to SD card.
Definition: SdCard.cpp:1558
uint16_t readTimeoutMs_
timeout of read operation, milliseconds
Definition: SdCard.hpp:283
size_t getBlockSize() const override
Definition: SdCard.cpp:1437
Definition: SdCard.hpp:36
SynchronousSdMmcCardLowLevel sdCard_
synchronous wrapper for low-level implementation of SdMmcCardLowLevel interface
Definition: SdCard.hpp:265
Mutex class header.
Definition: SdMmcCardLowLevel.hpp:31
static constexpr size_t blockSize
size of block, bytes
Definition: SdCard.hpp:41
int erase(uint64_t address, uint64_t size) override
Erases blocks on a SD card.
Definition: SdCard.cpp:1368
uint16_t writeTimeoutMs_
timeout of write operation, milliseconds
Definition: SdCard.hpp:286
bool _4BitBusMode_
selects whether 1-bit (false) or 4-bit (true) bus mode will be used
Definition: SdCard.hpp:289
~SdCard() override
SdCard's destructor.
Definition: SdCard.cpp:1345
void lock() override
Locks the device for exclusive use by current thread.
Definition: SdCard.cpp:1447
Top-level namespace of distortos project.
Definition: buttons.hpp:33
Mutex is the basic synchronization primitive.
Definition: Mutex.hpp:30
uint32_t auSize_
size of AU, bytes
Definition: SdCard.hpp:268
uint16_t eraseTimeoutMs_
timeout of erase operation of single AU, milliseconds
Definition: SdCard.hpp:277
Definition: BlockDevice.hpp:30
int synchronize() override
Synchronizes state of SD card, ensuring all cached writes are finished.
Definition: SdCard.cpp:1543
int initialize()
Initializes SD card.
Definition: SdCard.cpp:1636
SynchronousSdMmcCardLowLevel class header.
bool blockAddressing_
selects whether card uses byte (false) or block (true) addressing
Definition: SdCard.hpp:292
int open() override
Opens SD card.
Definition: SdCard.cpp:1453
TickClock::time_point busyDeadline_
current deadline of waiting while card is busy
Definition: SdCard.hpp:259