distortos  v0.7.0
object-oriented C++ RTOS for microcontrollers
SdCardSpiBased.cpp File Reference

SdCardSpiBased class implementation. More...

Include dependency graph for SdCardSpiBased.cpp:

Classes

struct  distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::CsdV1
 fields unique to CSD version 1.0 More...
 
struct  distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::CsdV2
 fields unique to CSD version 2.0 More...
 
struct  distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::Csd
 CSD. More...
 
struct  distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::R2Response
 R2 response. More...
 
struct  distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::R3Response
 R3 response. More...
 
struct  distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::R7Response
 R7 response. More...
 
struct  distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::SdStatus
 SD Status. More...
 
class  distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::SelectGuard
 select guard for SD card connected via SPI More...
 

Namespaces

 distortos
 Top-level namespace of distortos project.
 
 distortos::devices
 Device drivers.
 

Typedefs

using distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::Uint8Range = estd::ContiguousRange< uint8_t >
 range of uint8_t elements More...
 
using distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::ConstUint8Range = estd::ContiguousRange< const uint8_t >
 range of const uint8_t elements More...
 

Functions

uint32_t distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::extractBits (const ConstUint8Range range, const size_t index, const size_t size)
 Extracts up to 32 bits from data range. More...
 
Csd distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::decodeCsd (const std::array< uint8_t, 16 > &buffer)
 Decodes raw data into CSD. More...
 
SdStatus distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::decodeSdStatus (const std::array< uint8_t, 64 > &buffer)
 Decodes raw data into SD Status. More...
 
template<typename Functor >
std::pair< int, uint8_t > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::waitWhile (const SpiMasterHandle &spiMasterHandle, const distortos::TickClock::duration duration, Functor functor)
 Waits while byte received via SPI satisfies predicate. More...
 
int distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::waitWhileBusy (const SpiMasterHandle &spiMasterHandle, const distortos::TickClock::duration duration)
 Waits while SD card connected via SPI is busy. More...
 
int distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::readDataBlock (const SpiMasterHandle &spiMasterHandle, void *const buffer, const size_t size, const distortos::TickClock::duration duration)
 Reads data block from SD card connected via SPI. More...
 
int distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::writeDataBlock (const SpiMasterHandle &spiMasterHandle, const uint8_t token, const void *const buffer, const size_t size, const distortos::TickClock::duration duration)
 Writes data block to SD card connected via SPI. More...
 
int distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::readResponse (const SpiMasterHandle &spiMasterHandle, const Uint8Range buffer)
 Reads response from SD card connected via SPI. More...
 
std::pair< int, uint8_t > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::readR1 (const SpiMasterHandle &spiMasterHandle)
 Reads R1 response from SD card connected via SPI. More...
 
std::pair< int, R2Response > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::readR2 (const SpiMasterHandle &spiMasterHandle)
 Reads R2 response from SD card connected via SPI. More...
 
std::pair< int, R3Response > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::readR3 (const SpiMasterHandle &spiMasterHandle)
 Reads R3 response from SD card connected via SPI. More...
 
std::pair< int, R7Response > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::readR7 (const SpiMasterHandle &spiMasterHandle)
 Reads R7 response from SD card connected via SPI. More...
 
int distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::writeCmd (const SpiMasterHandle &spiMasterHandle, const uint8_t command, const uint32_t argument={}, const uint8_t crc7={}, const bool stuffByte={})
 Writes regular (CMD) command to SD card connected via SPI. More...
 
std::pair< int, uint8_t > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::writeCmdReadR1 (const SpiMasterHandle &spiMasterHandle, const uint8_t command, const uint32_t argument={}, const uint8_t crc7={}, const bool stuffByte={})
 Writes regular (CMD) command and reads R1 response to/from SD card connected via SPI. More...
 
std::pair< int, R3Response > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::writeCmdReadR3 (const SpiMasterHandle &spiMasterHandle, const uint8_t command, const uint32_t argument={}, const uint8_t crc7={}, const bool stuffByte={})
 Writes regular (CMD) command and reads R3 response to/from SD card connected via SPI. More...
 
std::pair< int, R7Response > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::writeCmdReadR7 (const SpiMasterHandle &spiMasterHandle, const uint8_t command, const uint32_t argument={}, const uint8_t crc7={}, const bool stuffByte={})
 Writes regular (CMD) command and reads R7 response to/from SD card connected via SPI. More...
 
std::pair< int, uint8_t > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::executeCmd0 (const SpiMasterHandle &spiMasterHandle)
 Executes CMD0 command on SD card connected via SPI. More...
 
std::tuple< int, uint8_t, bool > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::executeCmd8 (const SpiMasterHandle &spiMasterHandle)
 Executes CMD8 command on SD card connected via SPI. More...
 
std::tuple< int, uint8_t, std::array< uint8_t, 16 > > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::executeCmd9 (const SpiMasterHandle &spiMasterHandle)
 Executes CMD9 command on SD card connected via SPI. More...
 
