distortos  v0.7.0
object-oriented C++ RTOS for microcontrollers
SdCardSpiBased.hpp
Go to the documentation of this file.
1 
12 #ifndef INCLUDE_DISTORTOS_DEVICES_MEMORY_SDCARDSPIBASED_HPP_
13 #define INCLUDE_DISTORTOS_DEVICES_MEMORY_SDCARDSPIBASED_HPP_
14 
16 
17 #include "distortos/Mutex.hpp"
18 
19 namespace distortos
20 {
21 
22 namespace devices
23 {
24 
25 class OutputPin;
26 class SpiMaster;
27 
37 {
38 public:
39 
41  constexpr static size_t blockSize {512};
42 
51  constexpr SdCardSpiBased(SpiMaster& spiMaster, OutputPin& slaveSelectPin,
52  const uint32_t clockFrequency = 25000000) :
53  mutex_{Mutex::Type::recursive, Mutex::Protocol::priorityInheritance},
54  blocksCount_{},
55  auSize_{},
56  clockFrequency_{clockFrequency},
57  slaveSelectPin_{slaveSelectPin},
58  spiMaster_{spiMaster},
63  openCount_{}
64  {
65 
66  }
67 
74  ~SdCardSpiBased() override;
75 
89  int close() override;
90 
109  int erase(uint64_t address, uint64_t size) override;
110 
115  size_t getBlockSize() const override;
116 
121  uint64_t getSize() const override;
122 
138  void lock() override;
139 
152  int open() override;
153 
175  int read(uint64_t address, void* buffer, size_t size) override;
176 
185  int synchronize() override;
186 
197  void unlock() override;
198 
222  int write(uint64_t address, const void* buffer, size_t size) override;
223 
224 private:
225 
230  void deinitialize();
231 
250  int initialize();
251 
254 
256  size_t blocksCount_;
257 
259  uint32_t auSize_;
260 
262  uint32_t clockFrequency_;
263 
266 
269 
271  uint16_t eraseTimeoutMs_;
272 
274  uint16_t readTimeoutMs_;
275 
277  uint16_t writeTimeoutMs_;
278 
281 
283  uint8_t openCount_;
284 };
285 
286 } // namespace devices
287 
288 } // namespace distortos
289 
290 #endif // INCLUDE_DISTORTOS_DEVICES_MEMORY_SDCARDSPIBASED_HPP_
void unlock() override
Unlocks the device which was previously locked by current thread.
Definition: SdCardSpiBased.cpp:1357
size_t getBlockSize() const override
Definition: SdCardSpiBased.cpp:1242
uint32_t auSize_
size of AU, bytes
Definition: SdCardSpiBased.hpp:259
BlockDevice class header.
static constexpr size_t blockSize
size of block, bytes
Definition: SdCardSpiBased.hpp:41
int erase(uint64_t address, uint64_t size) override
Erases blocks on a SD card connected via SPI.
Definition: SdCardSpiBased.cpp:1178
Definition: OutputPin.hpp:29
bool blockAddressing_
selects whether card uses byte (false) or block (true) addressing
Definition: SdCardSpiBased.hpp:280
void deinitialize()
Deinitializes SD card connected via SPI.
Definition: SdCardSpiBased.cpp:1439
~SdCardSpiBased() override
SdCardSpiBased's destructor.
Definition: SdCardSpiBased.cpp:1157
OutputPin & slaveSelectPin_
reference to slave select pin of this SD card
Definition: SdCardSpiBased.hpp:265
Mutex class header.
int initialize()
Initializes SD card connected via SPI.
Definition: SdCardSpiBased.cpp:1449
int open() override
Opens SD card connected via SPI.
Definition: SdCardSpiBased.cpp:1258
int read(uint64_t address, void *buffer, size_t size) override
Reads data from SD card connected via SPI.
Definition: SdCardSpiBased.cpp:1296
size_t blocksCount_
number of blocks available on SD card
Definition: SdCardSpiBased.hpp:256
uint16_t eraseTimeoutMs_
timeout of erase operation of single AU, milliseconds
Definition: SdCardSpiBased.hpp:271
constexpr SdCardSpiBased(SpiMaster &spiMaster, OutputPin &slaveSelectPin, const uint32_t clockFrequency=25000000)
SdCardSpiBased's constructor.
Definition: SdCardSpiBased.hpp:51
uint16_t readTimeoutMs_
timeout of read operation, milliseconds
Definition: SdCardSpiBased.hpp:274
Definition: SdCardSpiBased.hpp:36
Top-level namespace of distortos project.
Definition: buttons.hpp:33
Mutex is the basic synchronization primitive.
Definition: Mutex.hpp:30
uint64_t getSize() const override
Definition: SdCardSpiBased.cpp:1247
Mutex mutex_
mutex used to serialize access to this object
Definition: SdCardSpiBased.hpp:253
Definition: BlockDevice.hpp:30
int synchronize() override
Synchronizes state of SD card connected via SPI, ensuring all cached writes are finished.
Definition: SdCardSpiBased.cpp:1350
uint8_t openCount_
number of times this device was opened but not yet closed
Definition: SdCardSpiBased.hpp:283
uint16_t writeTimeoutMs_
timeout of write operation, milliseconds
Definition: SdCardSpiBased.hpp:277
Definition: SpiMaster.hpp:37
SpiMaster & spiMaster_
reference to SPI master to which this SD card is connected
Definition: SdCardSpiBased.hpp:268
void lock() override
Locks the device for exclusive use by current thread.
Definition: SdCardSpiBased.cpp:1252
uint32_t clockFrequency_
desired clock frequency of SD card, Hz
Definition: SdCardSpiBased.hpp:262
int close() override
Closes SD card connected via SPI.
Definition: SdCardSpiBased.cpp:1162
int write(uint64_t address, const void *buffer, size_t size) override
Writes data to SD card connected via SPI.
Definition: SdCardSpiBased.cpp:1363