std::pair< int, uint8_t > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::executeCmd12 (const SpiMasterHandle &spiMasterHandle, const distortos::TickClock::duration duration)
 Executes CMD12 command on SD card connected via SPI. More...
 
std::pair< int, uint8_t > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::executeCmd16 (const SpiMasterHandle &spiMasterHandle, const uint32_t blockLength)
 Executes CMD16 command on SD card connected via SPI. More...
 
std::pair< int, uint8_t > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::executeCmd17 (const SpiMasterHandle &spiMasterHandle, const uint32_t address)
 Executes CMD17 command on SD card connected via SPI. More...
 
std::pair< int, uint8_t > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::executeCmd18 (const SpiMasterHandle &spiMasterHandle, const uint32_t address)
 Executes CMD18 command on SD card connected via SPI. More...
 
std::pair< int, uint8_t > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::executeCmd24 (const SpiMasterHandle &spiMasterHandle, const uint32_t address)
 Executes CMD24 command on SD card connected via SPI. More...
 
std::pair< int, uint8_t > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::executeCmd25 (const SpiMasterHandle &spiMasterHandle, const uint32_t address)
 Executes CMD25 command on SD card connected via SPI. More...
 
std::pair< int, uint8_t > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::executeCmd32 (const SpiMasterHandle &spiMasterHandle, const uint32_t address)
 Executes CMD32 command on SD card connected via SPI. More...
 
std::pair< int, uint8_t > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::executeCmd33 (const SpiMasterHandle &spiMasterHandle, const uint32_t address)
 Executes CMD33 command on SD card connected via SPI. More...
 
std::pair< int, uint8_t > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::executeCmd38 (const SpiMasterHandle &spiMasterHandle, const distortos::TickClock::duration duration)
 Executes CMD38 command on SD card connected via SPI. More...
 
std::pair< int, uint8_t > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::executeCmd55 (const SpiMasterHandle &spiMasterHandle)
 Executes CMD55 command on SD card connected via SPI. More...
 
std::pair< int, R3Response > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::executeCmd58 (const SpiMasterHandle &spiMasterHandle)
 Executes CMD58 command on SD card connected via SPI. More...
 
int distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::writeAcmd (const SpiMasterHandle &spiMasterHandle, const uint8_t command, const uint32_t argument={}, const uint8_t crc7={}, const bool stuffByte={})
 Writes application (ACMD) command to SD card connected via SPI. More...
 
std::pair< int, uint8_t > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::writeAcmdReadR1 (const SpiMasterHandle &spiMasterHandle, const uint8_t command, const uint32_t argument={}, const uint8_t crc7={}, const bool stuffByte={})
 Writes application (ACMD) command and reads R1 response to/from SD card connected via SPI. More...
 
std::pair< int, R2Response > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::writeAcmdReadR2 (const SpiMasterHandle &spiMasterHandle, const uint8_t command, const uint32_t argument={}, const uint8_t crc7={}, const bool stuffByte={})
 Writes application (ACMD) command and reads R2 response to/from SD card connected via SPI. More...
 
std::tuple< int, R2Response, std::array< uint8_t, 64 > > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::executeAcmd13 (const SpiMasterHandle &spiMasterHandle, const distortos::TickClock::duration duration)
 Executes ACMD13 command on SD card connected via SPI. More...
 
std::pair< int, uint8_t > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::executeAcmd23 (const SpiMasterHandle &spiMasterHandle, const uint32_t blocksCount)
 Executes ACMD23 command on SD card connected via SPI. More...
 
std::pair< int, uint8_t > distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::executeAcmd41 (const SpiMasterHandle &spiMasterHandle, const bool hcs)
 Executes ACMD41 command on SD card connected via SPI. More...
 

Variables

constexpr uint8_t distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::dataResponseTokenMask {0b00011111}
 mask for data response token More...
 
constexpr uint8_t distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::dataResponseTokenDataAccepted {0b010 << 1 | 1}
 data response token - data accepted More...
 
constexpr uint8_t distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::startBlockToken {0b11111110}
 control token - start block More...
 
constexpr uint8_t distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::startBlockWriteToken {0b11111100}
 control token - start block for CMD25 More...
 
constexpr uint8_t distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::stopTranToken {0b11111101}
 control token - stop tran More...
 
constexpr uint8_t distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::r1InIdleStateMask {1 << 0}
 R1 - in idle state. More...
 
constexpr uint32_t distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::ocrCcsMask {1 << 30}
 OCR - CCS bit mask. More...
 
constexpr uint8_t distortos::devices::anonymous_namespace{SdCardSpiBased.cpp}::acmd41HcsPosition {30}
 ACMD41 argument - HCS bit position. More...
 

Detailed Description

SdCardSpiBased class implementation.

Author
Copyright (C) 2018-2019 Kamil Szczygiel http://www.distortec.com http://www.freddiechopin.info
License
This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.