### Warning: This version has major changes so it may be unstable. | ### Warning: This version has major changes so it may be unstable. | ||||
Teensy 3.5/3.6 SDIO support has been added. Try the TeensySdioDemo example. | |||||
Many other example will work with Teensy SDIO if you use the SdFatSdio classes | |||||
and call begin with no parameters. | |||||
``` | |||||
SdFatSdio sd; | |||||
.... | |||||
if (!sd.begin()) { | |||||
// Handle failure. | |||||
} | |||||
``` | |||||
Recent versions of the Arduino IDE have bugs that may cause SdFat-beta to crash. | Recent versions of the Arduino IDE have bugs that may cause SdFat-beta to crash. | ||||
https://forum.arduino.cc/index.php?topic=419264.0 | https://forum.arduino.cc/index.php?topic=419264.0 | ||||
Please continue by reading the html documentation. | Please continue by reading the html documentation. | ||||
Updated 19 Aug 2016 | |||||
Updated 5 Sep 2016 |
// Quick hardware test. | |||||
// Quick hardware test for SPI card access. | |||||
// | // | ||||
#include <SPI.h> | #include <SPI.h> | ||||
#include "SdFat.h" | #include "SdFat.h" |
* For smaller cards this program uses FAT16 | * For smaller cards this program uses FAT16 | ||||
* and SDFormatter uses FAT12. | * and SDFormatter uses FAT12. | ||||
*/ | */ | ||||
// Print extra info for debug if DEBUG_PRINT is nonzero | |||||
#define DEBUG_PRINT 0 | |||||
#include <SPI.h> | |||||
#include "SdFat.h" | |||||
#if DEBUG_PRINT | |||||
#include "FreeStack.h" | |||||
#endif // DEBUG_PRINT | |||||
// Set USE_SDIO to zero for SPI card access. | |||||
#define USE_SDIO 0 | |||||
// | // | ||||
// Change the value of chipSelect if your hardware does | // Change the value of chipSelect if your hardware does | ||||
// not use the default value, SS. Common values are: | // not use the default value, SS. Common values are: | ||||
// Reduce max speed if errors occur. | // Reduce max speed if errors occur. | ||||
#define SPI_SPEED SD_SCK_MHZ(50) | #define SPI_SPEED SD_SCK_MHZ(50) | ||||
// Print extra info for debug if DEBUG_PRINT is nonzero | |||||
#define DEBUG_PRINT 0 | |||||
#include <SPI.h> | |||||
#include "SdFat.h" | |||||
#if DEBUG_PRINT | |||||
#include "FreeStack.h" | |||||
#endif // DEBUG_PRINT | |||||
// Serial output stream | // Serial output stream | ||||
ArduinoOutStream cout(Serial); | ArduinoOutStream cout(Serial); | ||||
#if USE_SDIO | |||||
SdioCard card; | |||||
#else // USE_SDIO | |||||
Sd2Card card; | Sd2Card card; | ||||
#endif // USE_SDIO | |||||
uint32_t cardSizeBlocks; | uint32_t cardSizeBlocks; | ||||
uint16_t cardCapacityMB; | |||||
uint32_t cardCapacityMB; | |||||
// cache for SD block | // cache for SD block | ||||
cache_t cache; | cache_t cache; | ||||
// zero FAT and root dir area on SD | // zero FAT and root dir area on SD | ||||
void clearFatDir(uint32_t bgn, uint32_t count) { | void clearFatDir(uint32_t bgn, uint32_t count) { | ||||
clearCache(false); | clearCache(false); | ||||
#if USE_SDIO | |||||
for (uint32_t i = 0; i < count; i++) { | |||||
if (!card.writeBlock(bgn + i, cache.data)) { | |||||
sdError("Clear FAT/DIR writeBlock failed"); | |||||
} | |||||
if ((i & 0XFF) == 0) { | |||||
cout << '.'; | |||||
} | |||||
} | |||||
#else // USE_SDIO | |||||
if (!card.writeStart(bgn, count)) { | if (!card.writeStart(bgn, count)) { | ||||
sdError("Clear FAT/DIR writeStart failed"); | sdError("Clear FAT/DIR writeStart failed"); | ||||
} | } | ||||
if (!card.writeStop()) { | if (!card.writeStop()) { | ||||
sdError("Clear FAT/DIR writeStop failed"); | sdError("Clear FAT/DIR writeStop failed"); | ||||
} | } | ||||
#endif // USE_SDIO | |||||
cout << endl; | cout << endl; | ||||
} | } | ||||
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||
cout << F("Quiting, invalid option entered.") << endl; | cout << F("Quiting, invalid option entered.") << endl; | ||||
return; | return; | ||||
} | } | ||||
#if USE_SDIO | |||||
if (!card.begin()) { | |||||
sdError("card.begin failed"); | |||||
} | |||||
#else // USE_SDIO | |||||
if (!card.begin(chipSelect, SPI_SPEED)) { | if (!card.begin(chipSelect, SPI_SPEED)) { | ||||
cout << F( | cout << F( | ||||
"\nSD initialization failure!\n" | "\nSD initialization failure!\n" | ||||
"Is chip select correct at the top of this program?\n"); | "Is chip select correct at the top of this program?\n"); | ||||
sdError("card.begin failed"); | sdError("card.begin failed"); | ||||
} | } | ||||
#endif | |||||
cardSizeBlocks = card.cardSize(); | cardSizeBlocks = card.cardSize(); | ||||
if (cardSizeBlocks == 0) { | if (cardSizeBlocks == 0) { | ||||
sdError("cardSize"); | sdError("cardSize"); |
*/ | */ | ||||
#include <SPI.h> | #include <SPI.h> | ||||
#include "SdFat.h" | #include "SdFat.h" | ||||
// Set USE_SDIO to zero for SPI card access. | |||||
#define USE_SDIO 0 | |||||
/* | /* | ||||
* SD chip select pin. Common values are: | * SD chip select pin. Common values are: | ||||
* | * | ||||
* to 10 to disable the Ethernet controller. | * to 10 to disable the Ethernet controller. | ||||
*/ | */ | ||||
const int8_t DISABLE_CHIP_SELECT = -1; | const int8_t DISABLE_CHIP_SELECT = -1; | ||||
#if USE_SDIO | |||||
SdFatSdio sd; | |||||
#else // USE_SDIO | |||||
SdFat sd; | SdFat sd; | ||||
#endif // USE_SDIO | |||||
// serial output steam | // serial output steam | ||||
ArduinoOutStream cout(Serial); | ArduinoOutStream cout(Serial); | ||||
} | } | ||||
uint32_t t = millis(); | uint32_t t = millis(); | ||||
#if USE_SDIO | |||||
if (!sd.cardBegin()) { | |||||
sdErrorMsg("\ncardBegin failed"); | |||||
return; | |||||
} | |||||
#else // USE_SDIO | |||||
// Initialize at the highest speed supported by the board that is | // Initialize at the highest speed supported by the board that is | ||||
// not over 50 MHz. Try a lower speed if SPI errors occur. | // not over 50 MHz. Try a lower speed if SPI errors occur. | ||||
if (!sd.cardBegin(SD_CHIP_SELECT, SD_SCK_MHZ(50))) { | if (!sd.cardBegin(SD_CHIP_SELECT, SD_SCK_MHZ(50))) { | ||||
sdErrorMsg("\ncardBegin failed"); | sdErrorMsg("\ncardBegin failed"); | ||||
return; | return; | ||||
} | } | ||||
#endif // USE_SDIO | |||||
t = millis() - t; | t = millis() - t; | ||||
cardSize = sd.card()->cardSize(); | cardSize = sd.card()->cardSize(); |
// Simple performance test for Teensy 3.5/3.6 SDHC. | |||||
// Demonstrates yield() efficiency. | |||||
#include "SdFat.h" | |||||
// 32 KiB buffer. | |||||
const size_t BUF_DIM = 32768; | |||||
// 8 MiB file. | |||||
const uint32_t FILE_SIZE = 256UL*BUF_DIM; | |||||
SdFatSdio sd; | |||||
File file; | |||||
uint8_t buf[BUF_DIM]; | |||||
// buffer as uint32_t | |||||
uint32_t* buf32 = (uint32_t*)buf; | |||||
// Total usec in read/write calls. | |||||
uint32_t totalMicros = 0; | |||||
// Time in yield() function. | |||||
uint32_t yieldMicros = 0; | |||||
// Number of yield calls. | |||||
uint32_t yieldCalls = 0; | |||||
// Max busy time for single yield call. | |||||
uint32_t yieldMaxUsec = 0; | |||||
//----------------------------------------------------------------------------- | |||||
// Replace "weak" system yield() function. | |||||
void yield() { | |||||
// Only count cardBusy time. | |||||
if (!sd.card()->dmaBusy()) { | |||||
return; | |||||
} | |||||
uint32_t m = micros(); | |||||
yieldCalls++; | |||||
while (sd.card()->dmaBusy()) { | |||||
// Do something here. | |||||
} | |||||
m = micros() - m; | |||||
if (m > yieldMaxUsec) { | |||||
yieldMaxUsec = m; | |||||
} | |||||
yieldMicros += m; | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
void setup() { | |||||
Serial.begin(9600); | |||||
while (!Serial) { | |||||
} | |||||
Serial.println("Type any character to begin"); | |||||
while (!Serial.available()) { | |||||
} | |||||
if (!sd.begin()) { | |||||
sd.initErrorHalt(); | |||||
} | |||||
if (!file.open("TeensyDemo.bin", O_RDWR | O_CREAT)) { | |||||
sd.errorHalt("open failed"); | |||||
} | |||||
Serial.println("\nsize,write,read"); | |||||
Serial.println("bytes,KB/sec,KB/sec"); | |||||
for (size_t nb = 512; nb <= BUF_DIM; nb *= 2) { | |||||
file.truncate(0); | |||||
uint32_t nRdWr = FILE_SIZE/nb; | |||||
Serial.print(nb); | |||||
Serial.print(','); | |||||
uint32_t t = micros(); | |||||
for (uint32_t n = 0; n < nRdWr; n++) { | |||||
// Set start and end of buffer. | |||||
buf32[0] = n; | |||||
buf32[nb/4 - 1] = n; | |||||
if (nb != file.write(buf, nb)) { | |||||
sd.errorHalt("write failed"); | |||||
} | |||||
} | |||||
t = micros() - t; | |||||
totalMicros += t; | |||||
Serial.print(1000.0*FILE_SIZE/t); | |||||
Serial.print(','); | |||||
file.rewind(); | |||||
t = micros(); | |||||
for (uint32_t n = 0; n < nRdWr; n++) { | |||||
if ((int)nb != file.read(buf, nb)) { | |||||
sd.errorHalt("read failed"); | |||||
} | |||||
// crude check of data. | |||||
if (buf32[0] != n || buf32[nb/4 - 1] != n) { | |||||
sd.errorHalt("data check"); | |||||
} | |||||
} | |||||
t = micros() - t; | |||||
totalMicros += t; | |||||
Serial.println(1000.0*FILE_SIZE/t); | |||||
} | |||||
file.close(); | |||||
Serial.print("\ntotalMicros "); | |||||
Serial.println(totalMicros); | |||||
Serial.print("yieldMicros "); | |||||
Serial.println(yieldMicros); | |||||
Serial.print("yieldCalls "); | |||||
Serial.println(yieldCalls); | |||||
Serial.print("yieldMaxUsec "); | |||||
Serial.println(yieldMaxUsec); | |||||
Serial.println("Done"); | |||||
} | |||||
void loop() { | |||||
} |
#include "SdFat.h" | #include "SdFat.h" | ||||
#include "FreeStack.h" | #include "FreeStack.h" | ||||
// Set USE_SDIO to zero for SPI card access. | |||||
#define USE_SDIO 0 | |||||
// SD chip select pin | // SD chip select pin | ||||
const uint8_t chipSelect = SS; | const uint8_t chipSelect = SS; | ||||
uint8_t buf[BUF_SIZE]; | uint8_t buf[BUF_SIZE]; | ||||
// file system | // file system | ||||
#if USE_SDIO | |||||
SdFatSdio sd; | |||||
#else // USE_SDIO | |||||
SdFat sd; | SdFat sd; | ||||
#endif // USE_SDIO | |||||
// Set ENABLE_EXTENDED_TRANSFER_CLASS to use extended SD I/O. | // Set ENABLE_EXTENDED_TRANSFER_CLASS to use extended SD I/O. | ||||
// Requires dedicated use of the SPI bus. | // Requires dedicated use of the SPI bus. | ||||
cout << F("FreeStack: ") << FreeStack() << endl; | cout << F("FreeStack: ") << FreeStack() << endl; | ||||
#if USE_SDIO | |||||
if (!sd.begin()) { | |||||
sd.initErrorHalt(); | |||||
} | |||||
#else // USE_SDIO | |||||
// Initialize at the highest speed supported by the board that is | // Initialize at the highest speed supported by the board that is | ||||
// not over 50 MHz. Try a lower speed if SPI errors occur. | // not over 50 MHz. Try a lower speed if SPI errors occur. | ||||
if (!sd.begin(chipSelect, SD_SCK_MHZ(50))) { | if (!sd.begin(chipSelect, SD_SCK_MHZ(50))) { | ||||
sd.initErrorHalt(); | sd.initErrorHalt(); | ||||
} | } | ||||
#endif // USE_SDIO | |||||
cout << F("Type is FAT") << int(sd.vol()->fatType()) << endl; | cout << F("Type is FAT") << int(sd.vol()->fatType()) << endl; | ||||
cout << F("Card size: ") << sd.card()->cardSize()*512E-9; | cout << F("Card size: ") << sd.card()->cardSize()*512E-9; | ||||
cout << F(" GB (GB = 1E9 bytes)") << endl; | cout << F(" GB (GB = 1E9 bytes)") << endl; |
*/ | */ | ||||
#ifndef BlockDriver_h | #ifndef BlockDriver_h | ||||
#define BlockDriver_h | #define BlockDriver_h | ||||
#ifdef ARDUINO | |||||
#include "SdSpiCard/SdSpiCard.h" | |||||
#else // ARDUINO | |||||
#include "SdSpiCard.h" | |||||
#endif // ARDUINO | |||||
#include "FatLib/BaseBlockDriver.h" | #include "FatLib/BaseBlockDriver.h" | ||||
//----------------------------------------------------------------------------- | |||||
/** | |||||
* \class SdBlockDriver | |||||
* \brief Standard SD block driver. | |||||
*/ | |||||
#if ENABLE_EXTENDED_TRANSFER_CLASS | |||||
class SdBlockDriver : public BaseBlockDriver, public SdSpiCard { | |||||
#else // ENABLE_EXTENDED_TRANSFER_CLASS | |||||
class SdBlockDriver : public SdSpiCard { | |||||
#endif // ENABLE_EXTENDED_TRANSFER_CLASS | |||||
public: | |||||
/** Initialize the SD card | |||||
* | |||||
* \param[in] spi SPI driver. | |||||
* \param[in] csPin Card chip select pin number. | |||||
* \param[in] spiSettings SPI speed, mode, and bit order. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool begin(SdSpiDriver* spi, uint8_t csPin, SPISettings spiSettings) { | |||||
spi->begin(csPin); | |||||
spi->setSpiSettings(SD_SCK_HZ(250000)); | |||||
if (!SdSpiCard::begin(spi)) { | |||||
return false; | |||||
} | |||||
spi->setSpiSettings(spiSettings); | |||||
return true; | |||||
} | |||||
/** | |||||
* Read a 512 byte block from an SD card. | |||||
* | |||||
* \param[in] block Logical block to be read. | |||||
* \param[out] dst Pointer to the location that will receive the data. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool readBlock(uint32_t block, uint8_t* dst) { | |||||
return SdSpiCard::readBlock(block, dst); | |||||
} | |||||
/** End multi-block transfer and go to idle state. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool syncBlocks() { | |||||
return true; | |||||
} | |||||
/** | |||||
* Writes a 512 byte block to an SD card. | |||||
* | |||||
* \param[in] block Logical block to be written. | |||||
* \param[in] src Pointer to the location of the data to be written. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool writeBlock(uint32_t block, const uint8_t* src) { | |||||
return SdSpiCard::writeBlock(block, src); | |||||
} | |||||
/** | |||||
* Read multiple 512 byte blocks from an SD card. | |||||
* | |||||
* \param[in] block Logical block to be read. | |||||
* \param[in] nb Number of blocks to be read. | |||||
* \param[out] dst Pointer to the location that will receive the data. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool readBlocks(uint32_t block, uint8_t* dst, size_t nb) { | |||||
return SdSpiCard::readBlocks(block, dst, nb); | |||||
} | |||||
/** | |||||
* Write multiple 512 byte blocks to an SD card. | |||||
* | |||||
* \param[in] block Logical block to be written. | |||||
* \param[in] nb Number of blocks to be written. | |||||
* \param[in] src Pointer to the location of the data to be written. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool writeBlocks(uint32_t block, const uint8_t* src, size_t nb) { | |||||
return SdSpiCard::writeBlocks(block, src, nb); | |||||
} | |||||
}; | |||||
//----------------------------------------------------------------------------- | |||||
/** | |||||
* \class SdBlockDriverEX | |||||
* \brief Extended SD I/O block driver. | |||||
*/ | |||||
class SdBlockDriverEX : public SdSpiCard, public BaseBlockDriver { | |||||
public: | |||||
/** Initialize the SD card | |||||
* | |||||
* \param[in] spi SPI driver. | |||||
* \param[in] csPin Card chip select pin number. | |||||
* \param[in] spiSettings SPI speed, mode, and bit order. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool begin(SdSpiDriver* spi, uint8_t csPin, SPISettings spiSettings) { | |||||
m_curState = IDLE_STATE; | |||||
spi->begin(csPin); | |||||
spi->setSpiSettings(SD_SCK_HZ(250000)); | |||||
if (!SdSpiCard::begin(spi)) { | |||||
return false; | |||||
} | |||||
spi->setSpiSettings(spiSettings); | |||||
return true; | |||||
} | |||||
/** | |||||
* Read a 512 byte block from an SD card. | |||||
* | |||||
* \param[in] block Logical block to be read. | |||||
* \param[out] dst Pointer to the location that will receive the data. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool readBlock(uint32_t block, uint8_t* dst); | |||||
/** End multi-block transfer and go to idle state. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool syncBlocks(); | |||||
/** | |||||
* Writes a 512 byte block to an SD card. | |||||
* | |||||
* \param[in] block Logical block to be written. | |||||
* \param[in] src Pointer to the location of the data to be written. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool writeBlock(uint32_t block, const uint8_t* src); | |||||
/** | |||||
* Read multiple 512 byte blocks from an SD card. | |||||
* | |||||
* \param[in] block Logical block to be read. | |||||
* \param[in] nb Number of blocks to be read. | |||||
* \param[out] dst Pointer to the location that will receive the data. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool readBlocks(uint32_t block, uint8_t* dst, size_t nb); | |||||
/** | |||||
* Write multiple 512 byte blocks to an SD card. | |||||
* | |||||
* \param[in] block Logical block to be written. | |||||
* \param[in] nb Number of blocks to be written. | |||||
* \param[in] src Pointer to the location of the data to be written. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool writeBlocks(uint32_t block, const uint8_t* src, size_t nb); | |||||
private: | |||||
static const uint32_t IDLE_STATE = 0; | |||||
static const uint32_t READ_STATE = 1; | |||||
static const uint32_t WRITE_STATE = 2; | |||||
uint32_t m_curBlock; | |||||
uint8_t m_curState; | |||||
}; | |||||
#include "SdCard/SdSpiCard.h" | |||||
//----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
/** typedef for BlockDriver */ | /** typedef for BlockDriver */ | ||||
#if ENABLE_EXTENDED_TRANSFER_CLASS | |||||
#if ENABLE_EXTENDED_TRANSFER_CLASS || ENABLE_SDIO_CLASS | |||||
typedef BaseBlockDriver BlockDriver; | typedef BaseBlockDriver BlockDriver; | ||||
#else // ENABLE_EXTENDED_TRANSFER_CLASS | |||||
typedef SdBlockDriver BlockDriver; | |||||
#endif // ENABLE_EXTENDED_TRANSFER_CLASS | |||||
#else // ENABLE_EXTENDED_TRANSFER_CLASS || ENABLE_SDIO_CLASS | |||||
typedef SdSpiCard BlockDriver; | |||||
#endif // ENABLE_EXTENDED_TRANSFER_CLASS || ENABLE_SDIO_CLASS | |||||
#endif // BlockDriver_h | #endif // BlockDriver_h |
/* FatLib Library | |||||
* Copyright (C) 2016 by William Greiman | |||||
* | |||||
* This file is part of the FatLib Library | |||||
* | |||||
* This Library is free software: you can redistribute it and/or modify | |||||
* it under the terms of the GNU General Public License as published by | |||||
* the Free Software Foundation, either version 3 of the License, or | |||||
* (at your option) any later version. | |||||
* | |||||
* This Library is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU General Public License | |||||
* along with the FatLib Library. If not, see | |||||
* <http://www.gnu.org/licenses/>. | |||||
*/ | |||||
#ifndef BaseBlockDriver_h | #ifndef BaseBlockDriver_h | ||||
#define BaseBlockDriver_h | #define BaseBlockDriver_h | ||||
#include "FatLibConfig.h" | #include "FatLibConfig.h" | ||||
virtual bool writeBlocks(uint32_t block, const uint8_t* src, size_t nb) = 0; | virtual bool writeBlocks(uint32_t block, const uint8_t* src, size_t nb) = 0; | ||||
#endif // USE_MULTI_BLOCK_IO | #endif // USE_MULTI_BLOCK_IO | ||||
}; | }; | ||||
#endif // BaseBlockDriver_h | |||||
#endif // BaseBlockDriver_h |
/* Arduino SdSpiCard Library | |||||
* Copyright (C) 2012 by William Greiman | |||||
/* Arduino SdCard Library | |||||
* Copyright (C) 2016 by William Greiman | |||||
* | * | ||||
* This file is part of the Arduino SdSpiCard Library | * This file is part of the Arduino SdSpiCard Library | ||||
* | * | ||||
// Part 1 | // Part 1 | ||||
// Physical Layer | // Physical Layer | ||||
// Simplified Specification | // Simplified Specification | ||||
// Version 3.01 | |||||
// May 18, 2010 | |||||
// Version 5.00 | |||||
// Aug 10, 2016 | |||||
// | // | ||||
// http://www.sdcard.org/developers/tech/sdcard/pls/simplified_specs | |||||
// https://www.sdcard.org/downloads/pls/ | |||||
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||
// SD card errors | // SD card errors | ||||
/** timeout error for command CMD0 (initialize card in SPI mode) */ | |||||
const uint8_t SD_CARD_ERROR_CMD0 = 0X1; | |||||
/** CMD8 was not accepted - not a valid SD card*/ | |||||
const uint8_t SD_CARD_ERROR_CMD8 = 0X2; | |||||
/** card returned an error response for CMD12 (stop multiblock read) */ | |||||
const uint8_t SD_CARD_ERROR_CMD12 = 0X3; | |||||
/** card returned an error response for CMD17 (read block) */ | |||||
const uint8_t SD_CARD_ERROR_CMD17 = 0X4; | |||||
/** card returned an error response for CMD18 (read multiple block) */ | |||||
const uint8_t SD_CARD_ERROR_CMD18 = 0X5; | |||||
/** card returned an error response for CMD24 (write block) */ | |||||
const uint8_t SD_CARD_ERROR_CMD24 = 0X6; | |||||
/** WRITE_MULTIPLE_BLOCKS command failed */ | |||||
const uint8_t SD_CARD_ERROR_CMD25 = 0X7; | |||||
/** card returned an error response for CMD58 (read OCR) */ | |||||
const uint8_t SD_CARD_ERROR_CMD58 = 0X8; | |||||
/** SET_WR_BLK_ERASE_COUNT failed */ | |||||
const uint8_t SD_CARD_ERROR_ACMD23 = 0X9; | |||||
/** ACMD41 initialization process timeout */ | |||||
const uint8_t SD_CARD_ERROR_ACMD41 = 0XA; | |||||
/** card returned a bad CSR version field */ | |||||
const uint8_t SD_CARD_ERROR_BAD_CSD = 0XB; | |||||
/** erase block group command failed */ | |||||
const uint8_t SD_CARD_ERROR_ERASE = 0XC; | |||||
/** card not capable of single block erase */ | |||||
const uint8_t SD_CARD_ERROR_ERASE_SINGLE_BLOCK = 0XD; | |||||
/** Erase sequence timed out */ | |||||
const uint8_t SD_CARD_ERROR_ERASE_TIMEOUT = 0XE; | |||||
/** card returned an error token instead of read data */ | |||||
const uint8_t SD_CARD_ERROR_READ = 0XF; | |||||
/** read CID or CSD failed */ | |||||
const uint8_t SD_CARD_ERROR_READ_REG = 0X10; | |||||
/** timeout while waiting for start of read data */ | |||||
const uint8_t SD_CARD_ERROR_READ_TIMEOUT = 0X11; | |||||
/** card did not accept STOP_TRAN_TOKEN */ | |||||
const uint8_t SD_CARD_ERROR_STOP_TRAN = 0X12; | |||||
/** card returned an error token as a response to a write operation */ | |||||
const uint8_t SD_CARD_ERROR_WRITE = 0X13; | |||||
/** card busy for command */ | |||||
const uint8_t SD_CARD_ERROR_CMD_BUSY = 0X14; | |||||
/** card did not go ready for a multiple block write */ | |||||
const uint8_t SD_CARD_ERROR_WRITE_MULTIPLE = 0X15; // Not used | |||||
/** card returned an error to a CMD13 status check after a write */ | |||||
const uint8_t SD_CARD_ERROR_WRITE_PROGRAMMING = 0X16; | |||||
/** timeout occurred during write programming */ | |||||
const uint8_t SD_CARD_ERROR_WRITE_TIMEOUT = 0X17; | |||||
/** incorrect rate selected */ | |||||
const uint8_t SD_CARD_ERROR_SCK_RATE = 0X18; | |||||
/** init() not called */ | |||||
const uint8_t SD_CARD_ERROR_INIT_NOT_CALLED = 0X19; | |||||
/** card returned an error for CMD59 (CRC_ON_OFF) */ | |||||
const uint8_t SD_CARD_ERROR_CMD59 = 0X1A; | |||||
/** invalid read CRC */ | |||||
const uint8_t SD_CARD_ERROR_READ_CRC = 0X1B; | |||||
/** SPI DMA error */ | |||||
const uint8_t SD_CARD_ERROR_SPI_DMA = 0X1C; | |||||
/** ACMD13 not accepted */ | |||||
const uint8_t SD_CARD_ERROR_ACMD13 = 0X1D; | |||||
// See the SD Specification for command info. | |||||
typedef enum { | |||||
SD_CARD_ERROR_NONE = 0, | |||||
// Basic commands and switch command. | |||||
SD_CARD_ERROR_CMD0 = 0X20, | |||||
SD_CARD_ERROR_CMD2, | |||||
SD_CARD_ERROR_CMD3, | |||||
SD_CARD_ERROR_CMD6, | |||||
SD_CARD_ERROR_CMD7, | |||||
SD_CARD_ERROR_CMD8, | |||||
SD_CARD_ERROR_CMD9, | |||||
SD_CARD_ERROR_CMD10, | |||||
SD_CARD_ERROR_CMD12, | |||||
SD_CARD_ERROR_CMD13, | |||||
// Read, write, erase, and extension commands. | |||||
SD_CARD_ERROR_CMD17 = 0X30, | |||||
SD_CARD_ERROR_CMD18, | |||||
SD_CARD_ERROR_CMD24, | |||||
SD_CARD_ERROR_CMD25, | |||||
SD_CARD_ERROR_CMD32, | |||||
SD_CARD_ERROR_CMD33, | |||||
SD_CARD_ERROR_CMD38, | |||||
SD_CARD_ERROR_CMD58, | |||||
SD_CARD_ERROR_CMD59, | |||||
// Application specific commands. | |||||
SD_CARD_ERROR_ACMD6 = 0X40, | |||||
SD_CARD_ERROR_ACMD13, | |||||
SD_CARD_ERROR_ACMD23, | |||||
SD_CARD_ERROR_ACMD41, | |||||
// Misc errors. | |||||
SD_CARD_ERROR_DMA = 0X50, | |||||
SD_CARD_ERROR_ERASE, | |||||
SD_CARD_ERROR_ERASE_SINGLE_BLOCK, | |||||
SD_CARD_ERROR_ERASE_TIMEOUT, | |||||
SD_CARD_ERROR_INIT_NOT_CALLED, | |||||
SD_CARD_ERROR_READ, | |||||
SD_CARD_ERROR_READ_REG, | |||||
SD_CARD_ERROR_READ_TIMEOUT, | |||||
SD_CARD_ERROR_STOP_TRAN, | |||||
SD_CARD_ERROR_WRITE_TIMEOUT, | |||||
SD_CARD_ERROR_WRITE, | |||||
} sd_error_code_t; | |||||
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||
// card types | // card types | ||||
/** Standard capacity V1 SD card */ | /** Standard capacity V1 SD card */ | ||||
// SD card commands | // SD card commands | ||||
/** GO_IDLE_STATE - init card in spi mode if CS low */ | /** GO_IDLE_STATE - init card in spi mode if CS low */ | ||||
const uint8_t CMD0 = 0X00; | const uint8_t CMD0 = 0X00; | ||||
/** ALL_SEND_CID - Asks any card to send the CID. */ | |||||
const uint8_t CMD2 = 0X02; | |||||
/** SEND_RELATIVE_ADDR - Ask the card to publish a new RCA. */ | |||||
const uint8_t CMD3 = 0X03; | |||||
/** SWITCH_FUNC - Switch Function Command */ | /** SWITCH_FUNC - Switch Function Command */ | ||||
const uint8_t CMD6 = 0X06; | const uint8_t CMD6 = 0X06; | ||||
/** SELECT/DESELECT_CARD - toggles between the stand-by and transfer states. */ | |||||
const uint8_t CMD7 = 0X07; | |||||
/** SEND_IF_COND - verify SD Memory Card interface operating condition.*/ | /** SEND_IF_COND - verify SD Memory Card interface operating condition.*/ | ||||
const uint8_t CMD8 = 0X08; | const uint8_t CMD8 = 0X08; | ||||
/** SEND_CSD - read the Card Specific Data (CSD register) */ | /** SEND_CSD - read the Card Specific Data (CSD register) */ | ||||
const uint8_t CMD58 = 0X3A; | const uint8_t CMD58 = 0X3A; | ||||
/** CRC_ON_OFF - enable or disable CRC checking */ | /** CRC_ON_OFF - enable or disable CRC checking */ | ||||
const uint8_t CMD59 = 0X3B; | const uint8_t CMD59 = 0X3B; | ||||
/** SET_BUS_WIDTH - Defines the data bus width for data transfer. */ | |||||
const uint8_t ACMD6 = 0X06; | |||||
/** SD_STATUS - Send the SD Status. */ | /** SD_STATUS - Send the SD Status. */ | ||||
const uint8_t ACMD13 = 0X0D; | const uint8_t ACMD13 = 0X0D; | ||||
/** SET_WR_BLK_ERASE_COUNT - Set the number of write blocks to be | /** SET_WR_BLK_ERASE_COUNT - Set the number of write blocks to be | ||||
activates the card's initialization process */ | activates the card's initialization process */ | ||||
const uint8_t ACMD41 = 0X29; | const uint8_t ACMD41 = 0X29; | ||||
//============================================================================== | //============================================================================== | ||||
// CARD_STATUS | |||||
/** The command's argument was out of the allowed range for this card. */ | |||||
const uint32_t CARD_STATUS_OUT_OF_RANGE = 1UL << 31; | |||||
/** A misaligned address which did not match the block length. */ | |||||
const uint32_t CARD_STATUS_ADDRESS_ERROR = 1UL << 30; | |||||
/** The transferred block length is not allowed for this card. */ | |||||
const uint32_t CARD_STATUS_BLOCK_LEN_ERROR = 1UL << 29; | |||||
/** An error in the sequence of erase commands occurred. */ | |||||
const uint32_t CARD_STATUS_ERASE_SEQ_ERROR = 1UL <<28; | |||||
/** An invalid selection of write-blocks for erase occurred. */ | |||||
const uint32_t CARD_STATUS_ERASE_PARAM = 1UL << 27; | |||||
/** Set when the host attempts to write to a protected block. */ | |||||
const uint32_t CARD_STATUS_WP_VIOLATION = 1UL << 26; | |||||
/** When set, signals that the card is locked by the host. */ | |||||
const uint32_t CARD_STATUS_CARD_IS_LOCKED = 1UL << 25; | |||||
/** Set when a sequence or password error has been detected. */ | |||||
const uint32_t CARD_STATUS_LOCK_UNLOCK_FAILED = 1UL << 24; | |||||
/** The CRC check of the previous command failed. */ | |||||
const uint32_t CARD_STATUS_COM_CRC_ERROR = 1UL << 23; | |||||
/** Command not legal for the card state. */ | |||||
const uint32_t CARD_STATUS_ILLEGAL_COMMAND = 1UL << 22; | |||||
/** Card internal ECC was applied but failed to correct the data. */ | |||||
const uint32_t CARD_STATUS_CARD_ECC_FAILED = 1UL << 21; | |||||
/** Internal card controller error */ | |||||
const uint32_t CARD_STATUS_CC_ERROR = 1UL << 20; | |||||
/** A general or an unknown error occurred during the operation. */ | |||||
const uint32_t CARD_STATUS_ERROR = 1UL << 19; | |||||
// bits 19, 18, and 17 reserved. | |||||
/** Permanent WP set or attempt to change read only values of CSD. */ | |||||
const uint32_t CARD_STATUS_CSD_OVERWRITE = 1UL <<16; | |||||
/** partial address space was erased due to write protect. */ | |||||
const uint32_t CARD_STATUS_WP_ERASE_SKIP = 1UL << 15; | |||||
/** The command has been executed without using the internal ECC. */ | |||||
const uint32_t CARD_STATUS_CARD_ECC_DISABLED = 1UL << 14; | |||||
/** out of erase sequence command was received. */ | |||||
const uint32_t CARD_STATUS_ERASE_RESET = 1UL << 13; | |||||
/** The state of the card when receiving the command. | |||||
* 0 = idle | |||||
* 1 = ready | |||||
* 2 = ident | |||||
* 3 = stby | |||||
* 4 = tran | |||||
* 5 = data | |||||
* 6 = rcv | |||||
* 7 = prg | |||||
* 8 = dis | |||||
* 9-14 = reserved | |||||
* 15 = reserved for I/O mode | |||||
*/ | |||||
const uint32_t CARD_STATUS_CURRENT_STATE = 0XF << 9; | |||||
/** Shift for current state. */ | |||||
const uint32_t CARD_STATUS_CURRENT_STATE_SHIFT = 9; | |||||
/** Corresponds to buffer empty signaling on the bus. */ | |||||
const uint32_t CARD_STATUS_READY_FOR_DATA = 1UL << 8; | |||||
// bit 7 reserved. | |||||
/** Extension Functions may set this bit to get host to deal with events. */ | |||||
const uint32_t CARD_STATUS_FX_EVENT = 1UL << 6; | |||||
/** The card will expect ACMD, or the command has been interpreted as ACMD */ | |||||
const uint32_t CARD_STATUS_APP_CMD = 1UL << 5; | |||||
// bit 4 reserved. | |||||
/** Error in the sequence of the authentication process. */ | |||||
const uint32_t CARD_STATUS_AKE_SEQ_ERROR = 1UL << 3; | |||||
// bits 2,1, and 0 reserved for manufacturer test mode. | |||||
//============================================================================== | |||||
/** status for card in the ready state */ | /** status for card in the ready state */ | ||||
const uint8_t R1_READY_STATE = 0X00; | const uint8_t R1_READY_STATE = 0X00; | ||||
/** status for card in the idle state */ | /** status for card in the idle state */ | ||||
/** CRC7 checksum */ | /** CRC7 checksum */ | ||||
unsigned char crc : 7; | unsigned char crc : 7; | ||||
} __attribute__((packed)) cid_t; | } __attribute__((packed)) cid_t; | ||||
//============================================================================== | //============================================================================== | ||||
/** | /** | ||||
* \class CSDV1 | * \class CSDV1 | ||||
csd1_t v1; | csd1_t v1; | ||||
csd2_t v2; | csd2_t v2; | ||||
}; | }; | ||||
//----------------------------------------------------------------------------- | |||||
inline uint32_t sdCardCapacity(csd_t* csd) { | |||||
if (csd->v1.csd_ver == 0) { | |||||
uint8_t read_bl_len = csd->v1.read_bl_len; | |||||
uint16_t c_size = (csd->v1.c_size_high << 10) | |||||
| (csd->v1.c_size_mid << 2) | csd->v1.c_size_low; | |||||
uint8_t c_size_mult = (csd->v1.c_size_mult_high << 1) | |||||
| csd->v1.c_size_mult_low; | |||||
return (uint32_t)(c_size + 1) << (c_size_mult + read_bl_len - 7); | |||||
} else if (csd->v2.csd_ver == 1) { | |||||
uint32_t c_size = 0X10000L * csd->v2.c_size_high + 0X100L | |||||
* (uint32_t)csd->v2.c_size_mid + csd->v2.c_size_low; | |||||
return (c_size + 1) << 10; | |||||
} else { | |||||
return 0; | |||||
} | |||||
} | |||||
#endif // SdInfo_h | #endif // SdInfo_h |
/* Arduino SdSpiCard Library | |||||
* Copyright (C) 2012 by William Greiman | |||||
/* Arduino SdCard Library | |||||
* Copyright (C) 2016 by William Greiman | |||||
* | * | ||||
* This file is part of the Arduino SdSpiCard Library | * This file is part of the Arduino SdSpiCard Library | ||||
* | * | ||||
//============================================================================== | //============================================================================== | ||||
// SdSpiCard member functions | // SdSpiCard member functions | ||||
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||
bool SdSpiCard::begin(SdSpiDriver* spiDriver) { | |||||
bool SdSpiCard::begin(SdSpiDriver* spi, uint8_t csPin, SPISettings settings) { | |||||
m_spiActive = false; | m_spiActive = false; | ||||
m_errorCode = m_type = 0; | |||||
m_spiDriver = spiDriver; | |||||
m_errorCode = SD_CARD_ERROR_NONE; | |||||
m_type = 0; | |||||
m_spiDriver = spi; | |||||
uint16_t t0 = curTimeMS(); | uint16_t t0 = curTimeMS(); | ||||
uint32_t arg; | uint32_t arg; | ||||
m_spiDriver->begin(csPin); | |||||
m_spiDriver->setSpiSettings(SD_SCK_HZ(250000)); | |||||
spiStart(); | spiStart(); | ||||
// must supply min of 74 clock cycles with CS high. | // must supply min of 74 clock cycles with CS high. | ||||
} | } | ||||
} | } | ||||
spiStop(); | spiStop(); | ||||
m_spiDriver->setSpiSettings(settings); | |||||
return true; | return true; | ||||
fail: | fail: | ||||
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||
uint32_t SdSpiCard::cardSize() { | uint32_t SdSpiCard::cardSize() { | ||||
csd_t csd; | csd_t csd; | ||||
if (!readCSD(&csd)) { | |||||
return 0; | |||||
} | |||||
if (csd.v1.csd_ver == 0) { | |||||
uint8_t read_bl_len = csd.v1.read_bl_len; | |||||
uint16_t c_size = (csd.v1.c_size_high << 10) | |||||
| (csd.v1.c_size_mid << 2) | csd.v1.c_size_low; | |||||
uint8_t c_size_mult = (csd.v1.c_size_mult_high << 1) | |||||
| csd.v1.c_size_mult_low; | |||||
return (uint32_t)(c_size + 1) << (c_size_mult + read_bl_len - 7); | |||||
} else if (csd.v2.csd_ver == 1) { | |||||
uint32_t c_size = 0X10000L * csd.v2.c_size_high + 0X100L | |||||
* (uint32_t)csd.v2.c_size_mid + csd.v2.c_size_low; | |||||
return (c_size + 1) << 10; | |||||
} else { | |||||
error(SD_CARD_ERROR_BAD_CSD); | |||||
return 0; | |||||
} | |||||
return readCSD(&csd) ? sdCardCapacity(&csd) : 0; | |||||
} | } | ||||
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||
bool SdSpiCard::erase(uint32_t firstBlock, uint32_t lastBlock) { | bool SdSpiCard::erase(uint32_t firstBlock, uint32_t lastBlock) { | ||||
} | } | ||||
// transfer data | // transfer data | ||||
if ((m_status = spiReceive(dst, count))) { | if ((m_status = spiReceive(dst, count))) { | ||||
error(SD_CARD_ERROR_SPI_DMA); | |||||
error(SD_CARD_ERROR_DMA); | |||||
goto fail; | goto fail; | ||||
} | } | ||||
} | } | ||||
// response is r2 so get and check two bytes for nonzero | // response is r2 so get and check two bytes for nonzero | ||||
if (cardCommand(CMD13, 0) || spiReceive()) { | if (cardCommand(CMD13, 0) || spiReceive()) { | ||||
error(SD_CARD_ERROR_WRITE_PROGRAMMING); | |||||
error(SD_CARD_ERROR_CMD13); | |||||
goto fail; | goto fail; | ||||
} | } | ||||
#endif // CHECK_PROGRAMMING | #endif // CHECK_PROGRAMMING |
/* Arduino SdSpiCard Library | |||||
* Copyright (C) 2012 by William Greiman | |||||
/* Arduino SdCard Library | |||||
* Copyright (C) 2016 by William Greiman | |||||
* | * | ||||
* This file is part of the Arduino SdSpiCard Library | * This file is part of the Arduino SdSpiCard Library | ||||
* | * | ||||
* along with the Arduino SdSpiCard Library. If not, see | * along with the Arduino SdSpiCard Library. If not, see | ||||
* <http://www.gnu.org/licenses/>. | * <http://www.gnu.org/licenses/>. | ||||
*/ | */ | ||||
#ifndef SpiCard_h | |||||
#define SpiCard_h | |||||
#ifndef SdSpiCard_h | |||||
#define SdSpiCard_h | |||||
/** | /** | ||||
* \file | * \file | ||||
* \brief SdSpiCard class for V2 SD/SDHC cards | * \brief SdSpiCard class for V2 SD/SDHC cards | ||||
#include <stddef.h> | #include <stddef.h> | ||||
#include "SysCall.h" | #include "SysCall.h" | ||||
#include "SdInfo.h" | #include "SdInfo.h" | ||||
#include "SdSpiDriver.h" | |||||
#include "../FatLib/BaseBlockDriver.h" | |||||
#include "../SpiDriver/SdSpiDriver.h" | |||||
//============================================================================== | //============================================================================== | ||||
/** | /** | ||||
* \class SdSpiCard | * \class SdSpiCard | ||||
* \brief Raw access to SD and SDHC flash memory cards via SPI protocol. | * \brief Raw access to SD and SDHC flash memory cards via SPI protocol. | ||||
*/ | */ | ||||
#if ENABLE_EXTENDED_TRANSFER_CLASS || ENABLE_SDIO_CLASS | |||||
class SdSpiCard : public BaseBlockDriver { | |||||
#else // ENABLE_EXTENDED_TRANSFER_CLASS || ENABLE_SDIO_CLASS | |||||
class SdSpiCard { | class SdSpiCard { | ||||
#endif // ENABLE_EXTENDED_TRANSFER_CLASS || ENABLE_SDIO_CLASS | |||||
public: | public: | ||||
/** Construct an instance of SdSpiCard. */ | /** Construct an instance of SdSpiCard. */ | ||||
SdSpiCard() : m_errorCode(SD_CARD_ERROR_INIT_NOT_CALLED), m_type(0) {} | SdSpiCard() : m_errorCode(SD_CARD_ERROR_INIT_NOT_CALLED), m_type(0) {} | ||||
/** Initialize the SD card. | /** Initialize the SD card. | ||||
* \param[in] spiDriver SPI driver for card. | |||||
* \param[in] spi SPI driver for card. | |||||
* \param[in] csPin card chip select pin. | |||||
* \param[in] spiSettings SPI speed, mode, and bit order. | |||||
* \return true for success else false. | * \return true for success else false. | ||||
*/ | */ | ||||
bool begin(SdSpiDriver* spiDriver); | |||||
bool begin(SdSpiDriver* spi, uint8_t csPin, SPISettings spiSettings); | |||||
/** | /** | ||||
* Determine the size of an SD flash memory card. | * Determine the size of an SD flash memory card. | ||||
* | * | ||||
m_errorCode = code; | m_errorCode = code; | ||||
} | } | ||||
/** | /** | ||||
* \return code for the last error. See SdSpiCard.h for a list of error codes. | |||||
* \return code for the last error. See SdInfo.h for a list of error codes. | |||||
*/ | */ | ||||
int errorCode() const { | int errorCode() const { | ||||
return m_errorCode; | return m_errorCode; | ||||
/** | /** | ||||
* Read a 512 byte block from an SD card. | * Read a 512 byte block from an SD card. | ||||
* | * | ||||
* \param[in] block Logical block to be read. | |||||
* \param[in] lba Logical block to be read. | |||||
* \param[out] dst Pointer to the location that will receive the data. | * \param[out] dst Pointer to the location that will receive the data. | ||||
* \return The value true is returned for success and | * \return The value true is returned for success and | ||||
* the value false is returned for failure. | * the value false is returned for failure. | ||||
*/ | */ | ||||
bool readBlock(uint32_t block, uint8_t* dst); | |||||
bool readBlock(uint32_t lba, uint8_t* dst); | |||||
/** | /** | ||||
* Read multiple 512 byte blocks from an SD card. | * Read multiple 512 byte blocks from an SD card. | ||||
* | * | ||||
* \param[in] block Logical block to be read. | |||||
* \param[in] count Number of blocks to be read. | |||||
* \param[in] lba Logical block to be read. | |||||
* \param[in] nb Number of blocks to be read. | |||||
* \param[out] dst Pointer to the location that will receive the data. | * \param[out] dst Pointer to the location that will receive the data. | ||||
* \return The value true is returned for success and | * \return The value true is returned for success and | ||||
* the value false is returned for failure. | * the value false is returned for failure. | ||||
*/ | */ | ||||
bool readBlocks(uint32_t block, uint8_t* dst, size_t count); | |||||
bool readBlocks(uint32_t lba, uint8_t* dst, size_t nb); | |||||
/** | /** | ||||
* Read a card's CID register. The CID contains card identification | * Read a card's CID register. The CID contains card identification | ||||
* information such as Manufacturer ID, Product name, Product serial | * information such as Manufacturer ID, Product name, Product serial | ||||
* \param[out] status location for 64 status bytes. | * \param[out] status location for 64 status bytes. | ||||
* \return The value true is returned for success and | * \return The value true is returned for success and | ||||
* the value false is returned for failure. | * the value false is returned for failure. | ||||
*/ | |||||
*/ | |||||
bool readStatus(uint8_t* status); | bool readStatus(uint8_t* status); | ||||
/** End a read multiple blocks sequence. | /** End a read multiple blocks sequence. | ||||
* | * | ||||
* the value false is returned for failure. | * the value false is returned for failure. | ||||
*/ | */ | ||||
bool readStop(); | bool readStop(); | ||||
/** \return success if sync successful. Not for user apps. */ | |||||
bool syncBlocks() {return true;} | |||||
/** Return the card type: SD V1, SD V2 or SDHC | /** Return the card type: SD V1, SD V2 or SDHC | ||||
* \return 0 - SD V1, 1 - SD V2, or 3 - SDHC. | * \return 0 - SD V1, 1 - SD V2, or 3 - SDHC. | ||||
*/ | */ | ||||
/** | /** | ||||
* Writes a 512 byte block to an SD card. | * Writes a 512 byte block to an SD card. | ||||
* | * | ||||
* \param[in] blockNumber Logical block to be written. | |||||
* \param[in] lba Logical block to be written. | |||||
* \param[in] src Pointer to the location of the data to be written. | * \param[in] src Pointer to the location of the data to be written. | ||||
* \return The value true is returned for success and | * \return The value true is returned for success and | ||||
* the value false is returned for failure. | * the value false is returned for failure. | ||||
*/ | */ | ||||
bool writeBlock(uint32_t blockNumber, const uint8_t* src); | |||||
bool writeBlock(uint32_t lba, const uint8_t* src); | |||||
/** | /** | ||||
* Write multiple 512 byte blocks to an SD card. | * Write multiple 512 byte blocks to an SD card. | ||||
* | * | ||||
* \param[in] block Logical block to be written. | |||||
* \param[in] count Number of blocks to be written. | |||||
* \param[in] lba Logical block to be written. | |||||
* \param[in] nb Number of blocks to be written. | |||||
* \param[in] src Pointer to the location of the data to be written. | * \param[in] src Pointer to the location of the data to be written. | ||||
* \return The value true is returned for success and | * \return The value true is returned for success and | ||||
* the value false is returned for failure. | * the value false is returned for failure. | ||||
*/ | */ | ||||
bool writeBlocks(uint32_t block, const uint8_t* src, size_t count); | |||||
bool writeBlocks(uint32_t lba, const uint8_t* src, size_t nb); | |||||
/** Write one data block in a multiple block write sequence. | /** Write one data block in a multiple block write sequence. | ||||
* \param[in] src Pointer to the location of the data to be written. | * \param[in] src Pointer to the location of the data to be written. | ||||
* \return The value true is returned for success and | * \return The value true is returned for success and | ||||
uint8_t m_type; | uint8_t m_type; | ||||
}; | }; | ||||
//============================================================================== | //============================================================================== | ||||
#endif // SpiCard_h | |||||
/** | |||||
* \class SdSpiCardEX | |||||
* \brief Extended SD I/O block driver. | |||||
*/ | |||||
class SdSpiCardEX : public SdSpiCard { | |||||
public: | |||||
/** Initialize the SD card | |||||
* | |||||
* \param[in] spi SPI driver. | |||||
* \param[in] csPin Card chip select pin number. | |||||
* \param[in] spiSettings SPI speed, mode, and bit order. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool begin(SdSpiDriver* spi, uint8_t csPin, SPISettings spiSettings) { | |||||
m_curState = IDLE_STATE; | |||||
return SdSpiCard::begin(spi, csPin, spiSettings); | |||||
} | |||||
/** | |||||
* Read a 512 byte block from an SD card. | |||||
* | |||||
* \param[in] block Logical block to be read. | |||||
* \param[out] dst Pointer to the location that will receive the data. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool readBlock(uint32_t block, uint8_t* dst); | |||||
/** End multi-block transfer and go to idle state. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool syncBlocks(); | |||||
/** | |||||
* Writes a 512 byte block to an SD card. | |||||
* | |||||
* \param[in] block Logical block to be written. | |||||
* \param[in] src Pointer to the location of the data to be written. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool writeBlock(uint32_t block, const uint8_t* src); | |||||
/** | |||||
* Read multiple 512 byte blocks from an SD card. | |||||
* | |||||
* \param[in] block Logical block to be read. | |||||
* \param[in] nb Number of blocks to be read. | |||||
* \param[out] dst Pointer to the location that will receive the data. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool readBlocks(uint32_t block, uint8_t* dst, size_t nb); | |||||
/** | |||||
* Write multiple 512 byte blocks to an SD card. | |||||
* | |||||
* \param[in] block Logical block to be written. | |||||
* \param[in] nb Number of blocks to be written. | |||||
* \param[in] src Pointer to the location of the data to be written. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool writeBlocks(uint32_t block, const uint8_t* src, size_t nb); | |||||
private: | |||||
static const uint32_t IDLE_STATE = 0; | |||||
static const uint32_t READ_STATE = 1; | |||||
static const uint32_t WRITE_STATE = 2; | |||||
uint32_t m_curBlock; | |||||
uint8_t m_curState; | |||||
}; | |||||
#endif // SdSpiCard_h |
* along with the Arduino SdFat Library. If not, see | * along with the Arduino SdFat Library. If not, see | ||||
* <http://www.gnu.org/licenses/>. | * <http://www.gnu.org/licenses/>. | ||||
*/ | */ | ||||
#include "BlockDriver.h" | |||||
bool SdBlockDriverEX::readBlock(uint32_t block, uint8_t* dst) { | |||||
#include "SdSpiCard.h" | |||||
bool SdSpiCardEX::readBlock(uint32_t block, uint8_t* dst) { | |||||
if (m_curState != READ_STATE || block != m_curBlock) { | if (m_curState != READ_STATE || block != m_curBlock) { | ||||
if (!syncBlocks()) { | if (!syncBlocks()) { | ||||
return false; | return false; | ||||
return true; | return true; | ||||
} | } | ||||
//----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
bool SdBlockDriverEX::readBlocks(uint32_t block, uint8_t* dst, size_t nb) { | |||||
bool SdSpiCardEX::readBlocks(uint32_t block, uint8_t* dst, size_t nb) { | |||||
for (size_t i = 0; i < nb; i++) { | for (size_t i = 0; i < nb; i++) { | ||||
if (!readBlock(block + i, dst + i*512UL)) { | if (!readBlock(block + i, dst + i*512UL)) { | ||||
return false; | return false; | ||||
return true; | return true; | ||||
} | } | ||||
//----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
bool SdBlockDriverEX::syncBlocks() { | |||||
bool SdSpiCardEX::syncBlocks() { | |||||
if (m_curState == READ_STATE) { | if (m_curState == READ_STATE) { | ||||
m_curState = IDLE_STATE; | m_curState = IDLE_STATE; | ||||
if (!SdSpiCard::readStop()) { | if (!SdSpiCard::readStop()) { | ||||
return true; | return true; | ||||
} | } | ||||
//----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
bool SdBlockDriverEX::writeBlock(uint32_t block, const uint8_t* src) { | |||||
bool SdSpiCardEX::writeBlock(uint32_t block, const uint8_t* src) { | |||||
if (m_curState != WRITE_STATE || m_curBlock != block) { | if (m_curState != WRITE_STATE || m_curBlock != block) { | ||||
if (!syncBlocks()) { | if (!syncBlocks()) { | ||||
return false; | return false; | ||||
return true; | return true; | ||||
} | } | ||||
//----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
bool SdBlockDriverEX::writeBlocks(uint32_t block, | |||||
bool SdSpiCardEX::writeBlocks(uint32_t block, | |||||
const uint8_t* src, size_t nb) { | const uint8_t* src, size_t nb) { | ||||
for (size_t i = 0; i < nb; i++) { | for (size_t i = 0; i < nb; i++) { | ||||
if (!writeBlock(block + i, src + i*512UL)) { | if (!writeBlock(block + i, src + i*512UL)) { |
/* Arduino SdCard Library | |||||
* Copyright (C) 2016 by William Greiman | |||||
* | |||||
* This file is part of the Arduino SdSpiCard Library | |||||
* | |||||
* This Library is free software: you can redistribute it and/or modify | |||||
* it under the terms of the GNU General Public License as published by | |||||
* the Free Software Foundation, either version 3 of the License, or | |||||
* (at your option) any later version. | |||||
* | |||||
* This Library is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU General Public License | |||||
* along with the Arduino SdSpiCard Library. If not, see | |||||
* <http://www.gnu.org/licenses/>. | |||||
*/ | |||||
#ifndef SdioCard_h | |||||
#define SdioCard_h | |||||
#include "SysCall.h" | |||||
#include "BlockDriver.h" | |||||
/** | |||||
* \class SdioCard | |||||
* \brief Raw SDIO access to SD and SDHC flash memory cards. | |||||
*/ | |||||
class SdioCard : public BaseBlockDriver { | |||||
public: | |||||
/** Initialize the SD card. | |||||
* \return true for success else false. | |||||
*/ | |||||
bool begin(); | |||||
/** | |||||
* Determine the size of an SD flash memory card. | |||||
* | |||||
* \return The number of 512 byte data blocks in the card | |||||
* or zero if an error occurs. | |||||
*/ | |||||
uint32_t cardSize(); | |||||
/** \return DMA transfer status. */ | |||||
bool dmaBusy(); | |||||
/** Erase a range of blocks. | |||||
* | |||||
* \param[in] firstBlock The address of the first block in the range. | |||||
* \param[in] lastBlock The address of the last block in the range. | |||||
* | |||||
* \note This function requests the SD card to do a flash erase for a | |||||
* range of blocks. The data on the card after an erase operation is | |||||
* either 0 or 1, depends on the card vendor. The card must support | |||||
* single block erase. | |||||
* | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool erase(uint32_t firstBlock, uint32_t lastBlock); | |||||
/** | |||||
* \return code for the last error. See SdInfo.h for a list of error codes. | |||||
*/ | |||||
uint8_t errorCode(); | |||||
/** \return error data for last error. */ | |||||
uint32_t errorData(); | |||||
/** \return error line for last error. Tmp function for debug. */ | |||||
uint32_t errorLine(); | |||||
/** | |||||
* Read a 512 byte block from an SD card. | |||||
* | |||||
* \param[in] lba Logical block to be read. | |||||
* \param[out] dst Pointer to the location that will receive the data. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool readBlock(uint32_t lba, uint8_t* dst); | |||||
/** | |||||
* Read multiple 512 byte blocks from an SD card. | |||||
* | |||||
* \param[in] lba Logical block to be read. | |||||
* \param[in] nb Number of blocks to be read. | |||||
* \param[out] dst Pointer to the location that will receive the data. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool readBlocks(uint32_t lba, uint8_t* dst, size_t nb); | |||||
/** | |||||
* Read a card's CID register. The CID contains card identification | |||||
* information such as Manufacturer ID, Product name, Product serial | |||||
* number and Manufacturing date. | |||||
* | |||||
* \param[out] cid pointer to area for returned data. | |||||
* | |||||
* \return true for success or false for failure. | |||||
*/ | |||||
bool readCID(void* cid); | |||||
/** | |||||
* Read a card's CSD register. The CSD contains Card-Specific Data that | |||||
* provides information regarding access to the card's contents. | |||||
* | |||||
* \param[out] csd pointer to area for returned data. | |||||
* | |||||
* \return true for success or false for failure. | |||||
*/ | |||||
bool readCSD(void* csd); | |||||
/** Read OCR register. | |||||
* | |||||
* \param[out] ocr Value of OCR register. | |||||
* \return true for success else false. | |||||
*/ | |||||
bool readOCR(uint32_t* ocr); | |||||
/** \return success if sync successful. Not for user apps. */ | |||||
bool syncBlocks(); | |||||
/** Return the card type: SD V1, SD V2 or SDHC | |||||
* \return 0 - SD V1, 1 - SD V2, or 3 - SDHC. | |||||
*/ | |||||
uint8_t type(); | |||||
/** | |||||
* Writes a 512 byte block to an SD card. | |||||
* | |||||
* \param[in] lba Logical block to be written. | |||||
* \param[in] src Pointer to the location of the data to be written. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool writeBlock(uint32_t lba, const uint8_t* src); | |||||
/** | |||||
* Write multiple 512 byte blocks to an SD card. | |||||
* | |||||
* \param[in] lba Logical block to be written. | |||||
* \param[in] nb Number of blocks to be written. | |||||
* \param[in] src Pointer to the location of the data to be written. | |||||
* \return The value true is returned for success and | |||||
* the value false is returned for failure. | |||||
*/ | |||||
bool writeBlocks(uint32_t lba, const uint8_t* src, size_t nb); | |||||
}; | |||||
#endif // SdioCard_h |
/* Arduino SdCard Library | |||||
* Copyright (C) 2016 by William Greiman | |||||
* | |||||
* This file is part of the Arduino SdSpiCard Library | |||||
* | |||||
* This Library is free software: you can redistribute it and/or modify | |||||
* it under the terms of the GNU General Public License as published by | |||||
* the Free Software Foundation, either version 3 of the License, or | |||||
* (at your option) any later version. | |||||
* | |||||
* This Library is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU General Public License | |||||
* along with the Arduino SdSpiCard Library. If not, see | |||||
* <http://www.gnu.org/licenses/>. | |||||
*/ | |||||
#if defined(__MK64FX512__) || defined(__MK66FX1M0__) | |||||
#include "SdioCard.h" | |||||
//============================================================================== | |||||
#ifndef SDHC_WML_RDWML_MASK | |||||
#define SDHC_WML_RDWML_MASK (0XFFU) | |||||
#endif | |||||
#ifndef SDHC_WML_RDWML_SHIFT | |||||
#define SDHC_WML_RDWML_SHIFT (0U) | |||||
#endif | |||||
#define SDHC_PROCTL_DTW_4BIT 0x01 | |||||
//============================================================================== | |||||
const uint32_t SDHC_IRQSTATEN_MASK = | |||||
SDHC_IRQSTATEN_DMAESEN | SDHC_IRQSTATEN_AC12ESEN | | |||||
SDHC_IRQSTATEN_DEBESEN | SDHC_IRQSTATEN_DCESEN | | |||||
SDHC_IRQSTATEN_DTOESEN | SDHC_IRQSTATEN_CIESEN | | |||||
SDHC_IRQSTATEN_CEBESEN | SDHC_IRQSTATEN_CCESEN | | |||||
SDHC_IRQSTATEN_CTOESEN | SDHC_IRQSTATEN_BRRSEN | | |||||
SDHC_IRQSTATEN_BWRSEN | SDHC_IRQSTATEN_DINTSEN | | |||||
SDHC_IRQSTATEN_TCSEN | SDHC_IRQSTATEN_CCSEN; | |||||
const uint32_t SDHC_IRQSTAT_CMD_ERROR = | |||||
SDHC_IRQSTAT_CIE | SDHC_IRQSTAT_CEBE | | |||||
SDHC_IRQSTAT_CCE | SDHC_IRQSTAT_CTOE; | |||||
const uint32_t SDHC_IRQSTAT_DATA_ERROR = | |||||
SDHC_IRQSTAT_AC12E | SDHC_IRQSTAT_DEBE | | |||||
SDHC_IRQSTAT_DCE | SDHC_IRQSTAT_DTOE; | |||||
const uint32_t SDHC_IRQSTAT_ERROR = | |||||
SDHC_IRQSTAT_DMAE | SDHC_IRQSTAT_CMD_ERROR | | |||||
SDHC_IRQSTAT_DATA_ERROR; | |||||
const uint32_t SDHC_IRQSIGEN_MASK = | |||||
SDHC_IRQSIGEN_DMAEIEN | SDHC_IRQSIGEN_AC12EIEN | | |||||
SDHC_IRQSIGEN_DEBEIEN | SDHC_IRQSIGEN_DCEIEN | | |||||
SDHC_IRQSIGEN_DTOEIEN | SDHC_IRQSIGEN_CIEIEN | | |||||
SDHC_IRQSIGEN_CEBEIEN | SDHC_IRQSIGEN_CCEIEN | | |||||
SDHC_IRQSIGEN_CTOEIEN | SDHC_IRQSIGEN_TCIEN; | |||||
//============================================================================= | |||||
const uint32_t CMD_RESP_NONE = SDHC_XFERTYP_RSPTYP(0); | |||||
const uint32_t CMD_RESP_R1 = SDHC_XFERTYP_CICEN | SDHC_XFERTYP_CCCEN | | |||||
SDHC_XFERTYP_RSPTYP(2); | |||||
const uint32_t CMD_RESP_R1b = SDHC_XFERTYP_CICEN | SDHC_XFERTYP_CCCEN | | |||||
SDHC_XFERTYP_RSPTYP(3); | |||||
const uint32_t CMD_RESP_R2 = SDHC_XFERTYP_CCCEN | SDHC_XFERTYP_RSPTYP(1); | |||||
const uint32_t CMD_RESP_R3 = SDHC_XFERTYP_RSPTYP(2); | |||||
const uint32_t CMD_RESP_R6 = CMD_RESP_R1; | |||||
const uint32_t CMD_RESP_R7 = CMD_RESP_R1; | |||||
const uint32_t DATA_READ = SDHC_XFERTYP_DTDSEL | SDHC_XFERTYP_DPSEL; | |||||
const uint32_t DATA_READ_DMA = DATA_READ | SDHC_XFERTYP_DMAEN; | |||||
const uint32_t DATA_READ_MULTI_DMA = DATA_READ_DMA | SDHC_XFERTYP_MSBSEL | | |||||
SDHC_XFERTYP_AC12EN | SDHC_XFERTYP_BCEN; | |||||
const uint32_t DATA_WRITE_DMA = SDHC_XFERTYP_DPSEL | SDHC_XFERTYP_DMAEN; | |||||
const uint32_t DATA_WRITE_MULTI_DMA = DATA_WRITE_DMA | SDHC_XFERTYP_MSBSEL | | |||||
SDHC_XFERTYP_AC12EN | SDHC_XFERTYP_BCEN; | |||||
const uint32_t ACMD6_XFERTYP = SDHC_XFERTYP_CMDINX(ACMD6) | CMD_RESP_R1; | |||||
const uint32_t ACMD41_XFERTYP = SDHC_XFERTYP_CMDINX(ACMD41) | CMD_RESP_R3; | |||||
const uint32_t CMD0_XFERTYP = SDHC_XFERTYP_CMDINX(CMD0) | CMD_RESP_NONE; | |||||
const uint32_t CMD2_XFERTYP = SDHC_XFERTYP_CMDINX(CMD2) | CMD_RESP_R2; | |||||
const uint32_t CMD3_XFERTYP = SDHC_XFERTYP_CMDINX(CMD3) | CMD_RESP_R6; | |||||
const uint32_t CMD6_XFERTYP = SDHC_XFERTYP_CMDINX(CMD6) | CMD_RESP_R1 | | |||||
DATA_READ_DMA; | |||||
const uint32_t CMD7_XFERTYP = SDHC_XFERTYP_CMDINX(CMD7) | CMD_RESP_R1b; | |||||
const uint32_t CMD8_XFERTYP = SDHC_XFERTYP_CMDINX(CMD8) | CMD_RESP_R7; | |||||
const uint32_t CMD9_XFERTYP = SDHC_XFERTYP_CMDINX(CMD9) | CMD_RESP_R2; | |||||
const uint32_t CMD10_XFERTYP = SDHC_XFERTYP_CMDINX(CMD10) | CMD_RESP_R2; | |||||
const uint32_t CMD13_XFERTYP = SDHC_XFERTYP_CMDINX(CMD13) | CMD_RESP_R1; | |||||
const uint32_t CMD17_XFERTYP = SDHC_XFERTYP_CMDINX(CMD17) | CMD_RESP_R1 | | |||||
DATA_READ_DMA; | |||||
const uint32_t CMD18_XFERTYP = SDHC_XFERTYP_CMDINX(CMD18) | CMD_RESP_R1 | | |||||
DATA_READ_MULTI_DMA; | |||||
const uint32_t CMD24_XFERTYP = SDHC_XFERTYP_CMDINX(CMD24) | CMD_RESP_R1 | | |||||
DATA_WRITE_DMA; | |||||
const uint32_t CMD25_XFERTYP = SDHC_XFERTYP_CMDINX(CMD25) | CMD_RESP_R1 | | |||||
DATA_WRITE_MULTI_DMA; | |||||
const uint32_t CMD32_XFERTYP = SDHC_XFERTYP_CMDINX(CMD32) | CMD_RESP_R1; | |||||
const uint32_t CMD33_XFERTYP = SDHC_XFERTYP_CMDINX(CMD33) | CMD_RESP_R1; | |||||
const uint32_t CMD38_XFERTYP = SDHC_XFERTYP_CMDINX(CMD38) | CMD_RESP_R1b; | |||||
const uint32_t CMD55_XFERTYP = SDHC_XFERTYP_CMDINX(CMD55) | CMD_RESP_R1; | |||||
//============================================================================= | |||||
static bool isBusy(); | |||||
static bool readReg16(uint32_t xfertyp, void* data); | |||||
static void setSdclk(uint32_t kHzMax); | |||||
static uint8_t m_errorCode = SD_CARD_ERROR_INIT_NOT_CALLED; | |||||
static uint32_t m_errorLine = 0; | |||||
static bool m_version2; | |||||
static bool m_highCapacity; | |||||
static uint32_t m_rca; | |||||
bool m_waitCmd13 = false; | |||||
static volatile bool m_dmaDone = true; | |||||
static volatile uint32_t m_irqstat; | |||||
static uint32_t m_sdClkKhz = 0; | |||||
static cid_t m_cid; | |||||
static csd_t m_csd; | |||||
static uint32_t m_ocr; | |||||
//============================================================================= | |||||
// Debug and error macros. | |||||
#define sdError(code) setSdErrorCode(code, __LINE__) | |||||
inline bool setSdErrorCode(uint8_t code, uint32_t line) { | |||||
m_errorCode = code; | |||||
m_errorLine = line; | |||||
return false; | |||||
} | |||||
//============================================================================= | |||||
void sdhc_isr() { | |||||
SDHC_IRQSIGEN = 0; | |||||
m_irqstat = SDHC_IRQSTAT; | |||||
SDHC_IRQSTAT = m_irqstat; | |||||
m_dmaDone = true; | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
static void enableDmaIrs() { | |||||
m_dmaDone = false; | |||||
m_irqstat = 0; | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
static bool waitDmaStatus() { | |||||
while (!m_dmaDone) { | |||||
yield(); | |||||
} | |||||
return (m_irqstat & SDHC_IRQSTAT_TC) && !(m_irqstat & SDHC_IRQSTAT_ERROR); | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
static void enableGPIO(bool enable) { | |||||
const uint32_t PORT_CLK = PORT_PCR_MUX(4) | PORT_PCR_DSE; | |||||
const uint32_t PORT_CMD_DATA = PORT_CLK | PORT_PCR_PS | PORT_PCR_PE; | |||||
PORTE_PCR0 = enable ? PORT_CMD_DATA : 0; // SDHC_D1 | |||||
PORTE_PCR1 = enable ? PORT_CMD_DATA : 0; // SDHC_D0 | |||||
PORTE_PCR2 = enable ? PORT_CLK : 0; // SDHC_CLK | |||||
PORTE_PCR3 = enable ? PORT_CMD_DATA : 0; // SDHC_CMD | |||||
PORTE_PCR4 = enable ? PORT_CMD_DATA : 0; // SDHC_D3 | |||||
PORTE_PCR5 = enable ? PORT_CMD_DATA : 0; // SDHC_D2 | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
static void SDHC_Init() { | |||||
#ifdef HAS_KINETIS_MPU | |||||
// Allow SDHC Bus Master access. | |||||
MPU_RGDAAC0 |= 0x0C000000; | |||||
#endif | |||||
// Enable SDHC clock. | |||||
SIM_SCGC3 |= SIM_SCGC3_SDHC; | |||||
// Disable GPIO clock. | |||||
enableGPIO(false); | |||||
// Reset SDHC. Use default Water Mark Level of 16. | |||||
SDHC_SYSCTL = SDHC_SYSCTL_RSTA; | |||||
while (SDHC_SYSCTL & SDHC_SYSCTL_RSTA) { | |||||
} | |||||
// Set initial SCK rate. | |||||
setSdclk(400); | |||||
enableGPIO(true); | |||||
// Enable desired IRQSTAT bits. | |||||
SDHC_IRQSTATEN = SDHC_IRQSTATEN_MASK; | |||||
NVIC_SET_PRIORITY(IRQ_SDHC, 6*16); | |||||
NVIC_ENABLE_IRQ(IRQ_SDHC); | |||||
// Send 80 clocks to card. | |||||
SDHC_SYSCTL |= SDHC_SYSCTL_INITA; | |||||
while (SDHC_SYSCTL & SDHC_SYSCTL_INITA) { | |||||
} | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
static bool rdWrBlocks(uint32_t xfertyp, | |||||
uint32_t lba, uint8_t* buf, size_t n) { | |||||
if ((3 & (uint32_t)buf) || n == 0) { | |||||
return sdError(SD_CARD_ERROR_DMA); | |||||
} | |||||
m_waitCmd13 = true; | |||||
while (isBusy()) { | |||||
yield(); | |||||
} | |||||
m_waitCmd13 = false; | |||||
enableDmaIrs(); | |||||
SDHC_DSADDR = (uint32_t)buf; | |||||
SDHC_CMDARG = m_highCapacity ? lba : 512*lba; | |||||
SDHC_BLKATTR = SDHC_BLKATTR_BLKCNT(n) | SDHC_BLKATTR_BLKSIZE(512); | |||||
SDHC_IRQSIGEN = SDHC_IRQSIGEN_MASK; | |||||
SDHC_XFERTYP = xfertyp; | |||||
return waitDmaStatus(); | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
static bool cardCommand(uint32_t xfertyp, uint32_t arg) { | |||||
SDHC_CMDARG = arg; | |||||
SDHC_XFERTYP = xfertyp; | |||||
do { | |||||
m_irqstat = SDHC_IRQSTAT; | |||||
} while (!(m_irqstat & (SDHC_IRQSTAT_CC | SDHC_IRQSTAT_CMD_ERROR))); | |||||
SDHC_IRQSTAT = m_irqstat; | |||||
return (m_irqstat & SDHC_IRQSTAT_CC) && | |||||
!(m_irqstat & SDHC_IRQSTAT_CMD_ERROR); | |||||
} | |||||
//------------------------------------------------------------------------------ | |||||
static bool cardAcmd(uint32_t rca, uint32_t xfertyp, uint32_t arg) { | |||||
return cardCommand(CMD55_XFERTYP, rca) && cardCommand (xfertyp, arg); | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
static bool isBusy() { | |||||
if (!cardCommand(CMD13_XFERTYP, m_rca)) { | |||||
// Should have timeout in caller? | |||||
return true; | |||||
} | |||||
return !(SDHC_CMDRSP0 & CARD_STATUS_READY_FOR_DATA); | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
static void setSdclk(uint32_t kHzMax) { | |||||
const uint32_t DVS_LIMIT = 0X10; | |||||
const uint32_t SDCLKFS_LIMIT = 0X100; | |||||
uint32_t dvs = 1; | |||||
uint32_t sdclkfs = 1; | |||||
uint32_t maxSdclk = 1000*kHzMax; | |||||
while ((F_CPU/(sdclkfs*DVS_LIMIT) > maxSdclk) && (sdclkfs < SDCLKFS_LIMIT)) { | |||||
sdclkfs <<= 1; | |||||
} | |||||
while ((F_CPU/(sdclkfs*dvs) > maxSdclk) && (dvs < DVS_LIMIT)) { | |||||
dvs++; | |||||
} | |||||
m_sdClkKhz = F_CPU/(sdclkfs*dvs); | |||||
sdclkfs >>= 1; | |||||
dvs--; | |||||
// Disable SDHC clock. | |||||
SDHC_SYSCTL &= ~SDHC_SYSCTL_SDCLKEN; | |||||
// Change dividers. | |||||
uint32_t sysctl = SDHC_SYSCTL & ~(SDHC_SYSCTL_DTOCV_MASK | |||||
| SDHC_SYSCTL_DVS_MASK | SDHC_SYSCTL_SDCLKFS_MASK); | |||||
SDHC_SYSCTL = sysctl | SDHC_SYSCTL_DTOCV(0x0E) | SDHC_SYSCTL_DVS(dvs) | |||||
| SDHC_SYSCTL_SDCLKFS(sdclkfs); | |||||
// Wait until the SDHC clock is stable. | |||||
while (!(SDHC_PRSSTAT & SDHC_PRSSTAT_SDSTB)) { | |||||
} | |||||
// Enable the SDHC clock. | |||||
SDHC_SYSCTL |= SDHC_SYSCTL_SDCLKEN; | |||||
} | |||||
//------------------------------------------------------------------------------ | |||||
static bool cardCMD6(uint32_t arg, uint8_t* status) { | |||||
// CMD6 returns 64 bytes. | |||||
while (isBusy()) { | |||||
} | |||||
enableDmaIrs(); | |||||
SDHC_DSADDR = (uint32_t)status; | |||||
SDHC_CMDARG = arg; | |||||
SDHC_BLKATTR = SDHC_BLKATTR_BLKCNT(1) | SDHC_BLKATTR_BLKSIZE(64); | |||||
SDHC_IRQSIGEN = SDHC_IRQSIGEN_MASK; | |||||
SDHC_XFERTYP = CMD6_XFERTYP; | |||||
if (!waitDmaStatus()) { | |||||
return sdError(SD_CARD_ERROR_CMD6); | |||||
} | |||||
return true; | |||||
} | |||||
//------------------------------------------------------------------------------ | |||||
static bool cardInit() { | |||||
uint32_t kbaudrate; | |||||
uint32_t arg; | |||||
m_errorCode = SD_CARD_ERROR_NONE; | |||||
m_highCapacity = false; | |||||
m_version2 = false; | |||||
// initialize controller. | |||||
SDHC_Init(); | |||||
if (!cardCommand(CMD0_XFERTYP, 0)) { | |||||
return sdError(SD_CARD_ERROR_CMD0); | |||||
} | |||||
if (cardCommand(CMD8_XFERTYP, 0X1AA)) { | |||||
if (SDHC_CMDRSP0 != 0X1AA) { | |||||
return sdError(SD_CARD_ERROR_CMD8); | |||||
} | |||||
m_version2 = true; | |||||
} | |||||
arg = m_version2 ? 0X40300000 : 0x00300000; | |||||
int i = 0; | |||||
do { | |||||
if (!cardAcmd(0, ACMD41_XFERTYP, arg) || i++ > 1000) { | |||||
return sdError(SD_CARD_ERROR_ACMD41); | |||||
} | |||||
} while ((SDHC_CMDRSP0 & 0x80000000) == 0); | |||||
m_ocr = SDHC_CMDRSP0; | |||||
if (SDHC_CMDRSP0 & 0x40000000) { | |||||
// is high capacity | |||||
m_highCapacity = true; | |||||
} | |||||
if (!cardCommand(CMD2_XFERTYP, 0)) { | |||||
return sdError(SD_CARD_ERROR_CMD2); | |||||
} | |||||
if (!cardCommand(CMD3_XFERTYP, 0)) { | |||||
return sdError(SD_CARD_ERROR_CMD3); | |||||
} | |||||
m_rca = SDHC_CMDRSP0 & 0xFFFF0000; | |||||
if (!readReg16(CMD9_XFERTYP, &m_csd)) { | |||||
return sdError(SD_CARD_ERROR_CMD9); | |||||
} | |||||
if (!readReg16(CMD10_XFERTYP, &m_cid)) { | |||||
return sdError(SD_CARD_ERROR_CMD10); | |||||
} | |||||
if (!cardCommand(CMD7_XFERTYP, m_rca)) { | |||||
return sdError(SD_CARD_ERROR_CMD7); | |||||
} | |||||
if (!cardAcmd(m_rca, ACMD6_XFERTYP, 2)) { | |||||
return sdError(SD_CARD_ERROR_ACMD6); | |||||
} | |||||
// Set Data bus width to four. | |||||
SDHC_PROCTL &= ~SDHC_PROCTL_DTW_MASK; | |||||
SDHC_PROCTL |= SDHC_PROCTL_DTW(SDHC_PROCTL_DTW_4BIT); | |||||
uint8_t status[64]; | |||||
if (cardCMD6(0X00FFFFFF, status) && (2 & status[13]) && | |||||
cardCMD6(0X80FFFFF1, status) && (status[16] & 0XF) == 1) { | |||||
kbaudrate = 50000; | |||||
} else { | |||||
kbaudrate = 25000; | |||||
} | |||||
// disable GPIO | |||||
enableGPIO(false); | |||||
// Set the SDHC SCK frequency. | |||||
setSdclk(kbaudrate); | |||||
// enable GPIO | |||||
enableGPIO(true); | |||||
return true; | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
static bool readReg16(uint32_t xfertyp, void* data) { | |||||
if (!cardCommand(xfertyp, m_rca)) { | |||||
return false; | |||||
} | |||||
uint8_t* d = reinterpret_cast<uint8_t*>(data); | |||||
d[0] = SDHC_CMDRSP3 >> 16; | |||||
d[1] = SDHC_CMDRSP3 >> 8; | |||||
d[2] = SDHC_CMDRSP3; | |||||
d[3] = SDHC_CMDRSP2 >> 24; | |||||
d[4] = SDHC_CMDRSP2 >> 16; | |||||
d[5] = SDHC_CMDRSP2 >> 8; | |||||
d[6] = SDHC_CMDRSP2; | |||||
d[7] = SDHC_CMDRSP1 >> 24; | |||||
d[8] = SDHC_CMDRSP1 >> 16; | |||||
d[9] = SDHC_CMDRSP1 >> 8; | |||||
d[10] = SDHC_CMDRSP1; | |||||
d[11] = SDHC_CMDRSP0 >> 24; | |||||
d[12] = SDHC_CMDRSP0 >> 16; | |||||
d[13] = SDHC_CMDRSP0 >> 8; | |||||
d[14] = SDHC_CMDRSP0; | |||||
d[15] = 0; | |||||
return true; | |||||
} | |||||
//============================================================================= | |||||
bool SdioCard::begin() { | |||||
return cardInit(); | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
uint32_t SdioCard::cardSize() { | |||||
return sdCardCapacity(&m_csd); | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
bool SdioCard::dmaBusy() { | |||||
return m_waitCmd13 ? isBusy() : !m_dmaDone; | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
bool SdioCard::erase(uint32_t firstBlock, uint32_t lastBlock) { | |||||
csd_t csd; | |||||
if (!readCSD(&csd)) { | |||||
return false; | |||||
} | |||||
// check for single block erase | |||||
if (!csd.v1.erase_blk_en) { | |||||
// erase size mask | |||||
uint8_t m = (csd.v1.sector_size_high << 1) | csd.v1.sector_size_low; | |||||
if ((firstBlock & m) != 0 || ((lastBlock + 1) & m) != 0) { | |||||
// error card can't erase specified area | |||||
return sdError(SD_CARD_ERROR_ERASE_SINGLE_BLOCK); | |||||
} | |||||
} | |||||
if (!m_highCapacity) { | |||||
firstBlock <<= 9; | |||||
lastBlock <<= 9; | |||||
} | |||||
if (!cardCommand(CMD32_XFERTYP, firstBlock)) { | |||||
return sdError(SD_CARD_ERROR_CMD32); | |||||
} | |||||
if (!cardCommand(CMD33_XFERTYP, lastBlock)) { | |||||
return sdError(SD_CARD_ERROR_CMD33); | |||||
} | |||||
if (!cardCommand(CMD38_XFERTYP, 0)) { | |||||
return sdError(SD_CARD_ERROR_CMD38); | |||||
} | |||||
while (isBusy()) { | |||||
} | |||||
return true; | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
uint8_t SdioCard::errorCode() { | |||||
return m_errorCode; | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
uint32_t SdioCard::errorData() { | |||||
return m_irqstat; | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
uint32_t SdioCard::errorLine() { | |||||
return m_errorLine; | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
bool SdioCard::readBlock(uint32_t lba, uint8_t* buf) { | |||||
uint8_t aligned[512]; | |||||
uint8_t* ptr = (uint32_t)buf & 3 ? aligned : buf; | |||||
if (!rdWrBlocks(CMD17_XFERTYP, lba, ptr, 1)) { | |||||
return sdError(SD_CARD_ERROR_CMD18); | |||||
} | |||||
if (ptr != buf) { | |||||
memcpy(buf, aligned, 512); | |||||
} | |||||
return true; | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
bool SdioCard::readBlocks(uint32_t lba, uint8_t* buf, size_t n) { | |||||
if ((uint32_t)buf & 3) { | |||||
for (size_t i = 0; i < n; i++, lba++, buf += 512) { | |||||
if (!readBlock(lba, buf)) { | |||||
return false; | |||||
} | |||||
} | |||||
return true; | |||||
} | |||||
if (!rdWrBlocks(CMD18_XFERTYP, lba, buf, n)) { | |||||
return sdError(SD_CARD_ERROR_CMD18); | |||||
} | |||||
return true; | |||||
} | |||||
//---------------------------------------------------------------------------- | |||||
bool SdioCard::readCID(void* cid) { | |||||
memcpy(cid, &m_cid, 16); | |||||
return true; | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
bool SdioCard::readCSD(void* csd) { | |||||
memcpy(csd, &m_csd, 16); | |||||
return true; | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
bool SdioCard::readOCR(uint32_t* ocr) { | |||||
*ocr = m_ocr; | |||||
return true; | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
bool SdioCard::syncBlocks() { | |||||
return true; | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
uint8_t SdioCard::type() { | |||||
return m_version2 ? m_highCapacity ? | |||||
SD_CARD_TYPE_SDHC : SD_CARD_TYPE_SD2 : SD_CARD_TYPE_SD1; | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
bool SdioCard::writeBlock(uint32_t lba, const uint8_t* buf) { | |||||
uint8_t *ptr; | |||||
uint8_t aligned[512]; | |||||
if (3 & (uint32_t)buf) { | |||||
ptr = aligned; | |||||
memcpy(aligned, buf, 512); | |||||
} else { | |||||
ptr = const_cast<uint8_t*>(buf); | |||||
} | |||||
if (!rdWrBlocks(CMD24_XFERTYP, lba, ptr, 1)) { | |||||
return sdError(SD_CARD_ERROR_CMD24); | |||||
} | |||||
return true; | |||||
} | |||||
//----------------------------------------------------------------------------- | |||||
bool SdioCard::writeBlocks(uint32_t lba, const uint8_t* buf, size_t n) { | |||||
uint8_t* ptr = const_cast<uint8_t*>(buf); | |||||
if (3 & (uint32_t)ptr) { | |||||
for (size_t i = 0; i < n; i++, lba++, ptr += 512) { | |||||
if (!writeBlock(lba, ptr)) { | |||||
return false; | |||||
} | |||||
} | |||||
return true; | |||||
} | |||||
if (!rdWrBlocks(CMD25_XFERTYP, lba, ptr, n)) { | |||||
return sdError(SD_CARD_ERROR_CMD25); | |||||
} | |||||
return true; | |||||
} | |||||
#endif // defined(__MK64FX512__) || defined(__MK66FX1M0__) |
*/ | */ | ||||
#include "SysCall.h" | #include "SysCall.h" | ||||
#include "BlockDriver.h" | #include "BlockDriver.h" | ||||
#ifdef ARDUINO | |||||
#include "FatLib/FatLib.h" | #include "FatLib/FatLib.h" | ||||
#else // ARDUINO | |||||
#include "FatLib.h" | |||||
#endif // ARDUINO | |||||
#include "SdCard/SdioCard.h" | |||||
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||
/** SdFat version YYYYMMDD */ | /** SdFat version YYYYMMDD */ | ||||
#define SD_FAT_VERSION 20160801 | |||||
#define SD_FAT_VERSION 20160905 | |||||
//============================================================================== | //============================================================================== | ||||
/** | /** | ||||
* \class SdBaseFile | * \class SdBaseFile | ||||
template<class SdDriverClass> | template<class SdDriverClass> | ||||
class SdFileSystem : public FatFileSystem { | class SdFileSystem : public FatFileSystem { | ||||
public: | public: | ||||
/** Initialize SD card and file system. | |||||
* \param[in] spi SPI object for the card. | |||||
* \param[in] csPin SD card chip select pin. | |||||
* \param[in] spiSettings SPI speed, mode, and bit order. | |||||
/** Initialize file system. | |||||
* \return true for success else false. | * \return true for success else false. | ||||
*/ | */ | ||||
bool begin(SdSpiDriver* spi, uint8_t csPin, SPISettings spiSettings) { | |||||
return m_card.begin(spi, csPin, spiSettings) && | |||||
FatFileSystem::begin(&m_card); | |||||
bool begin() { | |||||
return FatFileSystem::begin(&m_card); | |||||
} | } | ||||
/** \return Pointer to SD card object */ | /** \return Pointer to SD card object */ | ||||
SdDriverClass *card() { | SdDriverClass *card() { | ||||
m_card.syncBlocks(); | m_card.syncBlocks(); | ||||
return &m_card; | return &m_card; | ||||
} | } | ||||
/** Initialize SD card for diagnostic use. | |||||
* \param[in] spi SPI object for the card. | |||||
* \param[in] csPin SD card chip select pin. | |||||
* \param[in] spiSettings SPI speed, mode, and bit order. | |||||
* \return true for success else false. | |||||
*/ | |||||
bool cardBegin(SdSpiDriver* spi, uint8_t csPin, SPISettings spiSettings) { | |||||
return m_card.begin(spi, csPin, spiSettings); | |||||
} | |||||
/** %Print any SD error code to Serial and halt. */ | /** %Print any SD error code to Serial and halt. */ | ||||
void errorHalt() { | void errorHalt() { | ||||
errorHalt(&Serial); | errorHalt(&Serial); | ||||
return m_card.errorCode(); | return m_card.errorCode(); | ||||
} | } | ||||
/** \return the card error data */ | /** \return the card error data */ | ||||
uint8_t cardErrorData() { | |||||
uint32_t cardErrorData() { | |||||
return m_card.errorData(); | return m_card.errorData(); | ||||
} | } | ||||
private: | |||||
protected: | |||||
SdDriverClass m_card; | SdDriverClass m_card; | ||||
}; | }; | ||||
//============================================================================== | //============================================================================== | ||||
* \class SdFat | * \class SdFat | ||||
* \brief Main file system class for %SdFat library. | * \brief Main file system class for %SdFat library. | ||||
*/ | */ | ||||
class SdFat : public SdFileSystem<SdBlockDriver> { | |||||
class SdFat : public SdFileSystem<SdSpiCard> { | |||||
public: | public: | ||||
#if IMPLEMENT_SPI_PORT_SELECTION || defined(DOXYGEN) | #if IMPLEMENT_SPI_PORT_SELECTION || defined(DOXYGEN) | ||||
SdFat() { | SdFat() { | ||||
* \return true for success else false. | * \return true for success else false. | ||||
*/ | */ | ||||
bool begin(uint8_t csPin = SS, SPISettings spiSettings = SPI_FULL_SPEED) { | bool begin(uint8_t csPin = SS, SPISettings spiSettings = SPI_FULL_SPEED) { | ||||
return SdFileSystem::begin(&m_spi, csPin, spiSettings); | |||||
return m_card.begin(&m_spi, csPin, spiSettings) && | |||||
SdFileSystem::begin(); | |||||
} | } | ||||
/** Initialize SD card for diagnostic use only. | /** Initialize SD card for diagnostic use only. | ||||
* | * | ||||
* \return true for success else false. | * \return true for success else false. | ||||
*/ | */ | ||||
bool cardBegin(uint8_t csPin = SS, SPISettings settings = SPI_FULL_SPEED) { | bool cardBegin(uint8_t csPin = SS, SPISettings settings = SPI_FULL_SPEED) { | ||||
return SdFileSystem::cardBegin(&m_spi, csPin, settings); | |||||
return m_card.begin(&m_spi, csPin, settings); | |||||
} | } | ||||
/** Initialize file system for diagnostic use only. | /** Initialize file system for diagnostic use only. | ||||
* \return true for success else false. | * \return true for success else false. | ||||
SdFatSpiDriver m_spi; | SdFatSpiDriver m_spi; | ||||
}; | }; | ||||
//============================================================================== | //============================================================================== | ||||
#if ENABLE_SDIO_CLASS || defined(DOXYGEN) | |||||
/** | |||||
* \class SdFatSdio | |||||
* \brief SdFat class using SDIO. | |||||
*/ | |||||
class SdFatSdio : public SdFileSystem<SdioCard> { | |||||
public: | |||||
/** Initialize SD card and file system. | |||||
* \return true for success else false. | |||||
*/ | |||||
bool begin() { | |||||
return m_card.begin() && SdFileSystem::begin(); | |||||
} | |||||
/** Initialize SD card for diagnostic use only. | |||||
* | |||||
* \return true for success else false. | |||||
*/ | |||||
bool cardBegin() { | |||||
return m_card.begin(); | |||||
} | |||||
/** Initialize file system for diagnostic use only. | |||||
* \return true for success else false. | |||||
*/ | |||||
bool fsBegin() { | |||||
return SdFileSystem::begin(); | |||||
} | |||||
}; | |||||
#endif // ENABLE_SDIO_CLASS || defined(DOXYGEN) | |||||
//============================================================================== | |||||
#if ENABLE_SOFTWARE_SPI_CLASS || defined(DOXYGEN) | #if ENABLE_SOFTWARE_SPI_CLASS || defined(DOXYGEN) | ||||
/** | /** | ||||
* \class SdFatSoftSpi | * \class SdFatSoftSpi | ||||
* \brief SdFat class using software SPI. | * \brief SdFat class using software SPI. | ||||
*/ | */ | ||||
template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin> | template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin> | ||||
class SdFatSoftSpi : public SdFileSystem<SdBlockDriver> { | |||||
class SdFatSoftSpi : public SdFileSystem<SdSpiCard> { | |||||
public: | public: | ||||
/** Initialize SD card and file system. | /** Initialize SD card and file system. | ||||
* | * | ||||
* \return true for success else false. | * \return true for success else false. | ||||
*/ | */ | ||||
bool begin(uint8_t csPin = SS, SPISettings spiSettings = SPI_FULL_SPEED) { | bool begin(uint8_t csPin = SS, SPISettings spiSettings = SPI_FULL_SPEED) { | ||||
return SdFileSystem::begin(&m_spi, csPin, spiSettings); | |||||
return m_card.begin(&m_spi, csPin, spiSettings) && | |||||
SdFileSystem::begin(); | |||||
} | } | ||||
private: | private: | ||||
SdSpiSoftDriver<MisoPin, MosiPin, SckPin> m_spi; | SdSpiSoftDriver<MisoPin, MosiPin, SckPin> m_spi; | ||||
}; | }; | ||||
#endif // #if ENABLE_SOFTWARE_SPI_CLASS || defined(DOXYGEN) | #endif // #if ENABLE_SOFTWARE_SPI_CLASS || defined(DOXYGEN) | ||||
#if ENABLE_EXTENDED_TRANSFER_CLASS || defined(DOXYGEN) | |||||
//============================================================================== | //============================================================================== | ||||
#if ENABLE_EXTENDED_TRANSFER_CLASS || defined(DOXYGEN) | |||||
/** | /** | ||||
* \class SdFatEX | * \class SdFatEX | ||||
* \brief SdFat class with extended SD I/O. | * \brief SdFat class with extended SD I/O. | ||||
*/ | */ | ||||
class SdFatEX : public SdFileSystem<SdBlockDriverEX> { | |||||
class SdFatEX : public SdFileSystem<SdSpiCardEX> { | |||||
public: | public: | ||||
#if IMPLEMENT_SPI_PORT_SELECTION || defined(DOXYGEN) | #if IMPLEMENT_SPI_PORT_SELECTION || defined(DOXYGEN) | ||||
SdFatEX() { | SdFatEX() { | ||||
* \return true for success else false. | * \return true for success else false. | ||||
*/ | */ | ||||
bool begin(uint8_t csPin = SS, SPISettings spiSettings = SPI_FULL_SPEED) { | bool begin(uint8_t csPin = SS, SPISettings spiSettings = SPI_FULL_SPEED) { | ||||
return SdFileSystem::begin(&m_spi, csPin, spiSettings); | |||||
return m_card.begin(&m_spi, csPin, spiSettings) && | |||||
SdFileSystem::begin(); | |||||
} | } | ||||
private: | private: | ||||
* \brief SdFat class using software SPI and extended SD I/O. | * \brief SdFat class using software SPI and extended SD I/O. | ||||
*/ | */ | ||||
template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin> | template<uint8_t MisoPin, uint8_t MosiPin, uint8_t SckPin> | ||||
class SdFatSoftSpiEX : public SdFileSystem<SdBlockDriverEX> { | |||||
class SdFatSoftSpiEX : public SdFileSystem<SdSpiCardEX> { | |||||
public: | public: | ||||
/** Initialize SD card and file system. | /** Initialize SD card and file system. | ||||
* | * | ||||
* \param[in] spiSettings ignored for software SPI. | * \param[in] spiSettings ignored for software SPI. | ||||
* \return true for success else false. | * \return true for success else false. | ||||
*/ | */ | ||||
bool begin(uint8_t csPin = SS, SPISettings spiSettings = 2) { | |||||
return SdFileSystem::begin(&m_spi, csPin, spiSettings); | |||||
bool begin(uint8_t csPin = SS, SPISettings spiSettings = SPI_FULL_SPEED) { | |||||
return m_card.begin(&m_spi, csPin, spiSettings) && | |||||
SdFileSystem::begin(); | |||||
} | } | ||||
private: | private: | ||||
SdSpiSoftDriver<MisoPin, MosiPin, SckPin> m_spi; | SdSpiSoftDriver<MisoPin, MosiPin, SckPin> m_spi; | ||||
class Sd2Card : public SdSpiCard { | class Sd2Card : public SdSpiCard { | ||||
public: | public: | ||||
/** Initialize the SD card. | /** Initialize the SD card. | ||||
* \param[in] chipSelectPin SD chip select pin. | |||||
* \param[in] spiSettings SPI speed, mode, and bit order. | |||||
* \param[in] csPin SD chip select pin. | |||||
* \param[in] settings SPI speed, mode, and bit order. | |||||
* \return true for success else false. | * \return true for success else false. | ||||
*/ | */ | ||||
bool begin(uint8_t chipSelectPin = SS, | |||||
SPISettings spiSettings = SD_SCK_MHZ(50)) { | |||||
m_spi.begin(chipSelectPin); | |||||
m_spi.setSpiSettings(SD_SCK_HZ(250000)); | |||||
if (!SdSpiCard::begin(&m_spi)) { | |||||
return false; | |||||
} | |||||
m_spi.setSpiSettings(spiSettings); | |||||
return true; | |||||
bool begin(uint8_t csPin = SS, SPISettings settings = SD_SCK_MHZ(50)) { | |||||
return SdSpiCard::begin(&m_spi, csPin, settings); | |||||
} | } | ||||
private: | private: | ||||
SdFatSpiDriver m_spi; | SdFatSpiDriver m_spi; |
#else // RAMEND | #else // RAMEND | ||||
#define USE_MULTI_BLOCK_IO 1 | #define USE_MULTI_BLOCK_IO 1 | ||||
#endif // RAMEND | #endif // RAMEND | ||||
//----------------------------------------------------------------------------- | |||||
/** Enable SDIO driver if available. */ | |||||
#if defined(__MK64FX512__) || defined(__MK66FX1M0__) | |||||
#define ENABLE_SDIO_CLASS 1 | |||||
#else // ENABLE_SDIO_CLASS | |||||
#define ENABLE_SDIO_CLASS 0 | |||||
#endif // ENABLE_SDIO_CLASS | |||||
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||
/** | /** | ||||
* Determine the default SPI configuration. | * Determine the default SPI configuration. |
/* Arduino SdSpiCard Library | |||||
/* Arduino SdCard Library | |||||
* Copyright (C) 2016 by William Greiman | * Copyright (C) 2016 by William Greiman | ||||
* | * | ||||
* This file is part of the Arduino SdSpiCard Library | * This file is part of the Arduino SdSpiCard Library | ||||
* along with the Arduino SdSpiCard Library. If not, see | * along with the Arduino SdSpiCard Library. If not, see | ||||
* <http://www.gnu.org/licenses/>. | * <http://www.gnu.org/licenses/>. | ||||
*/ | */ | ||||
#ifndef SdSpiBaseDriver_h | #ifndef SdSpiBaseDriver_h | ||||
#define SdSpiBaseDriver_h | #define SdSpiBaseDriver_h | ||||
/** | /** |
#define SdSpiDriver_h | #define SdSpiDriver_h | ||||
#include <Arduino.h> | #include <Arduino.h> | ||||
#include "SPI.h" | #include "SPI.h" | ||||
#include "SdSpiCard/SdSpiBaseDriver.h" | |||||
#include "SdSpiBaseDriver.h" | |||||
#include "SdFatConfig.h" | #include "SdFatConfig.h" | ||||
//----------------------------------------------------------------------------- | //----------------------------------------------------------------------------- | ||||
/** | /** | ||||
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||
#if ENABLE_SOFTWARE_SPI_CLASS || defined(DOXYGEN) | #if ENABLE_SOFTWARE_SPI_CLASS || defined(DOXYGEN) | ||||
#ifdef ARDUINO | #ifdef ARDUINO | ||||
#include "AltSpiDrivers/SoftSPI.h" | |||||
#include "SoftSPI.h" | |||||
#elif defined(PLATFORM_ID) // Only defined if a Particle device | #elif defined(PLATFORM_ID) // Only defined if a Particle device | ||||
#include "SoftSPIParticle.h" | #include "SoftSPIParticle.h" | ||||
#endif // ARDUINO | #endif // ARDUINO |
5 Sep 2016 | |||||
Restructured classes to support SPI and SDIO controllers. | |||||
Support for Teensy 3.5/3.6 SDIO. | |||||
Added TeensySdioDemo example. | |||||
15 Aug 2016 | 15 Aug 2016 | ||||
New classes SdFatEX and SdFatSoftSpiEX with Extended SD I/O. | New classes SdFatEX and SdFatSoftSpiEX with Extended SD I/O. |
<div class="dyncontent"> | <div class="dyncontent"> | ||||
<div class="center"><img src="_arduino_files_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_arduino_files_8h" alt=""/></div> | <div class="center"><img src="_arduino_files_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_arduino_files_8h" alt=""/></div> | ||||
<map name="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_arduino_files_8h" id="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_arduino_files_8h"> | <map name="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_arduino_files_8h" id="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_arduino_files_8h"> | ||||
<area shape="rect" id="node2" href="_fat_lib_config_8h.html" title="configuration definitions " alt="" coords="43,319,148,345"/> | |||||
<area shape="rect" id="node6" href="_fat_file_8h.html" title="FatFile class. " alt="" coords="391,95,464,121"/> | |||||
<area shape="rect" id="node4" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="31,468,135,495"/> | |||||
<area shape="rect" id="node10" href="_fat_structs_8h.html" title="FAT file structures. " alt="" coords="159,244,253,271"/> | |||||
<area shape="rect" id="node11" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="330,169,426,196"/> | |||||
<area shape="rect" id="node12" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="329,244,427,271"/> | |||||
<area shape="rect" id="node13" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="331,319,425,345"/> | |||||
<area shape="rect" id="node14" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="379,393,457,420"/> | |||||
<area shape="rect" id="node16" href="_sd_spi_driver_8h.html" title="SpiDriver classes. " alt="" coords="160,393,260,420"/> | |||||
<area shape="rect" id="node2" href="_fat_lib_config_8h.html" title="configuration definitions " alt="" coords="628,244,733,271"/> | |||||
<area shape="rect" id="node6" href="_fat_file_8h.html" title="FatFile class. " alt="" coords="340,95,413,121"/> | |||||
<area shape="rect" id="node4" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="898,333,1002,360"/> | |||||
<area shape="rect" id="node10" href="_fat_structs_8h.html" title="FAT file structures. " alt="" coords="34,244,129,271"/> | |||||
<area shape="rect" id="node11" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="243,169,339,196"/> | |||||
<area shape="rect" id="node12" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="402,244,500,271"/> | |||||
<area shape="rect" id="node13" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="528,333,670,360"/> | |||||
<area shape="rect" id="node14" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="450,423,529,449"/> | |||||
</map> | </map> | ||||
</div> | </div> | ||||
</div><div class="textblock"><div class="dynheader"> | </div><div class="textblock"><div class="dynheader"> | ||||
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
<div class="dyncontent"> | <div class="dyncontent"> | ||||
<div class="center"><img src="_arduino_stream_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_arduino_stream_8h" alt=""/></div> | <div class="center"><img src="_arduino_stream_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_arduino_stream_8h" alt=""/></div> | ||||
<map name="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_arduino_stream_8h" id="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_arduino_stream_8h"> | <map name="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_arduino_stream_8h" id="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_arduino_stream_8h"> | ||||
<area shape="rect" id="node2" href="_fat_lib_config_8h.html" title="configuration definitions " alt="" coords="43,617,148,644"/> | |||||
<area shape="rect" id="node6" href="bufstream_8h.html" title="ibufstream and obufstream classes " alt="" coords="279,95,370,121"/> | |||||
<area shape="rect" id="node4" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="31,767,135,793"/> | |||||
<area shape="rect" id="node8" href="iostream_8h.html" title="iostream class " alt="" coords="283,169,366,196"/> | |||||
<area shape="rect" id="node9" href="istream_8h.html" title="istream class " alt="" coords="236,244,312,271"/> | |||||
<area shape="rect" id="node22" href="ostream_8h.html" title="ostream class " alt="" coords="337,244,417,271"/> | |||||
<area shape="rect" id="node10" href="ios_8h.html" title="ios_base and ios classes " alt="" coords="301,319,351,345"/> | |||||
<area shape="rect" id="node11" href="_fat_file_8h.html" title="FatFile class. " alt="" coords="289,393,363,420"/> | |||||
<area shape="rect" id="node14" href="_fat_structs_8h.html" title="FAT file structures. " alt="" coords="159,543,253,569"/> | |||||
<area shape="rect" id="node15" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="330,468,426,495"/> | |||||
<area shape="rect" id="node16" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="329,543,427,569"/> | |||||
<area shape="rect" id="node17" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="331,617,425,644"/> | |||||
<area shape="rect" id="node18" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="379,692,457,719"/> | |||||
<area shape="rect" id="node20" href="_sd_spi_driver_8h.html" title="SpiDriver classes. " alt="" coords="160,692,260,719"/> | |||||
<area shape="rect" id="node2" href="_fat_lib_config_8h.html" title="configuration definitions " alt="" coords="627,543,733,569"/> | |||||
<area shape="rect" id="node6" href="bufstream_8h.html" title="ibufstream and obufstream classes " alt="" coords="525,95,616,121"/> | |||||
<area shape="rect" id="node4" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="897,632,1001,659"/> | |||||
<area shape="rect" id="node8" href="iostream_8h.html" title="iostream class " alt="" coords="451,169,533,196"/> | |||||
<area shape="rect" id="node9" href="istream_8h.html" title="istream class " alt="" coords="353,244,429,271"/> | |||||
<area shape="rect" id="node24" href="ostream_8h.html" title="ostream class " alt="" coords="453,244,533,271"/> | |||||
<area shape="rect" id="node10" href="ios_8h.html" title="ios_base and ios classes " alt="" coords="368,319,419,345"/> | |||||
<area shape="rect" id="node11" href="_fat_file_8h.html" title="FatFile class. " alt="" coords="357,393,430,420"/> | |||||
<area shape="rect" id="node14" href="_fat_structs_8h.html" title="FAT file structures. " alt="" coords="34,543,129,569"/> | |||||
<area shape="rect" id="node15" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="244,468,340,495"/> | |||||
<area shape="rect" id="node16" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="401,543,500,569"/> | |||||
<area shape="rect" id="node17" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="527,632,670,659"/> | |||||
<area shape="rect" id="node18" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="450,721,529,748"/> | |||||
</map> | </map> | ||||
</div> | </div> | ||||
</div><div class="textblock"><div class="dynheader"> | </div><div class="textblock"><div class="dynheader"> | ||||
</div></div><!-- contents --> | </div></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</div><!-- top --> | </div><!-- top --> | ||||
<div class="header"> | <div class="header"> | ||||
<div class="summary"> | <div class="summary"> | ||||
<a href="#nested-classes">Classes</a> | | |||||
<a href="#typedef-members">Typedefs</a> </div> | <a href="#typedef-members">Typedefs</a> </div> | ||||
<div class="headertitle"> | <div class="headertitle"> | ||||
<div class="title">BlockDriver.h File Reference</div> </div> | <div class="title">BlockDriver.h File Reference</div> </div> | ||||
<p>Define block driver. | <p>Define block driver. | ||||
<a href="#details">More...</a></p> | <a href="#details">More...</a></p> | ||||
<div class="textblock"><code>#include "<a class="el" href="_sd_spi_card_8h.html">SdSpiCard.h</a>"</code><br /> | |||||
<code>#include "FatLib/BaseBlockDriver.h"</code><br /> | |||||
<div class="textblock"><code>#include "FatLib/BaseBlockDriver.h"</code><br /> | |||||
<code>#include "<a class="el" href="_sd_spi_card_8h.html">SdCard/SdSpiCard.h</a>"</code><br /> | |||||
</div><div class="textblock"><div class="dynheader"> | </div><div class="textblock"><div class="dynheader"> | ||||
Include dependency graph for BlockDriver.h:</div> | Include dependency graph for BlockDriver.h:</div> | ||||
<div class="dyncontent"> | <div class="dyncontent"> | ||||
<div class="center"><img src="_block_driver_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_block_driver_8h" alt=""/></div> | <div class="center"><img src="_block_driver_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_block_driver_8h" alt=""/></div> | ||||
<map name="_arduino_2libraries_2_sd_fat_2src_2_block_driver_8h" id="_arduino_2libraries_2_sd_fat_2src_2_block_driver_8h"> | <map name="_arduino_2libraries_2_sd_fat_2src_2_block_driver_8h" id="_arduino_2libraries_2_sd_fat_2src_2_block_driver_8h"> | ||||
<area shape="rect" id="node2" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="139,95,233,121"/> | |||||
<area shape="rect" id="node4" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="97,169,176,196"/> | |||||
<area shape="rect" id="node6" href="_sd_spi_driver_8h.html" title="SpiDriver classes. " alt="" coords="295,169,395,196"/> | |||||
<area shape="rect" id="node9" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="397,244,501,271"/> | |||||
<area shape="rect" id="node2" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="115,109,257,136"/> | |||||
<area shape="rect" id="node4" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="97,199,176,225"/> | |||||
</map> | </map> | ||||
</div> | </div> | ||||
</div><div class="textblock"><div class="dynheader"> | </div><div class="textblock"><div class="dynheader"> | ||||
</map> | </map> | ||||
</div> | </div> | ||||
</div><table class="memberdecls"> | </div><table class="memberdecls"> | ||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> | |||||
Classes</h2></td></tr> | |||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_block_driver.html">SdBlockDriver</a></td></tr> | |||||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Standard SD block driver. <a href="class_sd_block_driver.html#details">More...</a><br /></td></tr> | |||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_block_driver_e_x.html">SdBlockDriverEX</a></td></tr> | |||||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Extended SD I/O block driver. <a href="class_sd_block_driver_e_x.html#details">More...</a><br /></td></tr> | |||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> | |||||
</table><table class="memberdecls"> | |||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a> | <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a> | ||||
Typedefs</h2></td></tr> | Typedefs</h2></td></tr> | ||||
<tr class="memitem:a29e32edf30724992d0ab870a56fdde6c"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="class_sd_block_driver.html">SdBlockDriver</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="_block_driver_8h.html#a29e32edf30724992d0ab870a56fdde6c">BlockDriver</a></td></tr> | |||||
<tr class="separator:a29e32edf30724992d0ab870a56fdde6c"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:ace97f2377acdc471a01f9f7ec1fd6bbb"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="class_sd_spi_card.html">SdSpiCard</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="_block_driver_8h.html#ace97f2377acdc471a01f9f7ec1fd6bbb">BlockDriver</a></td></tr> | |||||
<tr class="separator:ace97f2377acdc471a01f9f7ec1fd6bbb"><td class="memSeparator" colspan="2"> </td></tr> | |||||
</table> | </table> | ||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> | <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> | ||||
<div class="textblock"><p>Define block driver. </p> | <div class="textblock"><p>Define block driver. </p> | ||||
</div><h2 class="groupheader">Typedef Documentation</h2> | </div><h2 class="groupheader">Typedef Documentation</h2> | ||||
<a class="anchor" id="a29e32edf30724992d0ab870a56fdde6c"></a> | |||||
<a class="anchor" id="ace97f2377acdc471a01f9f7ec1fd6bbb"></a> | |||||
<div class="memitem"> | <div class="memitem"> | ||||
<div class="memproto"> | <div class="memproto"> | ||||
<table class="memname"> | <table class="memname"> | ||||
<tr> | <tr> | ||||
<td class="memname">typedef <a class="el" href="class_sd_block_driver.html">SdBlockDriver</a> <a class="el" href="_block_driver_8h.html#a29e32edf30724992d0ab870a56fdde6c">BlockDriver</a></td> | |||||
<td class="memname">typedef <a class="el" href="class_sd_spi_card.html">SdSpiCard</a> <a class="el" href="_block_driver_8h.html#ace97f2377acdc471a01f9f7ec1fd6bbb">BlockDriver</a></td> | |||||
</tr> | </tr> | ||||
</table> | </table> | ||||
</div><div class="memdoc"> | </div><div class="memdoc"> | ||||
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
<div class="dyncontent"> | <div class="dyncontent"> | ||||
<div class="center"><img src="_fat_file_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_file_8h" alt=""/></div> | <div class="center"><img src="_fat_file_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_file_8h" alt=""/></div> | ||||
<map name="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_file_8h" id="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_file_8h"> | <map name="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_file_8h" id="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_file_8h"> | ||||
<area shape="rect" id="node5" href="_fat_lib_config_8h.html" title="configuration definitions " alt="" coords="71,319,176,345"/> | |||||
<area shape="rect" id="node9" href="_fat_structs_8h.html" title="FAT file structures. " alt="" coords="421,169,516,196"/> | |||||
<area shape="rect" id="node10" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="205,95,301,121"/> | |||||
<area shape="rect" id="node7" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="262,393,366,420"/> | |||||
<area shape="rect" id="node11" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="298,169,397,196"/> | |||||
<area shape="rect" id="node12" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="300,244,395,271"/> | |||||
<area shape="rect" id="node13" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="292,319,371,345"/> | |||||
<area shape="rect" id="node15" href="_sd_spi_driver_8h.html" title="SpiDriver classes. " alt="" coords="489,319,589,345"/> | |||||
<area shape="rect" id="node5" href="_fat_lib_config_8h.html" title="configuration definitions " alt="" coords="141,169,246,196"/> | |||||
<area shape="rect" id="node9" href="_fat_structs_8h.html" title="FAT file structures. " alt="" coords="907,169,1002,196"/> | |||||
<area shape="rect" id="node10" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="821,95,917,121"/> | |||||
<area shape="rect" id="node7" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="27,259,131,285"/> | |||||
<area shape="rect" id="node11" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="457,169,556,196"/> | |||||
<area shape="rect" id="node12" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="435,259,578,285"/> | |||||
<area shape="rect" id="node13" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="369,348,447,375"/> | |||||
</map> | </map> | ||||
</div> | </div> | ||||
</div><div class="textblock"><div class="dynheader"> | </div><div class="textblock"><div class="dynheader"> | ||||
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
<div class="dyncontent"> | <div class="dyncontent"> | ||||
<div class="center"><img src="_fat_file_system_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_file_system_8h" alt=""/></div> | <div class="center"><img src="_fat_file_system_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_file_system_8h" alt=""/></div> | ||||
<map name="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_file_system_8h" id="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_file_system_8h"> | <map name="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_file_system_8h" id="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_file_system_8h"> | ||||
<area shape="rect" id="node2" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="410,543,506,569"/> | |||||
<area shape="rect" id="node15" href="_fat_file_8h.html" title="FatFile class. " alt="" coords="195,468,268,495"/> | |||||
<area shape="rect" id="node18" href="_arduino_stream_8h.html" title="ArduinoInStream and ArduinoOutStream classes. " alt="" coords="189,95,308,121"/> | |||||
<area shape="rect" id="node24" href="_arduino_files_8h.html" title="PrintFile class. " alt="" coords="29,393,135,420"/> | |||||
<area shape="rect" id="node4" href="_fat_lib_config_8h.html" title="configuration definitions " alt="" coords="77,617,183,644"/> | |||||
<area shape="rect" id="node8" href="_fat_structs_8h.html" title="FAT file structures. " alt="" coords="269,617,364,644"/> | |||||
<area shape="rect" id="node9" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="439,617,538,644"/> | |||||
<area shape="rect" id="node6" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="117,841,221,868"/> | |||||
<area shape="rect" id="node10" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="440,692,535,719"/> | |||||
<area shape="rect" id="node11" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="545,767,624,793"/> | |||||
<area shape="rect" id="node13" href="_sd_spi_driver_8h.html" title="SpiDriver classes. " alt="" coords="421,767,521,793"/> | |||||
<area shape="rect" id="node19" href="bufstream_8h.html" title="ibufstream and obufstream classes " alt="" coords="262,169,353,196"/> | |||||
<area shape="rect" id="node20" href="iostream_8h.html" title="iostream class " alt="" coords="266,244,349,271"/> | |||||
<area shape="rect" id="node21" href="istream_8h.html" title="istream class " alt="" coords="189,319,265,345"/> | |||||
<area shape="rect" id="node23" href="ostream_8h.html" title="ostream class " alt="" coords="290,319,370,345"/> | |||||
<area shape="rect" id="node22" href="ios_8h.html" title="ios_base and ios classes " alt="" coords="210,393,261,420"/> | |||||
<area shape="rect" id="node2" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="469,543,565,569"/> | |||||
<area shape="rect" id="node17" href="_fat_file_8h.html" title="FatFile class. " alt="" coords="279,468,352,495"/> | |||||
<area shape="rect" id="node20" href="_arduino_stream_8h.html" title="ArduinoInStream and ArduinoOutStream classes. " alt="" coords="187,95,305,121"/> | |||||
<area shape="rect" id="node26" href="_arduino_files_8h.html" title="PrintFile class. " alt="" coords="5,393,111,420"/> | |||||
<area shape="rect" id="node4" href="_fat_lib_config_8h.html" title="configuration definitions " alt="" coords="99,617,204,644"/> | |||||
<area shape="rect" id="node8" href="_fat_structs_8h.html" title="FAT file structures. " alt="" coords="307,617,401,644"/> | |||||
<area shape="rect" id="node9" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="453,617,551,644"/> | |||||
<area shape="rect" id="node6" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="27,707,131,733"/> | |||||
<area shape="rect" id="node10" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="308,707,451,733"/> | |||||
<area shape="rect" id="node11" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="340,796,419,823"/> | |||||
<area shape="rect" id="node21" href="bufstream_8h.html" title="ibufstream and obufstream classes " alt="" coords="285,169,375,196"/> | |||||
<area shape="rect" id="node22" href="iostream_8h.html" title="iostream class " alt="" coords="289,244,371,271"/> | |||||
<area shape="rect" id="node23" href="istream_8h.html" title="istream class " alt="" coords="237,319,313,345"/> | |||||
<area shape="rect" id="node25" href="ostream_8h.html" title="ostream class " alt="" coords="338,319,418,345"/> | |||||
<area shape="rect" id="node24" href="ios_8h.html" title="ios_base and ios classes " alt="" coords="290,393,341,420"/> | |||||
</map> | </map> | ||||
</div> | </div> | ||||
</div><table class="memberdecls"> | </div><table class="memberdecls"> | ||||
</div></div><!-- contents --> | </div></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
<div class="dyncontent"> | <div class="dyncontent"> | ||||
<div class="center"><img src="_fat_volume_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_volume_8h" alt=""/></div> | <div class="center"><img src="_fat_volume_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_volume_8h" alt=""/></div> | ||||
<map name="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_volume_8h" id="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_volume_8h"> | <map name="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_volume_8h" id="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_fat_volume_8h"> | ||||
<area shape="rect" id="node3" href="_fat_lib_config_8h.html" title="configuration definitions " alt="" coords="419,244,524,271"/> | |||||
<area shape="rect" id="node7" href="_fat_structs_8h.html" title="FAT file structures. " alt="" coords="327,95,421,121"/> | |||||
<area shape="rect" id="node8" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="153,95,251,121"/> | |||||
<area shape="rect" id="node5" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="330,319,434,345"/> | |||||
<area shape="rect" id="node9" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="155,169,249,196"/> | |||||
<area shape="rect" id="node10" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="316,244,395,271"/> | |||||
<area shape="rect" id="node12" href="_sd_spi_driver_8h.html" title="SpiDriver classes. " alt="" coords="97,244,197,271"/> | |||||
<area shape="rect" id="node3" href="_fat_lib_config_8h.html" title="configuration definitions " alt="" coords="23,95,128,121"/> | |||||
<area shape="rect" id="node7" href="_fat_structs_8h.html" title="FAT file structures. " alt="" coords="424,95,519,121"/> | |||||
<area shape="rect" id="node8" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="301,95,399,121"/> | |||||
<area shape="rect" id="node5" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="25,184,129,211"/> | |||||
<area shape="rect" id="node9" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="799,184,941,211"/> | |||||
<area shape="rect" id="node10" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="732,273,811,300"/> | |||||
</map> | </map> | ||||
</div> | </div> | ||||
</div><div class="textblock"><div class="dynheader"> | </div><div class="textblock"><div class="dynheader"> | ||||
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</div></div><!-- contents --> | </div></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
<a href="#details">More...</a></p> | <a href="#details">More...</a></p> | ||||
<div class="textblock"><code>#include "<a class="el" href="_sys_call_8h.html">SysCall.h</a>"</code><br /> | <div class="textblock"><code>#include "<a class="el" href="_sys_call_8h.html">SysCall.h</a>"</code><br /> | ||||
<code>#include "<a class="el" href="_block_driver_8h.html">BlockDriver.h</a>"</code><br /> | <code>#include "<a class="el" href="_block_driver_8h.html">BlockDriver.h</a>"</code><br /> | ||||
<code>#include "FatLib.h"</code><br /> | |||||
<code>#include "FatLib/FatLib.h"</code><br /> | |||||
<code>#include "SdCard/SdioCard.h"</code><br /> | |||||
</div><div class="textblock"><div class="dynheader"> | </div><div class="textblock"><div class="dynheader"> | ||||
Include dependency graph for SdFat.h:</div> | Include dependency graph for SdFat.h:</div> | ||||
<div class="dyncontent"> | <div class="dyncontent"> | ||||
<div class="center"><img src="_sd_fat_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_sd_fat_8h" alt=""/></div> | <div class="center"><img src="_sd_fat_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_sd_fat_8h" alt=""/></div> | ||||
<map name="_arduino_2libraries_2_sd_fat_2src_2_sd_fat_8h" id="_arduino_2libraries_2_sd_fat_2src_2_sd_fat_8h"> | <map name="_arduino_2libraries_2_sd_fat_2src_2_sd_fat_8h" id="_arduino_2libraries_2_sd_fat_2src_2_sd_fat_8h"> | ||||
<area shape="rect" id="node2" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="5,244,84,271"/> | |||||
<area shape="rect" id="node3" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="90,95,189,121"/> | |||||
<area shape="rect" id="node4" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="95,169,189,196"/> | |||||
<area shape="rect" id="node7" href="_sd_spi_driver_8h.html" title="SpiDriver classes. " alt="" coords="295,244,395,271"/> | |||||
<area shape="rect" id="node10" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="397,319,501,345"/> | |||||
<area shape="rect" id="node2" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="5,273,84,300"/> | |||||
<area shape="rect" id="node3" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="329,95,427,121"/> | |||||
<area shape="rect" id="node4" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="83,184,225,211"/> | |||||
</map> | </map> | ||||
</div> | </div> | ||||
</div><table class="memberdecls"> | </div><table class="memberdecls"> | ||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_fat_e_x.html">SdFatEX</a></td></tr> | <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_fat_e_x.html">SdFatEX</a></td></tr> | ||||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="class_sd_fat.html" title="Main file system class for SdFat library. ">SdFat</a> class with extended SD I/O. <a href="class_sd_fat_e_x.html#details">More...</a><br /></td></tr> | <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="class_sd_fat.html" title="Main file system class for SdFat library. ">SdFat</a> class with extended SD I/O. <a href="class_sd_fat_e_x.html#details">More...</a><br /></td></tr> | ||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> | <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> | ||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_fat_sdio.html">SdFatSdio</a></td></tr> | |||||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="class_sd_fat.html" title="Main file system class for SdFat library. ">SdFat</a> class using SDIO. <a href="class_sd_fat_sdio.html#details">More...</a><br /></td></tr> | |||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_fat_soft_spi.html">SdFatSoftSpi< MisoPin, MosiPin, SckPin ></a></td></tr> | <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_fat_soft_spi.html">SdFatSoftSpi< MisoPin, MosiPin, SckPin ></a></td></tr> | ||||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="class_sd_fat.html" title="Main file system class for SdFat library. ">SdFat</a> class using software SPI. <a href="class_sd_fat_soft_spi.html#details">More...</a><br /></td></tr> | <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="class_sd_fat.html" title="Main file system class for SdFat library. ">SdFat</a> class using software SPI. <a href="class_sd_fat_soft_spi.html#details">More...</a><br /></td></tr> | ||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> | <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> | ||||
</table><table class="memberdecls"> | </table><table class="memberdecls"> | ||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> | <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> | ||||
Macros</h2></td></tr> | Macros</h2></td></tr> | ||||
<tr class="memitem:aca25ecce379f446043bdee2c55304210"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_sd_fat_8h.html#aca25ecce379f446043bdee2c55304210">SD_FAT_VERSION</a>   20160801</td></tr> | |||||
<tr class="memitem:aca25ecce379f446043bdee2c55304210"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_sd_fat_8h.html#aca25ecce379f446043bdee2c55304210">SD_FAT_VERSION</a>   20160905</td></tr> | |||||
<tr class="separator:aca25ecce379f446043bdee2c55304210"><td class="memSeparator" colspan="2"> </td></tr> | <tr class="separator:aca25ecce379f446043bdee2c55304210"><td class="memSeparator" colspan="2"> </td></tr> | ||||
</table> | </table> | ||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> | <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> | ||||
<div class="memproto"> | <div class="memproto"> | ||||
<table class="memname"> | <table class="memname"> | ||||
<tr> | <tr> | ||||
<td class="memname">#define SD_FAT_VERSION   20160801</td> | |||||
<td class="memname">#define SD_FAT_VERSION   20160905</td> | |||||
</tr> | </tr> | ||||
</table> | </table> | ||||
</div><div class="memdoc"> | </div><div class="memdoc"> | ||||
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
<div class="dyncontent"> | <div class="dyncontent"> | ||||
<div class="center"><img src="_sd_fat_config_8h__dep__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_sd_fat_config_8hdep" alt=""/></div> | <div class="center"><img src="_sd_fat_config_8h__dep__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_sd_fat_config_8hdep" alt=""/></div> | ||||
<map name="_arduino_2libraries_2_sd_fat_2src_2_sd_fat_config_8hdep" id="_arduino_2libraries_2_sd_fat_2src_2_sd_fat_config_8hdep"> | <map name="_arduino_2libraries_2_sd_fat_2src_2_sd_fat_config_8hdep" id="_arduino_2libraries_2_sd_fat_2src_2_sd_fat_config_8hdep"> | ||||
<area shape="rect" id="node2" href="_fat_lib_config_8h.html" title="configuration definitions " alt="" coords="168,273,339,315"/> | |||||
<area shape="rect" id="node15" href="_sd_spi_driver_8h.html" title="SpiDriver classes. " alt="" coords="312,95,467,136"/> | |||||
<area shape="rect" id="node3" href="_arduino_files_8h.html" title="PrintFile class. " alt="" coords="77,541,248,583"/> | |||||
<area shape="rect" id="node5" href="_fat_file_8h.html" title="FatFile class. " alt="" coords="329,452,484,493"/> | |||||
<area shape="rect" id="node10" href="_arduino_stream_8h.html" title="ArduinoInStream and ArduinoOutStream classes. " alt="" coords="127,899,313,940"/> | |||||
<area shape="rect" id="node14" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="325,363,488,404"/> | |||||
<area shape="rect" id="node4" href="_fat_file_system_8h.html" title="FatFileSystem class. " alt="" coords="275,988,459,1029"/> | |||||
<area shape="rect" id="node6" href="ios_8h.html" title="ios_base and ios classes " alt="" coords="272,541,427,583"/> | |||||
<area shape="rect" id="node11" href="fstream_8h.html" title="fstream, ifstream, and ofstream classes " alt="" coords="323,809,477,851"/> | |||||
<area shape="rect" id="node13" href="_stdio_stream_8h.html" title="StdioStream class. " alt="" coords="552,541,723,583"/> | |||||
<area shape="rect" id="node7" href="istream_8h.html" title="istream class " alt="" coords="272,631,427,672"/> | |||||
<area shape="rect" id="node12" href="ostream_8h.html" title="ostream class " alt="" coords="93,631,248,672"/> | |||||
<area shape="rect" id="node8" href="iostream_8h.html" title="iostream class " alt="" coords="207,720,361,761"/> | |||||
<area shape="rect" id="node9" href="bufstream_8h.html" title="ibufstream and obufstream classes " alt="" coords="142,809,298,851"/> | |||||
<area shape="rect" id="node16" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="332,184,519,225"/> | |||||
<area shape="rect" id="node17" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="363,273,517,315"/> | |||||
<area shape="rect" id="node18" href="_sd_fat_8h.html" title="SdFat class. " alt="" coords="512,363,667,404"/> | |||||
<area shape="rect" id="node2" href="_fat_lib_config_8h.html" title="configuration definitions " alt="" coords="161,95,332,136"/> | |||||
<area shape="rect" id="node3" href="_arduino_files_8h.html" title="PrintFile class. " alt="" coords="55,363,225,404"/> | |||||
<area shape="rect" id="node5" href="_fat_file_8h.html" title="FatFile class. " alt="" coords="243,273,397,315"/> | |||||
<area shape="rect" id="node10" href="_arduino_stream_8h.html" title="ArduinoInStream and ArduinoOutStream classes. " alt="" coords="326,720,511,761"/> | |||||
<area shape="rect" id="node14" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="5,184,168,225"/> | |||||
<area shape="rect" id="node4" href="_fat_file_system_8h.html" title="FatFileSystem class. " alt="" coords="73,809,257,851"/> | |||||
<area shape="rect" id="node6" href="ios_8h.html" title="ios_base and ios classes " alt="" coords="300,363,455,404"/> | |||||
<area shape="rect" id="node11" href="fstream_8h.html" title="fstream, ifstream, and ofstream classes " alt="" coords="521,631,676,672"/> | |||||
<area shape="rect" id="node13" href="_stdio_stream_8h.html" title="StdioStream class. " alt="" coords="583,363,753,404"/> | |||||
<area shape="rect" id="node7" href="istream_8h.html" title="istream class " alt="" coords="407,452,561,493"/> | |||||
<area shape="rect" id="node12" href="ostream_8h.html" title="ostream class " alt="" coords="228,452,383,493"/> | |||||
<area shape="rect" id="node8" href="iostream_8h.html" title="iostream class " alt="" coords="373,541,528,583"/> | |||||
<area shape="rect" id="node9" href="bufstream_8h.html" title="ibufstream and obufstream classes " alt="" coords="341,631,497,672"/> | |||||
</map> | </map> | ||||
</div> | </div> | ||||
</div><table class="memberdecls"> | </div><table class="memberdecls"> | ||||
<tr class="separator:a9a2b1ca4d91cff876f48deeaacbc33da"><td class="memSeparator" colspan="2"> </td></tr> | <tr class="separator:a9a2b1ca4d91cff876f48deeaacbc33da"><td class="memSeparator" colspan="2"> </td></tr> | ||||
<tr class="memitem:aad4f0ecbc65cdc3a7be544225b44f86a"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_sd_fat_config_8h.html#aad4f0ecbc65cdc3a7be544225b44f86a">ENABLE_EXTENDED_TRANSFER_CLASS</a>   0</td></tr> | <tr class="memitem:aad4f0ecbc65cdc3a7be544225b44f86a"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_sd_fat_config_8h.html#aad4f0ecbc65cdc3a7be544225b44f86a">ENABLE_EXTENDED_TRANSFER_CLASS</a>   0</td></tr> | ||||
<tr class="separator:aad4f0ecbc65cdc3a7be544225b44f86a"><td class="memSeparator" colspan="2"> </td></tr> | <tr class="separator:aad4f0ecbc65cdc3a7be544225b44f86a"><td class="memSeparator" colspan="2"> </td></tr> | ||||
<tr class="memitem:a1d106f3a0ba8577abdcc9ce3961ef90b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_sd_fat_config_8h.html#a1d106f3a0ba8577abdcc9ce3961ef90b">ENABLE_SDIO_CLASS</a>   0</td></tr> | |||||
<tr class="separator:a1d106f3a0ba8577abdcc9ce3961ef90b"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:acc3d779d87b785bb7236b9b3acf7e619"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_sd_fat_config_8h.html#acc3d779d87b785bb7236b9b3acf7e619">ENABLE_SOFTWARE_SPI_CLASS</a>   0</td></tr> | <tr class="memitem:acc3d779d87b785bb7236b9b3acf7e619"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_sd_fat_config_8h.html#acc3d779d87b785bb7236b9b3acf7e619">ENABLE_SOFTWARE_SPI_CLASS</a>   0</td></tr> | ||||
<tr class="separator:acc3d779d87b785bb7236b9b3acf7e619"><td class="memSeparator" colspan="2"> </td></tr> | <tr class="separator:acc3d779d87b785bb7236b9b3acf7e619"><td class="memSeparator" colspan="2"> </td></tr> | ||||
<tr class="memitem:a270eefdaec4778f2a491658f34f61b17"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_sd_fat_config_8h.html#a270eefdaec4778f2a491658f34f61b17">ENDL_CALLS_FLUSH</a>   0</td></tr> | <tr class="memitem:a270eefdaec4778f2a491658f34f61b17"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_sd_fat_config_8h.html#a270eefdaec4778f2a491658f34f61b17">ENDL_CALLS_FLUSH</a>   0</td></tr> | ||||
<p>If the symbol ENABLE_EXTENDED_TRANSFER_CLASS is nonzero, the class <a class="el" href="class_sd_fat_e_x.html" title="SdFat class with extended SD I/O. ">SdFatEX</a> will be defined. If the symbol ENABLE_SOFTWARE_SPI_CLASS is also nonzero, the class <a class="el" href="class_sd_fat_soft_spi_e_x.html" title="SdFat class using software SPI and extended SD I/O. ">SdFatSoftSpiEX</a> will be defined.</p> | <p>If the symbol ENABLE_EXTENDED_TRANSFER_CLASS is nonzero, the class <a class="el" href="class_sd_fat_e_x.html" title="SdFat class with extended SD I/O. ">SdFatEX</a> will be defined. If the symbol ENABLE_SOFTWARE_SPI_CLASS is also nonzero, the class <a class="el" href="class_sd_fat_soft_spi_e_x.html" title="SdFat class using software SPI and extended SD I/O. ">SdFatSoftSpiEX</a> will be defined.</p> | ||||
<p>These classes used extended multi-block SD I/O for better performance. the SPI bus may not be shared with other devices in this mode. </p> | <p>These classes used extended multi-block SD I/O for better performance. the SPI bus may not be shared with other devices in this mode. </p> | ||||
</div> | |||||
</div> | |||||
<a class="anchor" id="a1d106f3a0ba8577abdcc9ce3961ef90b"></a> | |||||
<div class="memitem"> | |||||
<div class="memproto"> | |||||
<table class="memname"> | |||||
<tr> | |||||
<td class="memname">#define ENABLE_SDIO_CLASS   0</td> | |||||
</tr> | |||||
</table> | |||||
</div><div class="memdoc"> | |||||
<p>Enable SDIO driver if available. </p> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<a class="anchor" id="acc3d779d87b785bb7236b9b3acf7e619"></a> | <a class="anchor" id="acc3d779d87b785bb7236b9b3acf7e619"></a> | ||||
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> | <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> | ||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/> | <meta http-equiv="X-UA-Compatible" content="IE=9"/> | ||||
<meta name="generator" content="Doxygen 1.8.10"/> | <meta name="generator" content="Doxygen 1.8.10"/> | ||||
<title>SdFat: Arduino/libraries/SdFat/src/SdSpiCard/SdSpiCard.h File Reference</title> | |||||
<title>SdFat: Arduino/libraries/SdFat/src/SdCard/SdSpiCard.h File Reference</title> | |||||
<link href="tabs.css" rel="stylesheet" type="text/css"/> | <link href="tabs.css" rel="stylesheet" type="text/css"/> | ||||
<script type="text/javascript" src="jquery.js"></script> | <script type="text/javascript" src="jquery.js"></script> | ||||
<script type="text/javascript" src="dynsections.js"></script> | <script type="text/javascript" src="dynsections.js"></script> | ||||
<div id="nav-path" class="navpath"> | <div id="nav-path" class="navpath"> | ||||
<ul> | <ul> | ||||
<li class="navelem"><a class="el" href="dir_a991eec27578c865874ede3d8ec657c2.html">Arduino</a></li><li class="navelem"><a class="el" href="dir_481cc946b8a81b8d9363a4aad6201160.html">libraries</a></li><li class="navelem"><a class="el" href="dir_1281b15c327061056ab3b326e90c50cf.html">SdFat</a></li><li class="navelem"><a class="el" href="dir_c18d6c86f7b0afecac5c3a8a9885031e.html">src</a></li><li class="navelem"><a class="el" href="dir_c1572573431a6c581ab684c4a3cd60b9.html">SdSpiCard</a></li> </ul> | |||||
<li class="navelem"><a class="el" href="dir_a991eec27578c865874ede3d8ec657c2.html">Arduino</a></li><li class="navelem"><a class="el" href="dir_481cc946b8a81b8d9363a4aad6201160.html">libraries</a></li><li class="navelem"><a class="el" href="dir_1281b15c327061056ab3b326e90c50cf.html">SdFat</a></li><li class="navelem"><a class="el" href="dir_c18d6c86f7b0afecac5c3a8a9885031e.html">src</a></li><li class="navelem"><a class="el" href="dir_a70af2fb8f1edf8b7124f41d82dbf480.html">SdCard</a></li> </ul> | |||||
</div> | </div> | ||||
</div><!-- top --> | </div><!-- top --> | ||||
<div class="header"> | <div class="header"> | ||||
<div class="textblock"><code>#include <stddef.h></code><br /> | <div class="textblock"><code>#include <stddef.h></code><br /> | ||||
<code>#include "<a class="el" href="_sys_call_8h.html">SysCall.h</a>"</code><br /> | <code>#include "<a class="el" href="_sys_call_8h.html">SysCall.h</a>"</code><br /> | ||||
<code>#include "SdInfo.h"</code><br /> | <code>#include "SdInfo.h"</code><br /> | ||||
<code>#include "<a class="el" href="_sd_spi_driver_8h.html">SdSpiDriver.h</a>"</code><br /> | |||||
<code>#include "../FatLib/BaseBlockDriver.h"</code><br /> | |||||
<code>#include "../SpiDriver/SdSpiDriver.h"</code><br /> | |||||
</div><div class="textblock"><div class="dynheader"> | </div><div class="textblock"><div class="dynheader"> | ||||
Include dependency graph for SdSpiCard.h:</div> | Include dependency graph for SdSpiCard.h:</div> | ||||
<div class="dyncontent"> | <div class="dyncontent"> | ||||
<div class="center"><img src="_sd_spi_card_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_sd_spi_card_2_sd_spi_card_8h" alt=""/></div> | |||||
<map name="_arduino_2libraries_2_sd_fat_2src_2_sd_spi_card_2_sd_spi_card_8h" id="_arduino_2libraries_2_sd_fat_2src_2_sd_spi_card_2_sd_spi_card_8h"> | |||||
<div class="center"><img src="_sd_spi_card_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_sd_card_2_sd_spi_card_8h" alt=""/></div> | |||||
<map name="_arduino_2libraries_2_sd_fat_2src_2_sd_card_2_sd_spi_card_8h" id="_arduino_2libraries_2_sd_fat_2src_2_sd_card_2_sd_spi_card_8h"> | |||||
<area shape="rect" id="node3" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="97,95,176,121"/> | <area shape="rect" id="node3" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="97,95,176,121"/> | ||||
<area shape="rect" id="node5" href="_sd_spi_driver_8h.html" title="SpiDriver classes. " alt="" coords="295,95,395,121"/> | |||||
<area shape="rect" id="node8" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="397,169,501,196"/> | |||||
</map> | </map> | ||||
</div> | </div> | ||||
</div><div class="textblock"><div class="dynheader"> | </div><div class="textblock"><div class="dynheader"> | ||||
This graph shows which files directly or indirectly include this file:</div> | This graph shows which files directly or indirectly include this file:</div> | ||||
<div class="dyncontent"> | <div class="dyncontent"> | ||||
<div class="center"><img src="_sd_spi_card_8h__dep__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_sd_spi_card_2_sd_spi_card_8hdep" alt=""/></div> | |||||
<map name="_arduino_2libraries_2_sd_fat_2src_2_sd_spi_card_2_sd_spi_card_8hdep" id="_arduino_2libraries_2_sd_fat_2src_2_sd_spi_card_2_sd_spi_card_8hdep"> | |||||
<div class="center"><img src="_sd_spi_card_8h__dep__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_sd_card_2_sd_spi_card_8hdep" alt=""/></div> | |||||
<map name="_arduino_2libraries_2_sd_fat_2src_2_sd_card_2_sd_spi_card_8hdep" id="_arduino_2libraries_2_sd_fat_2src_2_sd_card_2_sd_spi_card_8hdep"> | |||||
<area shape="rect" id="node2" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="517,95,672,136"/> | <area shape="rect" id="node2" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="517,95,672,136"/> | ||||
<area shape="rect" id="node3" href="_sd_fat_8h.html" title="SdFat class. " alt="" coords="427,184,581,225"/> | <area shape="rect" id="node3" href="_sd_fat_8h.html" title="SdFat class. " alt="" coords="427,184,581,225"/> | ||||
<area shape="rect" id="node4" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="605,184,768,225"/> | <area shape="rect" id="node4" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="605,184,768,225"/> | ||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td></tr> | <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td></tr> | ||||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Raw access to SD and SDHC flash memory cards via SPI protocol. <a href="class_sd_spi_card.html#details">More...</a><br /></td></tr> | <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Raw access to SD and SDHC flash memory cards via SPI protocol. <a href="class_sd_spi_card.html#details">More...</a><br /></td></tr> | ||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> | <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> | ||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card_e_x.html">SdSpiCardEX</a></td></tr> | |||||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Extended SD I/O block driver. <a href="class_sd_spi_card_e_x.html#details">More...</a><br /></td></tr> | |||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> | |||||
</table> | </table> | ||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> | <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> | ||||
<div class="textblock"><p><a class="el" href="class_sd_spi_card.html" title="Raw access to SD and SDHC flash memory cards via SPI protocol. ">SdSpiCard</a> class for V2 SD/SDHC cards. </p> | <div class="textblock"><p><a class="el" href="class_sd_spi_card.html" title="Raw access to SD and SDHC flash memory cards via SPI protocol. ">SdSpiCard</a> class for V2 SD/SDHC cards. </p> | ||||
</div></div><!-- contents --> | </div></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |||||
<html xmlns="http://www.w3.org/1999/xhtml"> | |||||
<head> | |||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> | |||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/> | |||||
<meta name="generator" content="Doxygen 1.8.10"/> | |||||
<title>SdFat: Arduino/libraries/SdFat/src/SdSpiDriver.h File Reference</title> | |||||
<link href="tabs.css" rel="stylesheet" type="text/css"/> | |||||
<script type="text/javascript" src="jquery.js"></script> | |||||
<script type="text/javascript" src="dynsections.js"></script> | |||||
<link href="search/search.css" rel="stylesheet" type="text/css"/> | |||||
<script type="text/javascript" src="search/searchdata.js"></script> | |||||
<script type="text/javascript" src="search/search.js"></script> | |||||
<script type="text/javascript"> | |||||
$(document).ready(function() { init_search(); }); | |||||
</script> | |||||
<link href="doxygen.css" rel="stylesheet" type="text/css" /> | |||||
</head> | |||||
<body> | |||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! --> | |||||
<div id="titlearea"> | |||||
<table cellspacing="0" cellpadding="0"> | |||||
<tbody> | |||||
<tr style="height: 56px;"> | |||||
<td id="projectalign" style="padding-left: 0.5em;"> | |||||
<div id="projectname">SdFat | |||||
</div> | |||||
</td> | |||||
</tr> | |||||
</tbody> | |||||
</table> | |||||
</div> | |||||
<!-- end header part --> | |||||
<!-- Generated by Doxygen 1.8.10 --> | |||||
<script type="text/javascript"> | |||||
var searchBox = new SearchBox("searchBox", "search",false,'Search'); | |||||
</script> | |||||
<div id="navrow1" class="tabs"> | |||||
<ul class="tablist"> | |||||
<li><a href="index.html"><span>Main Page</span></a></li> | |||||
<li><a href="annotated.html"><span>Classes</span></a></li> | |||||
<li class="current"><a href="files.html"><span>Files</span></a></li> | |||||
<li> | |||||
<div id="MSearchBox" class="MSearchBoxInactive"> | |||||
<span class="left"> | |||||
<img id="MSearchSelect" src="search/mag_sel.png" | |||||
onmouseover="return searchBox.OnSearchSelectShow()" | |||||
onmouseout="return searchBox.OnSearchSelectHide()" | |||||
alt=""/> | |||||
<input type="text" id="MSearchField" value="Search" accesskey="S" | |||||
onfocus="searchBox.OnSearchFieldFocus(true)" | |||||
onblur="searchBox.OnSearchFieldFocus(false)" | |||||
onkeyup="searchBox.OnSearchFieldChange(event)"/> | |||||
</span><span class="right"> | |||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> | |||||
</span> | |||||
</div> | |||||
</li> | |||||
</ul> | |||||
</div> | |||||
<div id="navrow2" class="tabs2"> | |||||
<ul class="tablist"> | |||||
<li><a href="files.html"><span>File List</span></a></li> | |||||
<li><a href="globals.html"><span>File Members</span></a></li> | |||||
</ul> | |||||
</div> | |||||
<!-- window showing the filter options --> | |||||
<div id="MSearchSelectWindow" | |||||
onmouseover="return searchBox.OnSearchSelectShow()" | |||||
onmouseout="return searchBox.OnSearchSelectHide()" | |||||
onkeydown="return searchBox.OnSearchSelectKey(event)"> | |||||
</div> | |||||
<!-- iframe showing the search results (closed by default) --> | |||||
<div id="MSearchResultsWindow"> | |||||
<iframe src="javascript:void(0)" frameborder="0" | |||||
name="MSearchResults" id="MSearchResults"> | |||||
</iframe> | |||||
</div> | |||||
<div id="nav-path" class="navpath"> | |||||
<ul> | |||||
<li class="navelem"><a class="el" href="dir_a991eec27578c865874ede3d8ec657c2.html">Arduino</a></li><li class="navelem"><a class="el" href="dir_481cc946b8a81b8d9363a4aad6201160.html">libraries</a></li><li class="navelem"><a class="el" href="dir_1281b15c327061056ab3b326e90c50cf.html">SdFat</a></li><li class="navelem"><a class="el" href="dir_c18d6c86f7b0afecac5c3a8a9885031e.html">src</a></li> </ul> | |||||
</div> | |||||
</div><!-- top --> | |||||
<div class="header"> | |||||
<div class="summary"> | |||||
<a href="#nested-classes">Classes</a> | | |||||
<a href="#typedef-members">Typedefs</a> </div> | |||||
<div class="headertitle"> | |||||
<div class="title">SdSpiDriver.h File Reference</div> </div> | |||||
</div><!--header--> | |||||
<div class="contents"> | |||||
<p>SpiDriver classes. | |||||
<a href="#details">More...</a></p> | |||||
<div class="textblock"><code>#include <Arduino.h></code><br /> | |||||
<code>#include "SPI.h"</code><br /> | |||||
<code>#include "SdSpiCard/SdSpiBaseDriver.h"</code><br /> | |||||
<code>#include "<a class="el" href="_sd_fat_config_8h.html">SdFatConfig.h</a>"</code><br /> | |||||
</div><div class="textblock"><div class="dynheader"> | |||||
Include dependency graph for SdSpiDriver.h:</div> | |||||
<div class="dyncontent"> | |||||
<div class="center"><img src="_sd_spi_driver_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_sd_spi_driver_8h" alt=""/></div> | |||||
<map name="_arduino_2libraries_2_sd_fat_2src_2_sd_spi_driver_8h" id="_arduino_2libraries_2_sd_fat_2src_2_sd_spi_driver_8h"> | |||||
<area shape="rect" id="node4" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="187,95,291,121"/> | |||||
</map> | |||||
</div> | |||||
</div><div class="textblock"><div class="dynheader"> | |||||
This graph shows which files directly or indirectly include this file:</div> | |||||
<div class="dyncontent"> | |||||
<div class="center"><img src="_sd_spi_driver_8h__dep__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_sd_spi_driver_8hdep" alt=""/></div> | |||||
<map name="_arduino_2libraries_2_sd_fat_2src_2_sd_spi_driver_8hdep" id="_arduino_2libraries_2_sd_fat_2src_2_sd_spi_driver_8hdep"> | |||||
<area shape="rect" id="node2" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="501,95,688,136"/> | |||||
<area shape="rect" id="node3" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="517,184,672,225"/> | |||||
<area shape="rect" id="node4" href="_sd_fat_8h.html" title="SdFat class. " alt="" coords="427,273,581,315"/> | |||||
<area shape="rect" id="node5" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="605,273,768,315"/> | |||||
<area shape="rect" id="node6" href="_fat_file_8h.html" title="FatFile class. " alt="" coords="487,363,641,404"/> | |||||
<area shape="rect" id="node8" href="_fat_file_system_8h.html" title="FatFileSystem class. " alt="" coords="192,899,376,940"/> | |||||
<area shape="rect" id="node7" href="_arduino_files_8h.html" title="PrintFile class. " alt="" coords="5,631,176,672"/> | |||||
<area shape="rect" id="node9" href="ios_8h.html" title="ios_base and ios classes " alt="" coords="429,452,584,493"/> | |||||
<area shape="rect" id="node14" href="fstream_8h.html" title="fstream, ifstream, and ofstream classes " alt="" coords="496,720,651,761"/> | |||||
<area shape="rect" id="node16" href="_stdio_stream_8h.html" title="StdioStream class. " alt="" coords="659,452,829,493"/> | |||||
<area shape="rect" id="node10" href="istream_8h.html" title="istream class " alt="" coords="251,541,405,583"/> | |||||
<area shape="rect" id="node15" href="ostream_8h.html" title="ostream class " alt="" coords="429,541,584,583"/> | |||||
<area shape="rect" id="node11" href="iostream_8h.html" title="iostream class " alt="" coords="384,631,539,672"/> | |||||
<area shape="rect" id="node12" href="bufstream_8h.html" title="ibufstream and obufstream classes " alt="" coords="302,720,458,761"/> | |||||
<area shape="rect" id="node13" href="_arduino_stream_8h.html" title="ArduinoInStream and ArduinoOutStream classes. " alt="" coords="263,809,449,851"/> | |||||
</map> | |||||
</div> | |||||
</div><table class="memberdecls"> | |||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> | |||||
Classes</h2></td></tr> | |||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_alt_driver.html">SdSpiAltDriver</a></td></tr> | |||||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Optimized SPI class for access to SD and SDHC flash memory cards. <a href="class_sd_spi_alt_driver.html#details">More...</a><br /></td></tr> | |||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_lib_driver.html">SdSpiLibDriver</a></td></tr> | |||||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="class_sd_spi_lib_driver.html" title="SdSpiLibDriver - use standard SPI library. ">SdSpiLibDriver</a> - use standard SPI library. <a href="class_sd_spi_lib_driver.html#details">More...</a><br /></td></tr> | |||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_soft_driver.html">SdSpiSoftDriver< MisoPin, MosiPin, SckPin ></a></td></tr> | |||||
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Software SPI class for access to SD and SDHC flash memory cards. <a href="class_sd_spi_soft_driver.html#details">More...</a><br /></td></tr> | |||||
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> | |||||
</table><table class="memberdecls"> | |||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a> | |||||
Typedefs</h2></td></tr> | |||||
<tr class="memitem:af7a2666e5d6cab16c0a99adf5115f38d"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="class_sd_spi_lib_driver.html">SdSpiLibDriver</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="_sd_spi_driver_8h.html#af7a2666e5d6cab16c0a99adf5115f38d">SdFatSpiDriver</a></td></tr> | |||||
<tr class="separator:af7a2666e5d6cab16c0a99adf5115f38d"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:abf391604c1ecfed19cdcb6c8bd626972"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="_sd_spi_driver_8h.html#af7a2666e5d6cab16c0a99adf5115f38d">SdFatSpiDriver</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="_sd_spi_driver_8h.html#abf391604c1ecfed19cdcb6c8bd626972">SdSpiDriver</a></td></tr> | |||||
<tr class="separator:abf391604c1ecfed19cdcb6c8bd626972"><td class="memSeparator" colspan="2"> </td></tr> | |||||
</table> | |||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> | |||||
<div class="textblock"><p>SpiDriver classes. </p> | |||||
</div><h2 class="groupheader">Typedef Documentation</h2> | |||||
<a class="anchor" id="af7a2666e5d6cab16c0a99adf5115f38d"></a> | |||||
<div class="memitem"> | |||||
<div class="memproto"> | |||||
<table class="memname"> | |||||
<tr> | |||||
<td class="memname">typedef <a class="el" href="class_sd_spi_lib_driver.html">SdSpiLibDriver</a> <a class="el" href="_sd_spi_driver_8h.html#af7a2666e5d6cab16c0a99adf5115f38d">SdFatSpiDriver</a></td> | |||||
</tr> | |||||
</table> | |||||
</div><div class="memdoc"> | |||||
<p><a class="el" href="class_sd_fat.html" title="Main file system class for SdFat library. ">SdFat</a> uses Arduino library SPI. </p> | |||||
</div> | |||||
</div> | |||||
<a class="anchor" id="abf391604c1ecfed19cdcb6c8bd626972"></a> | |||||
<div class="memitem"> | |||||
<div class="memproto"> | |||||
<table class="memname"> | |||||
<tr> | |||||
<td class="memname">typedef <a class="el" href="_sd_spi_driver_8h.html#af7a2666e5d6cab16c0a99adf5115f38d">SdFatSpiDriver</a> <a class="el" href="_sd_spi_driver_8h.html#abf391604c1ecfed19cdcb6c8bd626972">SdSpiDriver</a></td> | |||||
</tr> | |||||
</table> | |||||
</div><div class="memdoc"> | |||||
<p>typedef for for <a class="el" href="class_sd_spi_card.html" title="Raw access to SD and SDHC flash memory cards via SPI protocol. ">SdSpiCard</a> class. </p> | |||||
</div> | |||||
</div> | |||||
</div><!-- contents --> | |||||
<!-- start footer part --> | |||||
<hr class="footer"/><address class="footer"><small> | |||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | |||||
</a> 1.8.10 | |||||
</small></address> | |||||
</body> | |||||
</html> |
<div class="dyncontent"> | <div class="dyncontent"> | ||||
<div class="center"><img src="_stdio_stream_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_stdio_stream_8h" alt=""/></div> | <div class="center"><img src="_stdio_stream_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_stdio_stream_8h" alt=""/></div> | ||||
<map name="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_stdio_stream_8h" id="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_stdio_stream_8h"> | <map name="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_stdio_stream_8h" id="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2_stdio_stream_8h"> | ||||
<area shape="rect" id="node3" href="_fat_file_8h.html" title="FatFile class. " alt="" coords="121,95,194,121"/> | |||||
<area shape="rect" id="node6" href="_fat_lib_config_8h.html" title="configuration definitions " alt="" coords="63,393,169,420"/> | |||||
<area shape="rect" id="node10" href="_fat_structs_8h.html" title="FAT file structures. " alt="" coords="419,244,514,271"/> | |||||
<area shape="rect" id="node11" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="285,169,381,196"/> | |||||
<area shape="rect" id="node8" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="217,468,321,495"/> | |||||
<area shape="rect" id="node12" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="296,244,395,271"/> | |||||
<area shape="rect" id="node13" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="298,319,393,345"/> | |||||
<area shape="rect" id="node14" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="409,393,487,420"/> | |||||
<area shape="rect" id="node16" href="_sd_spi_driver_8h.html" title="SpiDriver classes. " alt="" coords="285,393,385,420"/> | |||||
<area shape="rect" id="node3" href="_fat_file_8h.html" title="FatFile class. " alt="" coords="833,95,906,121"/> | |||||
<area shape="rect" id="node6" href="_fat_lib_config_8h.html" title="configuration definitions " alt="" coords="141,244,246,271"/> | |||||
<area shape="rect" id="node10" href="_fat_structs_8h.html" title="FAT file structures. " alt="" coords="907,244,1002,271"/> | |||||
<area shape="rect" id="node11" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="821,169,917,196"/> | |||||
<area shape="rect" id="node8" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="27,333,131,360"/> | |||||
<area shape="rect" id="node12" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="457,244,556,271"/> | |||||
<area shape="rect" id="node13" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="435,333,578,360"/> | |||||
<area shape="rect" id="node14" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="369,423,447,449"/> | |||||
</map> | </map> | ||||
</div> | </div> | ||||
</div><table class="memberdecls"> | </div><table class="memberdecls"> | ||||
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
<div class="dyncontent"> | <div class="dyncontent"> | ||||
<div class="center"><img src="_sys_call_8h__dep__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_sys_call_8hdep" alt=""/></div> | <div class="center"><img src="_sys_call_8h__dep__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_sys_call_8hdep" alt=""/></div> | ||||
<map name="_arduino_2libraries_2_sd_fat_2src_2_sys_call_8hdep" id="_arduino_2libraries_2_sd_fat_2src_2_sys_call_8hdep"> | <map name="_arduino_2libraries_2_sd_fat_2src_2_sys_call_8hdep" id="_arduino_2libraries_2_sd_fat_2src_2_sys_call_8hdep"> | ||||
<area shape="rect" id="node2" href="_minimum_serial_8h.html" title="Minimal AVR Serial driver. " alt="" coords="312,95,467,136"/> | |||||
<area shape="rect" id="node3" href="_sd_fat_8h.html" title="SdFat class. " alt="" coords="427,273,581,315"/> | |||||
<area shape="rect" id="node4" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="541,95,728,136"/> | |||||
<area shape="rect" id="node5" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="557,184,712,225"/> | |||||
<area shape="rect" id="node6" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="605,273,768,315"/> | |||||
<area shape="rect" id="node7" href="_fat_file_8h.html" title="FatFile class. " alt="" coords="487,363,641,404"/> | |||||
<area shape="rect" id="node9" href="_fat_file_system_8h.html" title="FatFileSystem class. " alt="" coords="192,899,376,940"/> | |||||
<area shape="rect" id="node8" href="_arduino_files_8h.html" title="PrintFile class. " alt="" coords="5,631,176,672"/> | |||||
<area shape="rect" id="node10" href="ios_8h.html" title="ios_base and ios classes " alt="" coords="429,452,584,493"/> | |||||
<area shape="rect" id="node15" href="fstream_8h.html" title="fstream, ifstream, and ofstream classes " alt="" coords="496,720,651,761"/> | |||||
<area shape="rect" id="node17" href="_stdio_stream_8h.html" title="StdioStream class. " alt="" coords="659,452,829,493"/> | |||||
<area shape="rect" id="node11" href="istream_8h.html" title="istream class " alt="" coords="251,541,405,583"/> | |||||
<area shape="rect" id="node16" href="ostream_8h.html" title="ostream class " alt="" coords="429,541,584,583"/> | |||||
<area shape="rect" id="node12" href="iostream_8h.html" title="iostream class " alt="" coords="348,631,503,672"/> | |||||
<area shape="rect" id="node13" href="bufstream_8h.html" title="ibufstream and obufstream classes " alt="" coords="302,720,458,761"/> | |||||
<area shape="rect" id="node14" href="_arduino_stream_8h.html" title="ArduinoInStream and ArduinoOutStream classes. " alt="" coords="263,809,449,851"/> | |||||
<area shape="rect" id="node2" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="721,95,889,136"/> | |||||
<area shape="rect" id="node4" href="_sd_fat_8h.html" title="SdFat class. " alt="" coords="849,273,1004,315"/> | |||||
<area shape="rect" id="node17" href="_minimum_serial_8h.html" title="Minimal AVR Serial driver. " alt="" coords="964,95,1119,136"/> | |||||
<area shape="rect" id="node3" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="728,184,883,225"/> | |||||
<area shape="rect" id="node5" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="663,273,825,315"/> | |||||
<area shape="rect" id="node6" href="_fat_file_8h.html" title="FatFile class. " alt="" coords="487,363,641,404"/> | |||||
<area shape="rect" id="node8" href="_fat_file_system_8h.html" title="FatFileSystem class. " alt="" coords="192,899,376,940"/> | |||||
<area shape="rect" id="node7" href="_arduino_files_8h.html" title="PrintFile class. " alt="" coords="5,631,176,672"/> | |||||
<area shape="rect" id="node9" href="ios_8h.html" title="ios_base and ios classes " alt="" coords="429,452,584,493"/> | |||||
<area shape="rect" id="node14" href="fstream_8h.html" title="fstream, ifstream, and ofstream classes " alt="" coords="496,720,651,761"/> | |||||
<area shape="rect" id="node16" href="_stdio_stream_8h.html" title="StdioStream class. " alt="" coords="659,452,829,493"/> | |||||
<area shape="rect" id="node10" href="istream_8h.html" title="istream class " alt="" coords="251,541,405,583"/> | |||||
<area shape="rect" id="node15" href="ostream_8h.html" title="ostream class " alt="" coords="429,541,584,583"/> | |||||
<area shape="rect" id="node11" href="iostream_8h.html" title="iostream class " alt="" coords="384,631,539,672"/> | |||||
<area shape="rect" id="node12" href="bufstream_8h.html" title="ibufstream and obufstream classes " alt="" coords="302,720,458,761"/> | |||||
<area shape="rect" id="node13" href="_arduino_stream_8h.html" title="ArduinoInStream and ArduinoOutStream classes. " alt="" coords="263,809,449,851"/> | |||||
</map> | </map> | ||||
</div> | </div> | ||||
</div><table class="memberdecls"> | </div><table class="memberdecls"> | ||||
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
<tr id="row_31_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_print_file.html" target="_self">PrintFile</a></td><td class="desc"><a class="el" href="class_fat_file.html" title="Basic file class. ">FatFile</a> with Print </td></tr> | <tr id="row_31_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_print_file.html" target="_self">PrintFile</a></td><td class="desc"><a class="el" href="class_fat_file.html" title="Basic file class. ">FatFile</a> with Print </td></tr> | ||||
<tr id="row_32_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd2_card.html" target="_self">Sd2Card</a></td><td class="desc">Raw access to SD and SDHC card using default SPI library </td></tr> | <tr id="row_32_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd2_card.html" target="_self">Sd2Card</a></td><td class="desc">Raw access to SD and SDHC card using default SPI library </td></tr> | ||||
<tr id="row_33_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_base_file.html" target="_self">SdBaseFile</a></td><td class="desc">Class for backward compatibility </td></tr> | <tr id="row_33_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_base_file.html" target="_self">SdBaseFile</a></td><td class="desc">Class for backward compatibility </td></tr> | ||||
<tr id="row_34_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_block_driver.html" target="_self">SdBlockDriver</a></td><td class="desc">Standard SD block driver </td></tr> | |||||
<tr id="row_35_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_block_driver_e_x.html" target="_self">SdBlockDriverEX</a></td><td class="desc">Extended SD I/O block driver </td></tr> | |||||
<tr id="row_36_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_fat.html" target="_self">SdFat</a></td><td class="desc">Main file system class for SdFat library </td></tr> | |||||
<tr id="row_37_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_fat_e_x.html" target="_self">SdFatEX</a></td><td class="desc"><a class="el" href="class_sd_fat.html" title="Main file system class for SdFat library. ">SdFat</a> class with extended SD I/O </td></tr> | |||||
<tr id="row_38_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_fat_soft_spi.html" target="_self">SdFatSoftSpi</a></td><td class="desc"><a class="el" href="class_sd_fat.html" title="Main file system class for SdFat library. ">SdFat</a> class using software SPI </td></tr> | |||||
<tr id="row_39_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_fat_soft_spi_e_x.html" target="_self">SdFatSoftSpiEX</a></td><td class="desc"><a class="el" href="class_sd_fat.html" title="Main file system class for SdFat library. ">SdFat</a> class using software SPI and extended SD I/O </td></tr> | |||||
<tr id="row_40_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_file.html" target="_self">SdFile</a></td><td class="desc">Class for backward compatibility </td></tr> | |||||
<tr id="row_41_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_file_system.html" target="_self">SdFileSystem</a></td><td class="desc">Virtual base class for SdFat library </td></tr> | |||||
<tr id="row_42_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_spi_alt_driver.html" target="_self">SdSpiAltDriver</a></td><td class="desc">Optimized SPI class for access to SD and SDHC flash memory cards </td></tr> | |||||
<tr id="row_43_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_spi_base_driver.html" target="_self">SdSpiBaseDriver</a></td><td class="desc">SPI base driver </td></tr> | |||||
<tr id="row_44_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_spi_card.html" target="_self">SdSpiCard</a></td><td class="desc">Raw access to SD and SDHC flash memory cards via SPI protocol </td></tr> | |||||
<tr id="row_45_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_spi_lib_driver.html" target="_self">SdSpiLibDriver</a></td><td class="desc"><a class="el" href="class_sd_spi_lib_driver.html" title="SdSpiLibDriver - use standard SPI library. ">SdSpiLibDriver</a> - use standard SPI library </td></tr> | |||||
<tr id="row_46_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_spi_soft_driver.html" target="_self">SdSpiSoftDriver</a></td><td class="desc">Software SPI class for access to SD and SDHC flash memory cards </td></tr> | |||||
<tr id="row_47_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsetfill.html" target="_self">setfill</a></td><td class="desc">Type for setfill manipulator </td></tr> | |||||
<tr id="row_48_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsetprecision.html" target="_self">setprecision</a></td><td class="desc">Type for setprecision manipulator </td></tr> | |||||
<tr id="row_49_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsetw.html" target="_self">setw</a></td><td class="desc">Type for setw manipulator </td></tr> | |||||
<tr id="row_50_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_stdio_stream.html" target="_self">StdioStream</a></td><td class="desc"><a class="el" href="class_stdio_stream.html" title="StdioStream implements a minimal stdio stream. ">StdioStream</a> implements a minimal stdio stream </td></tr> | |||||
<tr id="row_51_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sys_call.html" target="_self">SysCall</a></td><td class="desc"><a class="el" href="class_sys_call.html" title="SysCall - Class to wrap system calls. ">SysCall</a> - Class to wrap system calls </td></tr> | |||||
<tr id="row_34_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_fat.html" target="_self">SdFat</a></td><td class="desc">Main file system class for SdFat library </td></tr> | |||||
<tr id="row_35_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_fat_e_x.html" target="_self">SdFatEX</a></td><td class="desc"><a class="el" href="class_sd_fat.html" title="Main file system class for SdFat library. ">SdFat</a> class with extended SD I/O </td></tr> | |||||
<tr id="row_36_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_fat_sdio.html" target="_self">SdFatSdio</a></td><td class="desc"><a class="el" href="class_sd_fat.html" title="Main file system class for SdFat library. ">SdFat</a> class using SDIO </td></tr> | |||||
<tr id="row_37_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_fat_soft_spi.html" target="_self">SdFatSoftSpi</a></td><td class="desc"><a class="el" href="class_sd_fat.html" title="Main file system class for SdFat library. ">SdFat</a> class using software SPI </td></tr> | |||||
<tr id="row_38_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_fat_soft_spi_e_x.html" target="_self">SdFatSoftSpiEX</a></td><td class="desc"><a class="el" href="class_sd_fat.html" title="Main file system class for SdFat library. ">SdFat</a> class using software SPI and extended SD I/O </td></tr> | |||||
<tr id="row_39_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_file.html" target="_self">SdFile</a></td><td class="desc">Class for backward compatibility </td></tr> | |||||
<tr id="row_40_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_file_system.html" target="_self">SdFileSystem</a></td><td class="desc">Virtual base class for SdFat library </td></tr> | |||||
<tr id="row_41_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sdio_card.html" target="_self">SdioCard</a></td><td class="desc">Raw SDIO access to SD and SDHC flash memory cards </td></tr> | |||||
<tr id="row_42_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_spi_card.html" target="_self">SdSpiCard</a></td><td class="desc">Raw access to SD and SDHC flash memory cards via SPI protocol </td></tr> | |||||
<tr id="row_43_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sd_spi_card_e_x.html" target="_self">SdSpiCardEX</a></td><td class="desc">Extended SD I/O block driver </td></tr> | |||||
<tr id="row_44_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsetfill.html" target="_self">setfill</a></td><td class="desc">Type for setfill manipulator </td></tr> | |||||
<tr id="row_45_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsetprecision.html" target="_self">setprecision</a></td><td class="desc">Type for setprecision manipulator </td></tr> | |||||
<tr id="row_46_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsetw.html" target="_self">setw</a></td><td class="desc">Type for setw manipulator </td></tr> | |||||
<tr id="row_47_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_stdio_stream.html" target="_self">StdioStream</a></td><td class="desc"><a class="el" href="class_stdio_stream.html" title="StdioStream implements a minimal stdio stream. ">StdioStream</a> implements a minimal stdio stream </td></tr> | |||||
<tr id="row_48_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_sys_call.html" target="_self">SysCall</a></td><td class="desc"><a class="el" href="class_sys_call.html" title="SysCall - Class to wrap system calls. ">SysCall</a> - Class to wrap system calls </td></tr> | |||||
</table> | </table> | ||||
</div><!-- directory --> | </div><!-- directory --> | ||||
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:53 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
<div class="dyncontent"> | <div class="dyncontent"> | ||||
<div class="center"><img src="bufstream_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2bufstream_8h" alt=""/></div> | <div class="center"><img src="bufstream_8h__incl.png" border="0" usemap="#_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2bufstream_8h" alt=""/></div> | ||||
<map name="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2bufstream_8h" id="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2bufstream_8h"> | <map name="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2bufstream_8h" id="_arduino_2libraries_2_sd_fat_2src_2_fat_lib_2bufstream_8h"> | ||||
<area shape="rect" id="node3" href="iostream_8h.html" title="iostream class " alt="" coords="241,95,324,121"/> | |||||
<area shape="rect" id="node4" href="istream_8h.html" title="istream class " alt="" coords="245,169,321,196"/> | |||||
<area shape="rect" id="node21" href="ostream_8h.html" title="ostream class " alt="" coords="345,169,425,196"/> | |||||
<area shape="rect" id="node5" href="ios_8h.html" title="ios_base and ios classes " alt="" coords="360,244,411,271"/> | |||||
<area shape="rect" id="node6" href="_fat_file_8h.html" title="FatFile class. " alt="" coords="357,319,430,345"/> | |||||
<area shape="rect" id="node9" href="_fat_lib_config_8h.html" title="configuration definitions " alt="" coords="418,617,523,644"/> | |||||
<area shape="rect" id="node13" href="_fat_structs_8h.html" title="FAT file structures. " alt="" coords="381,468,475,495"/> | |||||
<area shape="rect" id="node14" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="241,393,337,420"/> | |||||
<area shape="rect" id="node11" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="228,692,332,719"/> | |||||
<area shape="rect" id="node15" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="156,468,255,495"/> | |||||
<area shape="rect" id="node16" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="158,543,253,569"/> | |||||
<area shape="rect" id="node17" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="223,617,302,644"/> | |||||
<area shape="rect" id="node19" href="_sd_spi_driver_8h.html" title="SpiDriver classes. " alt="" coords="99,617,199,644"/> | |||||
<area shape="rect" id="node3" href="iostream_8h.html" title="iostream class " alt="" coords="727,95,809,121"/> | |||||
<area shape="rect" id="node4" href="istream_8h.html" title="istream class " alt="" coords="729,169,805,196"/> | |||||
<area shape="rect" id="node23" href="ostream_8h.html" title="ostream class " alt="" coords="829,169,909,196"/> | |||||
<area shape="rect" id="node5" href="ios_8h.html" title="ios_base and ios classes " alt="" coords="832,244,883,271"/> | |||||
<area shape="rect" id="node6" href="_fat_file_8h.html" title="FatFile class. " alt="" coords="821,319,894,345"/> | |||||
<area shape="rect" id="node9" href="_fat_lib_config_8h.html" title="configuration definitions " alt="" coords="170,468,275,495"/> | |||||
<area shape="rect" id="node13" href="_fat_structs_8h.html" title="FAT file structures. " alt="" coords="937,468,1031,495"/> | |||||
<area shape="rect" id="node14" href="_fat_volume_8h.html" title="FatVolume class. " alt="" coords="797,393,893,420"/> | |||||
<area shape="rect" id="node11" href="_sd_fat_config_8h.html" title="configuration definitions " alt="" coords="5,557,109,584"/> | |||||
<area shape="rect" id="node15" href="_block_driver_8h.html" title="Define block driver. " alt="" coords="487,468,585,495"/> | |||||
<area shape="rect" id="node16" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. " alt="" coords="465,557,607,584"/> | |||||
<area shape="rect" id="node17" href="_sys_call_8h.html" title="SysCall class. " alt="" coords="398,647,477,673"/> | |||||
</map> | </map> | ||||
</div> | </div> | ||||
</div><div class="textblock"><div class="dynheader"> | </div><div class="textblock"><div class="dynheader"> | ||||
</div></div><!-- contents --> | </div></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</table></div><!-- contents --> | </table></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</table></div><!-- contents --> | </table></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</table></div><!-- contents --> | </table></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
<div class="dyncontent"> | <div class="dyncontent"> | ||||
<div class="center"><img src="class_base_block_driver__inherit__graph.png" border="0" usemap="#_base_block_driver_inherit__map" alt="Inheritance graph"/></div> | <div class="center"><img src="class_base_block_driver__inherit__graph.png" border="0" usemap="#_base_block_driver_inherit__map" alt="Inheritance graph"/></div> | ||||
<map name="_base_block_driver_inherit__map" id="_base_block_driver_inherit__map"> | <map name="_base_block_driver_inherit__map" id="_base_block_driver_inherit__map"> | ||||
<area shape="rect" id="node2" href="class_sd_block_driver_e_x.html" title="Extended SD I/O block driver. " alt="" coords="5,80,124,107"/> | |||||
<area shape="rect" id="node2" href="class_sdio_card.html" title="Raw SDIO access to SD and SDHC flash memory cards. " alt="" coords="27,80,101,107"/> | |||||
</map> | </map> | ||||
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div> | <center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div> | ||||
<table class="memberdecls"> | <table class="memberdecls"> | ||||
</dl> | </dl> | ||||
<dl class="section return"><dt>Returns</dt><dd>The value true is returned for success and the value false is returned for failure. </dd></dl> | <dl class="section return"><dt>Returns</dt><dd>The value true is returned for success and the value false is returned for failure. </dd></dl> | ||||
<p>Implemented in <a class="el" href="class_sd_block_driver_e_x.html#a2820c15543b0e1950961b72945ade853">SdBlockDriverEX</a>.</p> | |||||
<p>Implemented in <a class="el" href="class_sdio_card.html#ac94605c428fa9258106835cceec470d8">SdioCard</a>.</p> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</dl> | </dl> | ||||
<dl class="section return"><dt>Returns</dt><dd>The value true is returned for success and the value false is returned for failure. </dd></dl> | <dl class="section return"><dt>Returns</dt><dd>The value true is returned for success and the value false is returned for failure. </dd></dl> | ||||
<p>Implemented in <a class="el" href="class_sd_block_driver_e_x.html#a39941dac40896a2c11e49e650d0e6057">SdBlockDriverEX</a>.</p> | |||||
<p>Implemented in <a class="el" href="class_sdio_card.html#a7de36d26a01dc39b7dc122c54ee03b12">SdioCard</a>.</p> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div><div class="memdoc"> | </div><div class="memdoc"> | ||||
<p>End multi-block transfer and go to idle state. </p><dl class="section return"><dt>Returns</dt><dd>The value true is returned for success and the value false is returned for failure. </dd></dl> | <p>End multi-block transfer and go to idle state. </p><dl class="section return"><dt>Returns</dt><dd>The value true is returned for success and the value false is returned for failure. </dd></dl> | ||||
<p>Implemented in <a class="el" href="class_sd_block_driver_e_x.html#a5386776abfa49ac81d1706f9ac1149c8">SdBlockDriverEX</a>.</p> | |||||
<p>Implemented in <a class="el" href="class_sdio_card.html#affcd36a5c3a42042fe24716671f06632">SdioCard</a>.</p> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</dl> | </dl> | ||||
<dl class="section return"><dt>Returns</dt><dd>The value true is returned for success and the value false is returned for failure. </dd></dl> | <dl class="section return"><dt>Returns</dt><dd>The value true is returned for success and the value false is returned for failure. </dd></dl> | ||||
<p>Implemented in <a class="el" href="class_sd_block_driver_e_x.html#a21411fd0ddb394d6093b284af739e46c">SdBlockDriverEX</a>.</p> | |||||
<p>Implemented in <a class="el" href="class_sdio_card.html#ae53e5f72ddf9ace3f47774d968e064ed">SdioCard</a>.</p> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</dl> | </dl> | ||||
<dl class="section return"><dt>Returns</dt><dd>The value true is returned for success and the value false is returned for failure. </dd></dl> | <dl class="section return"><dt>Returns</dt><dd>The value true is returned for success and the value false is returned for failure. </dd></dl> | ||||
<p>Implemented in <a class="el" href="class_sd_block_driver_e_x.html#ac91f223488f7b76b11f4f52335ce9730">SdBlockDriverEX</a>.</p> | |||||
<p>Implemented in <a class="el" href="class_sdio_card.html#a8b811f875497e90e75fbe6c2d41d89cb">SdioCard</a>.</p> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</table></div><!-- contents --> | </table></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</table></div><!-- contents --> | </table></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</table></div><!-- contents --> | </table></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
<div class="dyncontent"> | <div class="dyncontent"> | ||||
<div class="center"><img src="class_fat_file_system__inherit__graph.png" border="0" usemap="#_fat_file_system_inherit__map" alt="Inheritance graph"/></div> | <div class="center"><img src="class_fat_file_system__inherit__graph.png" border="0" usemap="#_fat_file_system_inherit__map" alt="Inheritance graph"/></div> | ||||
<map name="_fat_file_system_inherit__map" id="_fat_file_system_inherit__map"> | <map name="_fat_file_system_inherit__map" id="_fat_file_system_inherit__map"> | ||||
<area shape="rect" id="node3" href="class_sd_file_system.html" title="Virtual base class for SdFat library. " alt="" coords="301,13,511,40"/> | |||||
<area shape="rect" id="node4" href="class_sd_file_system.html" title="SdFileSystem\< SdBlockDriver \>" alt="" coords="301,64,511,91"/> | |||||
<area shape="rect" id="node7" href="class_sd_file_system.html" title="SdFileSystem\< SdBlockDriverEX \>" alt="" coords="293,123,519,149"/> | |||||
<area shape="rect" id="node2" href="class_fat_volume.html" title="Access FAT16 and FAT32 volumes on raw file devices. " alt="" coords="5,64,91,91"/> | |||||
<area shape="rect" id="node5" href="class_sd_fat.html" title="Main file system class for SdFat library. " alt="" coords="627,5,685,32"/> | |||||
<area shape="rect" id="node6" href="class_sd_fat_soft_spi.html" title="SdFat class using software SPI. " alt="" coords="575,57,737,98"/> | |||||
<area shape="rect" id="node8" href="class_sd_fat_e_x.html" title="SdFat class with extended SD I/O. " alt="" coords="619,123,693,149"/> | |||||
<area shape="rect" id="node9" href="class_sd_fat_soft_spi_e_x.html" title="SdFat class using software SPI and extended SD I/O. " alt="" coords="567,174,745,215"/> | |||||
<area shape="rect" id="node3" href="class_sd_file_system.html" title="Virtual base class for SdFat library. " alt="" coords="293,5,503,32"/> | |||||
<area shape="rect" id="node4" href="class_sd_file_system.html" title="SdFileSystem\< SdioCard \>" alt="" coords="307,56,489,83"/> | |||||
<area shape="rect" id="node6" href="class_sd_file_system.html" title="SdFileSystem\< SdSpiCard \>" alt="" coords="303,107,493,133"/> | |||||
<area shape="rect" id="node9" href="class_sd_file_system.html" title="SdFileSystem\< SdSpiCardEX \>" alt="" coords="295,195,501,221"/> | |||||
<area shape="rect" id="node2" href="class_fat_volume.html" title="Access FAT16 and FAT32 volumes on raw file devices. " alt="" coords="5,81,91,108"/> | |||||
<area shape="rect" id="node5" href="class_sd_fat_sdio.html" title="SdFat class using SDIO. " alt="" coords="599,27,681,53"/> | |||||
<area shape="rect" id="node7" href="class_sd_fat.html" title="Main file system class for SdFat library. " alt="" coords="611,77,669,104"/> | |||||
<area shape="rect" id="node8" href="class_sd_fat_soft_spi.html" title="SdFat class using software SPI. " alt="" coords="559,129,721,170"/> | |||||
<area shape="rect" id="node10" href="class_sd_fat_e_x.html" title="SdFat class with extended SD I/O. " alt="" coords="603,195,677,221"/> | |||||
<area shape="rect" id="node11" href="class_sd_fat_soft_spi_e_x.html" title="SdFat class using software SPI and extended SD I/O. " alt="" coords="551,246,729,287"/> | |||||
</map> | </map> | ||||
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div> | <center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div> | ||||
<div class="dynheader"> | <div class="dynheader"> | ||||
<table class="memberdecls"> | <table class="memberdecls"> | ||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> | <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> | ||||
Public Member Functions</h2></td></tr> | Public Member Functions</h2></td></tr> | ||||
<tr class="memitem:a5dda20d3dcbfc8c641babbb2c9aac382"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat_file_system.html#a5dda20d3dcbfc8c641babbb2c9aac382">begin</a> (<a class="el" href="_block_driver_8h.html#a29e32edf30724992d0ab870a56fdde6c">BlockDriver</a> *blockDev, uint8_t part=0)</td></tr> | |||||
<tr class="memitem:a5dda20d3dcbfc8c641babbb2c9aac382"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat_file_system.html#a5dda20d3dcbfc8c641babbb2c9aac382">begin</a> (<a class="el" href="_block_driver_8h.html#ace97f2377acdc471a01f9f7ec1fd6bbb">BlockDriver</a> *blockDev, uint8_t part=0)</td></tr> | |||||
<tr class="separator:a5dda20d3dcbfc8c641babbb2c9aac382"><td class="memSeparator" colspan="2"> </td></tr> | <tr class="separator:a5dda20d3dcbfc8c641babbb2c9aac382"><td class="memSeparator" colspan="2"> </td></tr> | ||||
<tr class="memitem:a06beed4cea5e38116b58254a57125442"><td class="memItemLeft" align="right" valign="top">uint8_t </td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat_volume.html#a06beed4cea5e38116b58254a57125442">blocksPerCluster</a> () const </td></tr> | <tr class="memitem:a06beed4cea5e38116b58254a57125442"><td class="memItemLeft" align="right" valign="top">uint8_t </td><td class="memItemRight" valign="bottom"><a class="el" href="class_fat_volume.html#a06beed4cea5e38116b58254a57125442">blocksPerCluster</a> () const </td></tr> | ||||
<tr class="separator:a06beed4cea5e38116b58254a57125442"><td class="memSeparator" colspan="2"> </td></tr> | <tr class="separator:a06beed4cea5e38116b58254a57125442"><td class="memSeparator" colspan="2"> </td></tr> | ||||
<tr> | <tr> | ||||
<td class="memname">bool FatFileSystem::begin </td> | <td class="memname">bool FatFileSystem::begin </td> | ||||
<td>(</td> | <td>(</td> | ||||
<td class="paramtype"><a class="el" href="_block_driver_8h.html#a29e32edf30724992d0ab870a56fdde6c">BlockDriver</a> * </td> | |||||
<td class="paramtype"><a class="el" href="_block_driver_8h.html#ace97f2377acdc471a01f9f7ec1fd6bbb">BlockDriver</a> * </td> | |||||
<td class="paramname"><em>blockDev</em>, </td> | <td class="paramname"><em>blockDev</em>, </td> | ||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</table></div><!-- contents --> | </table></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</table></div><!-- contents --> | </table></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
<div class="dyncontent"> | <div class="dyncontent"> | ||||
<div class="center"><img src="class_fat_volume__inherit__graph.png" border="0" usemap="#_fat_volume_inherit__map" alt="Inheritance graph"/></div> | <div class="center"><img src="class_fat_volume__inherit__graph.png" border="0" usemap="#_fat_volume_inherit__map" alt="Inheritance graph"/></div> | ||||
<map name="_fat_volume_inherit__map" id="_fat_volume_inherit__map"> | <map name="_fat_volume_inherit__map" id="_fat_volume_inherit__map"> | ||||
<area shape="rect" id="node2" href="class_fat_file_system.html" title="Integration class for the FatLib library. " alt="" coords="139,64,245,91"/> | |||||
<area shape="rect" id="node3" href="class_sd_file_system.html" title="Virtual base class for SdFat library. " alt="" coords="301,13,511,40"/> | |||||
<area shape="rect" id="node4" href="class_sd_file_system.html" title="SdFileSystem\< SdBlockDriver \>" alt="" coords="301,64,511,91"/> | |||||
<area shape="rect" id="node7" href="class_sd_file_system.html" title="SdFileSystem\< SdBlockDriverEX \>" alt="" coords="293,123,519,149"/> | |||||
<area shape="rect" id="node5" href="class_sd_fat.html" title="Main file system class for SdFat library. " alt="" coords="627,5,685,32"/> | |||||
<area shape="rect" id="node6" href="class_sd_fat_soft_spi.html" title="SdFat class using software SPI. " alt="" coords="575,57,737,98"/> | |||||
<area shape="rect" id="node8" href="class_sd_fat_e_x.html" title="SdFat class with extended SD I/O. " alt="" coords="619,123,693,149"/> | |||||
<area shape="rect" id="node9" href="class_sd_fat_soft_spi_e_x.html" title="SdFat class using software SPI and extended SD I/O. " alt="" coords="567,174,745,215"/> | |||||
<area shape="rect" id="node2" href="class_fat_file_system.html" title="Integration class for the FatLib library. " alt="" coords="139,81,245,108"/> | |||||
<area shape="rect" id="node3" href="class_sd_file_system.html" title="Virtual base class for SdFat library. " alt="" coords="293,5,503,32"/> | |||||
<area shape="rect" id="node4" href="class_sd_file_system.html" title="SdFileSystem\< SdioCard \>" alt="" coords="307,56,489,83"/> | |||||
<area shape="rect" id="node6" href="class_sd_file_system.html" title="SdFileSystem\< SdSpiCard \>" alt="" coords="303,107,493,133"/> | |||||
<area shape="rect" id="node9" href="class_sd_file_system.html" title="SdFileSystem\< SdSpiCardEX \>" alt="" coords="295,195,501,221"/> | |||||
<area shape="rect" id="node5" href="class_sd_fat_sdio.html" title="SdFat class using SDIO. " alt="" coords="599,27,681,53"/> | |||||
<area shape="rect" id="node7" href="class_sd_fat.html" title="Main file system class for SdFat library. " alt="" coords="611,77,669,104"/> | |||||
<area shape="rect" id="node8" href="class_sd_fat_soft_spi.html" title="SdFat class using software SPI. " alt="" coords="559,129,721,170"/> | |||||
<area shape="rect" id="node10" href="class_sd_fat_e_x.html" title="SdFat class with extended SD I/O. " alt="" coords="603,195,677,221"/> | |||||
<area shape="rect" id="node11" href="class_sd_fat_soft_spi_e_x.html" title="SdFat class using software SPI and extended SD I/O. " alt="" coords="551,246,729,287"/> | |||||
</map> | </map> | ||||
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div> | <center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div> | ||||
<table class="memberdecls"> | <table class="memberdecls"> | ||||
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</table></div><!-- contents --> | </table></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</table></div><!-- contents --> | </table></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</table></div><!-- contents --> | </table></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
<p>This is the complete list of members for <a class="el" href="class_sd2_card.html">Sd2Card</a>, including all inherited members.</p> | <p>This is the complete list of members for <a class="el" href="class_sd2_card.html">Sd2Card</a>, including all inherited members.</p> | ||||
<table class="directory"> | <table class="directory"> | ||||
<tr class="even"><td class="entry"><a class="el" href="class_sd2_card.html#a9504c8f35b53d505e7dae33b0b2327d1">begin</a>(uint8_t chipSelectPin=SS, SPISettings spiSettings=SD_SCK_MHZ(50))</td><td class="entry"><a class="el" href="class_sd2_card.html">Sd2Card</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> | |||||
<tr><td class="entry"><a class="el" href="class_sd_spi_card.html#a7c8131750a5b1087375aa31f59564fae">SdSpiCard::begin</a>(SdSpiDriver *spiDriver)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
<tr class="even"><td class="entry"><a class="el" href="class_sd2_card.html#a8506e1a2d7c4d8ec3f26e8b62ea81cd7">begin</a>(uint8_t csPin=SS, SPISettings settings=SD_SCK_MHZ(50))</td><td class="entry"><a class="el" href="class_sd2_card.html">Sd2Card</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> | |||||
<tr><td class="entry"><a class="el" href="class_sd_spi_card.html#a824cd60ef8ac2b06262597d6f30a4ea7">SdSpiCard::begin</a>(SdSpiDriver *spi, uint8_t csPin, SPISettings spiSettings)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
<tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#afca8bd6b7e465bf9c475ba375c4deec8">cardSize</a>()</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | <tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#afca8bd6b7e465bf9c475ba375c4deec8">cardSize</a>()</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | ||||
<tr><td class="entry"><a class="el" href="class_sd_spi_card.html#a1caa13d19df6596b2c0dd62365c75362">erase</a>(uint32_t firstBlock, uint32_t lastBlock)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | <tr><td class="entry"><a class="el" href="class_sd_spi_card.html#a1caa13d19df6596b2c0dd62365c75362">erase</a>(uint32_t firstBlock, uint32_t lastBlock)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | ||||
<tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#aed4591884254c9f58daa8738d7c1ccdd">eraseSingleBlockEnable</a>()</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | <tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#aed4591884254c9f58daa8738d7c1ccdd">eraseSingleBlockEnable</a>()</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | ||||
<tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#a50bf5f92223222beacec2b203a6b7a95">errorCode</a>() const </td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> | <tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#a50bf5f92223222beacec2b203a6b7a95">errorCode</a>() const </td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> | ||||
<tr><td class="entry"><a class="el" href="class_sd_spi_card.html#a7b1abdb8dd5254cd4af0df19ba59ce4a">errorData</a>() const </td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> | <tr><td class="entry"><a class="el" href="class_sd_spi_card.html#a7b1abdb8dd5254cd4af0df19ba59ce4a">errorData</a>() const </td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> | ||||
<tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#aa3cb9139dbc1e6596c6717da2b486328">isBusy</a>()</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | <tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#aa3cb9139dbc1e6596c6717da2b486328">isBusy</a>()</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | ||||
<tr><td class="entry"><a class="el" href="class_sd_spi_card.html#a2973091eeab7b6ba528f6442bc5df36e">readBlock</a>(uint32_t block, uint8_t *dst)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
<tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#a5a7e12a5a076cc690885378932fa289f">readBlocks</a>(uint32_t block, uint8_t *dst, size_t count)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
<tr><td class="entry"><a class="el" href="class_sd_spi_card.html#a4393634a82c6683ee94d1fefe0be332a">readBlock</a>(uint32_t lba, uint8_t *dst)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
<tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#ac630f77c3137923b47c1bd12a9bbfadf">readBlocks</a>(uint32_t lba, uint8_t *dst, size_t nb)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
<tr><td class="entry"><a class="el" href="class_sd_spi_card.html#aa073dc42828164883db1b9faeff909ea">readCID</a>(cid_t *cid)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> | <tr><td class="entry"><a class="el" href="class_sd_spi_card.html#aa073dc42828164883db1b9faeff909ea">readCID</a>(cid_t *cid)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> | ||||
<tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#a9fbea9525e70f6e3602fe5153a5a1290">readCSD</a>(csd_t *csd)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> | <tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#a9fbea9525e70f6e3602fe5153a5a1290">readCSD</a>(csd_t *csd)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> | ||||
<tr><td class="entry"><a class="el" href="class_sd_spi_card.html#a3a1d1b4b4ceb42fcd41aaf6649482770">readData</a>(uint8_t *dst)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | <tr><td class="entry"><a class="el" href="class_sd_spi_card.html#a3a1d1b4b4ceb42fcd41aaf6649482770">readData</a>(uint8_t *dst)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | ||||
<tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#a0441c5da53bd3bd72fb833fc940f25e8">SdSpiCard</a>()</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> | <tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#a0441c5da53bd3bd72fb833fc940f25e8">SdSpiCard</a>()</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> | ||||
<tr><td class="entry"><a class="el" href="class_sd_spi_card.html#aa39feb6ebb269071ac6843a424ac311c">spiStart</a>()</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | <tr><td class="entry"><a class="el" href="class_sd_spi_card.html#aa39feb6ebb269071ac6843a424ac311c">spiStart</a>()</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | ||||
<tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#a1033a4a68d38f52dddf6a1764fcca3e1">spiStop</a>()</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | <tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#a1033a4a68d38f52dddf6a1764fcca3e1">spiStop</a>()</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | ||||
<tr><td class="entry"><a class="el" href="class_sd_spi_card.html#a061d92bf154a1863a6321385b7505f6e">type</a>() const </td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> | |||||
<tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#acdf8c7fe62ab091971cd546c00714cee">writeBlock</a>(uint32_t blockNumber, const uint8_t *src)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
<tr><td class="entry"><a class="el" href="class_sd_spi_card.html#aa5ca6901525dce4b1bc1f94a95441d88">writeBlocks</a>(uint32_t block, const uint8_t *src, size_t count)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
<tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#a9495c0b148eb380358bb4a9721c0dffa">writeData</a>(const uint8_t *src)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
<tr><td class="entry"><a class="el" href="class_sd_spi_card.html#a56d4750a5d2f693943eec985cb61ffe2">writeStart</a>(uint32_t blockNumber)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
<tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#a8bf0dc991308dcd2a7427bad89a9e2ba">writeStart</a>(uint32_t blockNumber, uint32_t eraseCount)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
<tr><td class="entry"><a class="el" href="class_sd_spi_card.html#aef9154785a4de5560fb807e4f9316fb0">writeStop</a>()</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
<tr><td class="entry"><a class="el" href="class_sd_spi_card.html#a1b6d5f412c4ad75c2f575ca75c56c095">syncBlocks</a>()</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> | |||||
<tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#a061d92bf154a1863a6321385b7505f6e">type</a>() const </td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"><span class="mlabel">inline</span></td></tr> | |||||
<tr><td class="entry"><a class="el" href="class_sd_spi_card.html#a03a0bdb0f37a88076f24a2133cf5b4ed">writeBlock</a>(uint32_t lba, const uint8_t *src)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
<tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#a181d96fe44891b7caabcd47dd29ac913">writeBlocks</a>(uint32_t lba, const uint8_t *src, size_t nb)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
<tr><td class="entry"><a class="el" href="class_sd_spi_card.html#a9495c0b148eb380358bb4a9721c0dffa">writeData</a>(const uint8_t *src)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
<tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#a56d4750a5d2f693943eec985cb61ffe2">writeStart</a>(uint32_t blockNumber)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
<tr><td class="entry"><a class="el" href="class_sd_spi_card.html#a8bf0dc991308dcd2a7427bad89a9e2ba">writeStart</a>(uint32_t blockNumber, uint32_t eraseCount)</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
<tr class="even"><td class="entry"><a class="el" href="class_sd_spi_card.html#aef9154785a4de5560fb807e4f9316fb0">writeStop</a>()</td><td class="entry"><a class="el" href="class_sd_spi_card.html">SdSpiCard</a></td><td class="entry"></td></tr> | |||||
</table></div><!-- contents --> | </table></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
<table class="memberdecls"> | <table class="memberdecls"> | ||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> | <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> | ||||
Public Member Functions</h2></td></tr> | Public Member Functions</h2></td></tr> | ||||
<tr class="memitem:a7c8131750a5b1087375aa31f59564fae"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a7c8131750a5b1087375aa31f59564fae">begin</a> (<a class="el" href="_sd_spi_driver_8h.html#abf391604c1ecfed19cdcb6c8bd626972">SdSpiDriver</a> *spiDriver)</td></tr> | |||||
<tr class="separator:a7c8131750a5b1087375aa31f59564fae"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:a9504c8f35b53d505e7dae33b0b2327d1"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd2_card.html#a9504c8f35b53d505e7dae33b0b2327d1">begin</a> (uint8_t chipSelectPin=SS, SPISettings spiSettings=SD_SCK_MHZ(50))</td></tr> | |||||
<tr class="separator:a9504c8f35b53d505e7dae33b0b2327d1"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:a824cd60ef8ac2b06262597d6f30a4ea7"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a824cd60ef8ac2b06262597d6f30a4ea7">begin</a> (SdSpiDriver *spi, uint8_t csPin, SPISettings spiSettings)</td></tr> | |||||
<tr class="separator:a824cd60ef8ac2b06262597d6f30a4ea7"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:a8506e1a2d7c4d8ec3f26e8b62ea81cd7"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd2_card.html#a8506e1a2d7c4d8ec3f26e8b62ea81cd7">begin</a> (uint8_t csPin=SS, SPISettings settings=SD_SCK_MHZ(50))</td></tr> | |||||
<tr class="separator:a8506e1a2d7c4d8ec3f26e8b62ea81cd7"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:afca8bd6b7e465bf9c475ba375c4deec8"><td class="memItemLeft" align="right" valign="top">uint32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#afca8bd6b7e465bf9c475ba375c4deec8">cardSize</a> ()</td></tr> | <tr class="memitem:afca8bd6b7e465bf9c475ba375c4deec8"><td class="memItemLeft" align="right" valign="top">uint32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#afca8bd6b7e465bf9c475ba375c4deec8">cardSize</a> ()</td></tr> | ||||
<tr class="separator:afca8bd6b7e465bf9c475ba375c4deec8"><td class="memSeparator" colspan="2"> </td></tr> | <tr class="separator:afca8bd6b7e465bf9c475ba375c4deec8"><td class="memSeparator" colspan="2"> </td></tr> | ||||
<tr class="memitem:a1caa13d19df6596b2c0dd62365c75362"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a1caa13d19df6596b2c0dd62365c75362">erase</a> (uint32_t firstBlock, uint32_t lastBlock)</td></tr> | <tr class="memitem:a1caa13d19df6596b2c0dd62365c75362"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a1caa13d19df6596b2c0dd62365c75362">erase</a> (uint32_t firstBlock, uint32_t lastBlock)</td></tr> | ||||
<tr class="separator:a7b1abdb8dd5254cd4af0df19ba59ce4a"><td class="memSeparator" colspan="2"> </td></tr> | <tr class="separator:a7b1abdb8dd5254cd4af0df19ba59ce4a"><td class="memSeparator" colspan="2"> </td></tr> | ||||
<tr class="memitem:aa3cb9139dbc1e6596c6717da2b486328"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#aa3cb9139dbc1e6596c6717da2b486328">isBusy</a> ()</td></tr> | <tr class="memitem:aa3cb9139dbc1e6596c6717da2b486328"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#aa3cb9139dbc1e6596c6717da2b486328">isBusy</a> ()</td></tr> | ||||
<tr class="separator:aa3cb9139dbc1e6596c6717da2b486328"><td class="memSeparator" colspan="2"> </td></tr> | <tr class="separator:aa3cb9139dbc1e6596c6717da2b486328"><td class="memSeparator" colspan="2"> </td></tr> | ||||
<tr class="memitem:a2973091eeab7b6ba528f6442bc5df36e"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a2973091eeab7b6ba528f6442bc5df36e">readBlock</a> (uint32_t block, uint8_t *dst)</td></tr> | |||||
<tr class="separator:a2973091eeab7b6ba528f6442bc5df36e"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:a5a7e12a5a076cc690885378932fa289f"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a5a7e12a5a076cc690885378932fa289f">readBlocks</a> (uint32_t block, uint8_t *dst, size_t count)</td></tr> | |||||
<tr class="separator:a5a7e12a5a076cc690885378932fa289f"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:a4393634a82c6683ee94d1fefe0be332a"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a4393634a82c6683ee94d1fefe0be332a">readBlock</a> (uint32_t lba, uint8_t *dst)</td></tr> | |||||
<tr class="separator:a4393634a82c6683ee94d1fefe0be332a"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:ac630f77c3137923b47c1bd12a9bbfadf"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#ac630f77c3137923b47c1bd12a9bbfadf">readBlocks</a> (uint32_t lba, uint8_t *dst, size_t nb)</td></tr> | |||||
<tr class="separator:ac630f77c3137923b47c1bd12a9bbfadf"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:aa073dc42828164883db1b9faeff909ea"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#aa073dc42828164883db1b9faeff909ea">readCID</a> (cid_t *cid)</td></tr> | <tr class="memitem:aa073dc42828164883db1b9faeff909ea"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#aa073dc42828164883db1b9faeff909ea">readCID</a> (cid_t *cid)</td></tr> | ||||
<tr class="separator:aa073dc42828164883db1b9faeff909ea"><td class="memSeparator" colspan="2"> </td></tr> | <tr class="separator:aa073dc42828164883db1b9faeff909ea"><td class="memSeparator" colspan="2"> </td></tr> | ||||
<tr class="memitem:a9fbea9525e70f6e3602fe5153a5a1290"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a9fbea9525e70f6e3602fe5153a5a1290">readCSD</a> (csd_t *csd)</td></tr> | <tr class="memitem:a9fbea9525e70f6e3602fe5153a5a1290"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a9fbea9525e70f6e3602fe5153a5a1290">readCSD</a> (csd_t *csd)</td></tr> | ||||
<tr class="separator:aa39feb6ebb269071ac6843a424ac311c"><td class="memSeparator" colspan="2"> </td></tr> | <tr class="separator:aa39feb6ebb269071ac6843a424ac311c"><td class="memSeparator" colspan="2"> </td></tr> | ||||
<tr class="memitem:a1033a4a68d38f52dddf6a1764fcca3e1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a1033a4a68d38f52dddf6a1764fcca3e1">spiStop</a> ()</td></tr> | <tr class="memitem:a1033a4a68d38f52dddf6a1764fcca3e1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a1033a4a68d38f52dddf6a1764fcca3e1">spiStop</a> ()</td></tr> | ||||
<tr class="separator:a1033a4a68d38f52dddf6a1764fcca3e1"><td class="memSeparator" colspan="2"> </td></tr> | <tr class="separator:a1033a4a68d38f52dddf6a1764fcca3e1"><td class="memSeparator" colspan="2"> </td></tr> | ||||
<tr class="memitem:a1b6d5f412c4ad75c2f575ca75c56c095"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a1b6d5f412c4ad75c2f575ca75c56c095">syncBlocks</a> ()</td></tr> | |||||
<tr class="separator:a1b6d5f412c4ad75c2f575ca75c56c095"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:a061d92bf154a1863a6321385b7505f6e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a061d92bf154a1863a6321385b7505f6e">type</a> () const </td></tr> | <tr class="memitem:a061d92bf154a1863a6321385b7505f6e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a061d92bf154a1863a6321385b7505f6e">type</a> () const </td></tr> | ||||
<tr class="separator:a061d92bf154a1863a6321385b7505f6e"><td class="memSeparator" colspan="2"> </td></tr> | <tr class="separator:a061d92bf154a1863a6321385b7505f6e"><td class="memSeparator" colspan="2"> </td></tr> | ||||
<tr class="memitem:acdf8c7fe62ab091971cd546c00714cee"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#acdf8c7fe62ab091971cd546c00714cee">writeBlock</a> (uint32_t blockNumber, const uint8_t *src)</td></tr> | |||||
<tr class="separator:acdf8c7fe62ab091971cd546c00714cee"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:aa5ca6901525dce4b1bc1f94a95441d88"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#aa5ca6901525dce4b1bc1f94a95441d88">writeBlocks</a> (uint32_t block, const uint8_t *src, size_t count)</td></tr> | |||||
<tr class="separator:aa5ca6901525dce4b1bc1f94a95441d88"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:a03a0bdb0f37a88076f24a2133cf5b4ed"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a03a0bdb0f37a88076f24a2133cf5b4ed">writeBlock</a> (uint32_t lba, const uint8_t *src)</td></tr> | |||||
<tr class="separator:a03a0bdb0f37a88076f24a2133cf5b4ed"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:a181d96fe44891b7caabcd47dd29ac913"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a181d96fe44891b7caabcd47dd29ac913">writeBlocks</a> (uint32_t lba, const uint8_t *src, size_t nb)</td></tr> | |||||
<tr class="separator:a181d96fe44891b7caabcd47dd29ac913"><td class="memSeparator" colspan="2"> </td></tr> | |||||
<tr class="memitem:a9495c0b148eb380358bb4a9721c0dffa"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a9495c0b148eb380358bb4a9721c0dffa">writeData</a> (const uint8_t *src)</td></tr> | <tr class="memitem:a9495c0b148eb380358bb4a9721c0dffa"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a9495c0b148eb380358bb4a9721c0dffa">writeData</a> (const uint8_t *src)</td></tr> | ||||
<tr class="separator:a9495c0b148eb380358bb4a9721c0dffa"><td class="memSeparator" colspan="2"> </td></tr> | <tr class="separator:a9495c0b148eb380358bb4a9721c0dffa"><td class="memSeparator" colspan="2"> </td></tr> | ||||
<tr class="memitem:a56d4750a5d2f693943eec985cb61ffe2"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a56d4750a5d2f693943eec985cb61ffe2">writeStart</a> (uint32_t blockNumber)</td></tr> | <tr class="memitem:a56d4750a5d2f693943eec985cb61ffe2"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="class_sd_spi_card.html#a56d4750a5d2f693943eec985cb61ffe2">writeStart</a> (uint32_t blockNumber)</td></tr> | ||||
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> | <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> | ||||
<div class="textblock"><p>Raw access to SD and SDHC card using default SPI library. </p> | <div class="textblock"><p>Raw access to SD and SDHC card using default SPI library. </p> | ||||
</div><h2 class="groupheader">Member Function Documentation</h2> | </div><h2 class="groupheader">Member Function Documentation</h2> | ||||
<a class="anchor" id="a7c8131750a5b1087375aa31f59564fae"></a> | |||||
<a class="anchor" id="a824cd60ef8ac2b06262597d6f30a4ea7"></a> | |||||
<div class="memitem"> | <div class="memitem"> | ||||
<div class="memproto"> | <div class="memproto"> | ||||
<table class="mlabels"> | <table class="mlabels"> | ||||
<tr> | <tr> | ||||
<td class="memname">bool SdSpiCard::begin </td> | <td class="memname">bool SdSpiCard::begin </td> | ||||
<td>(</td> | <td>(</td> | ||||
<td class="paramtype"><a class="el" href="_sd_spi_driver_8h.html#abf391604c1ecfed19cdcb6c8bd626972">SdSpiDriver</a> * </td> | |||||
<td class="paramname"><em>spiDriver</em></td><td>)</td> | |||||
<td class="paramtype">SdSpiDriver * </td> | |||||
<td class="paramname"><em>spi</em>, </td> | |||||
</tr> | |||||
<tr> | |||||
<td class="paramkey"></td> | |||||
<td></td> | |||||
<td class="paramtype">uint8_t </td> | |||||
<td class="paramname"><em>csPin</em>, </td> | |||||
</tr> | |||||
<tr> | |||||
<td class="paramkey"></td> | |||||
<td></td> | <td></td> | ||||
<td class="paramtype">SPISettings </td> | |||||
<td class="paramname"><em>spiSettings</em> </td> | |||||
</tr> | |||||
<tr> | |||||
<td></td> | |||||
<td>)</td> | |||||
<td></td><td></td> | |||||
</tr> | </tr> | ||||
</table> | </table> | ||||
</td> | </td> | ||||
</div><div class="memdoc"> | </div><div class="memdoc"> | ||||
<p>Initialize the SD card. </p><dl class="params"><dt>Parameters</dt><dd> | <p>Initialize the SD card. </p><dl class="params"><dt>Parameters</dt><dd> | ||||
<table class="params"> | <table class="params"> | ||||
<tr><td class="paramdir">[in]</td><td class="paramname">spiDriver</td><td>SPI driver for card. </td></tr> | |||||
<tr><td class="paramdir">[in]</td><td class="paramname">spi</td><td>SPI driver for card. </td></tr> | |||||
<tr><td class="paramdir">[in]</td><td class="paramname">csPin</td><td>card chip select pin. </td></tr> | |||||
<tr><td class="paramdir">[in]</td><td class="paramname">spiSettings</td><td>SPI speed, mode, and bit order. </td></tr> | |||||
</table> | </table> | ||||
</dd> | </dd> | ||||
</dl> | </dl> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<a class="anchor" id="a9504c8f35b53d505e7dae33b0b2327d1"></a> | |||||
<a class="anchor" id="a8506e1a2d7c4d8ec3f26e8b62ea81cd7"></a> | |||||
<div class="memitem"> | <div class="memitem"> | ||||
<div class="memproto"> | <div class="memproto"> | ||||
<table class="mlabels"> | <table class="mlabels"> | ||||
<td class="memname">bool Sd2Card::begin </td> | <td class="memname">bool Sd2Card::begin </td> | ||||
<td>(</td> | <td>(</td> | ||||
<td class="paramtype">uint8_t </td> | <td class="paramtype">uint8_t </td> | ||||
<td class="paramname"><em>chipSelectPin</em> = <code>SS</code>, </td> | |||||
<td class="paramname"><em>csPin</em> = <code>SS</code>, </td> | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td class="paramkey"></td> | <td class="paramkey"></td> | ||||
<td></td> | <td></td> | ||||
<td class="paramtype">SPISettings </td> | <td class="paramtype">SPISettings </td> | ||||
<td class="paramname"><em>spiSettings</em> = <code>SD_SCK_MHZ(50)</code> </td> | |||||
<td class="paramname"><em>settings</em> = <code>SD_SCK_MHZ(50)</code> </td> | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td></td> | <td></td> | ||||
</div><div class="memdoc"> | </div><div class="memdoc"> | ||||
<p>Initialize the SD card. </p><dl class="params"><dt>Parameters</dt><dd> | <p>Initialize the SD card. </p><dl class="params"><dt>Parameters</dt><dd> | ||||
<table class="params"> | <table class="params"> | ||||
<tr><td class="paramdir">[in]</td><td class="paramname">chipSelectPin</td><td>SD chip select pin. </td></tr> | |||||
<tr><td class="paramdir">[in]</td><td class="paramname">spiSettings</td><td>SPI speed, mode, and bit order. </td></tr> | |||||
<tr><td class="paramdir">[in]</td><td class="paramname">csPin</td><td>SD chip select pin. </td></tr> | |||||
<tr><td class="paramdir">[in]</td><td class="paramname">settings</td><td>SPI speed, mode, and bit order. </td></tr> | |||||
</table> | </table> | ||||
</dd> | </dd> | ||||
</dl> | </dl> | ||||
</tr> | </tr> | ||||
</table> | </table> | ||||
</div><div class="memdoc"> | </div><div class="memdoc"> | ||||
<dl class="section return"><dt>Returns</dt><dd>code for the last error. See <a class="el" href="_sd_spi_card_8h.html" title="SdSpiCard class for V2 SD/SDHC cards. ">SdSpiCard.h</a> for a list of error codes. </dd></dl> | |||||
<dl class="section return"><dt>Returns</dt><dd>code for the last error. See SdInfo.h for a list of error codes. </dd></dl> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<a class="anchor" id="a2973091eeab7b6ba528f6442bc5df36e"></a> | |||||
<a class="anchor" id="a4393634a82c6683ee94d1fefe0be332a"></a> | |||||
<div class="memitem"> | <div class="memitem"> | ||||
<div class="memproto"> | <div class="memproto"> | ||||
<table class="mlabels"> | <table class="mlabels"> | ||||
<td class="memname">bool SdSpiCard::readBlock </td> | <td class="memname">bool SdSpiCard::readBlock </td> | ||||
<td>(</td> | <td>(</td> | ||||
<td class="paramtype">uint32_t </td> | <td class="paramtype">uint32_t </td> | ||||
<td class="paramname"><em>block</em>, </td> | |||||
<td class="paramname"><em>lba</em>, </td> | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td class="paramkey"></td> | <td class="paramkey"></td> | ||||
<p>Read a 512 byte block from an SD card.</p> | <p>Read a 512 byte block from an SD card.</p> | ||||
<dl class="params"><dt>Parameters</dt><dd> | <dl class="params"><dt>Parameters</dt><dd> | ||||
<table class="params"> | <table class="params"> | ||||
<tr><td class="paramdir">[in]</td><td class="paramname">block</td><td>Logical block to be read. </td></tr> | |||||
<tr><td class="paramdir">[in]</td><td class="paramname">lba</td><td>Logical block to be read. </td></tr> | |||||
<tr><td class="paramdir">[out]</td><td class="paramname">dst</td><td>Pointer to the location that will receive the data. </td></tr> | <tr><td class="paramdir">[out]</td><td class="paramname">dst</td><td>Pointer to the location that will receive the data. </td></tr> | ||||
</table> | </table> | ||||
</dd> | </dd> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<a class="anchor" id="a5a7e12a5a076cc690885378932fa289f"></a> | |||||
<a class="anchor" id="ac630f77c3137923b47c1bd12a9bbfadf"></a> | |||||
<div class="memitem"> | <div class="memitem"> | ||||
<div class="memproto"> | <div class="memproto"> | ||||
<table class="mlabels"> | <table class="mlabels"> | ||||
<td class="memname">bool SdSpiCard::readBlocks </td> | <td class="memname">bool SdSpiCard::readBlocks </td> | ||||
<td>(</td> | <td>(</td> | ||||
<td class="paramtype">uint32_t </td> | <td class="paramtype">uint32_t </td> | ||||
<td class="paramname"><em>block</em>, </td> | |||||
<td class="paramname"><em>lba</em>, </td> | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td class="paramkey"></td> | <td class="paramkey"></td> | ||||
<td class="paramkey"></td> | <td class="paramkey"></td> | ||||
<td></td> | <td></td> | ||||
<td class="paramtype">size_t </td> | <td class="paramtype">size_t </td> | ||||
<td class="paramname"><em>count</em> </td> | |||||
<td class="paramname"><em>nb</em> </td> | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td></td> | <td></td> | ||||
<p>Read multiple 512 byte blocks from an SD card.</p> | <p>Read multiple 512 byte blocks from an SD card.</p> | ||||
<dl class="params"><dt>Parameters</dt><dd> | <dl class="params"><dt>Parameters</dt><dd> | ||||
<table class="params"> | <table class="params"> | ||||
<tr><td class="paramdir">[in]</td><td class="paramname">block</td><td>Logical block to be read. </td></tr> | |||||
<tr><td class="paramdir">[in]</td><td class="paramname">count</td><td>Number of blocks to be read. </td></tr> | |||||
<tr><td class="paramdir">[in]</td><td class="paramname">lba</td><td>Logical block to be read. </td></tr> | |||||
<tr><td class="paramdir">[in]</td><td class="paramname">nb</td><td>Number of blocks to be read. </td></tr> | |||||
<tr><td class="paramdir">[out]</td><td class="paramname">dst</td><td>Pointer to the location that will receive the data. </td></tr> | <tr><td class="paramdir">[out]</td><td class="paramname">dst</td><td>Pointer to the location that will receive the data. </td></tr> | ||||
</table> | </table> | ||||
</dd> | </dd> | ||||
</div><div class="memdoc"> | </div><div class="memdoc"> | ||||
<p>Set CS high and deactivate the card. </p> | <p>Set CS high and deactivate the card. </p> | ||||
</div> | |||||
</div> | |||||
<a class="anchor" id="a1b6d5f412c4ad75c2f575ca75c56c095"></a> | |||||
<div class="memitem"> | |||||
<div class="memproto"> | |||||
<table class="mlabels"> | |||||
<tr> | |||||
<td class="mlabels-left"> | |||||
<table class="memname"> | |||||
<tr> | |||||
<td class="memname">bool SdSpiCard::syncBlocks </td> | |||||
<td>(</td> | |||||
<td class="paramname"></td><td>)</td> | |||||
<td></td> | |||||
</tr> | |||||
</table> | |||||
</td> | |||||
<td class="mlabels-right"> | |||||
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">inherited</span></span> </td> | |||||
</tr> | |||||
</table> | |||||
</div><div class="memdoc"> | |||||
<dl class="section return"><dt>Returns</dt><dd>success if sync successful. Not for user apps. </dd></dl> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<a class="anchor" id="a061d92bf154a1863a6321385b7505f6e"></a> | <a class="anchor" id="a061d92bf154a1863a6321385b7505f6e"></a> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<a class="anchor" id="acdf8c7fe62ab091971cd546c00714cee"></a> | |||||
<a class="anchor" id="a03a0bdb0f37a88076f24a2133cf5b4ed"></a> | |||||
<div class="memitem"> | <div class="memitem"> | ||||
<div class="memproto"> | <div class="memproto"> | ||||
<table class="mlabels"> | <table class="mlabels"> | ||||
<td class="memname">bool SdSpiCard::writeBlock </td> | <td class="memname">bool SdSpiCard::writeBlock </td> | ||||
<td>(</td> | <td>(</td> | ||||
<td class="paramtype">uint32_t </td> | <td class="paramtype">uint32_t </td> | ||||
<td class="paramname"><em>blockNumber</em>, </td> | |||||
<td class="paramname"><em>lba</em>, </td> | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td class="paramkey"></td> | <td class="paramkey"></td> | ||||
<p>Writes a 512 byte block to an SD card.</p> | <p>Writes a 512 byte block to an SD card.</p> | ||||
<dl class="params"><dt>Parameters</dt><dd> | <dl class="params"><dt>Parameters</dt><dd> | ||||
<table class="params"> | <table class="params"> | ||||
<tr><td class="paramdir">[in]</td><td class="paramname">blockNumber</td><td>Logical block to be written. </td></tr> | |||||
<tr><td class="paramdir">[in]</td><td class="paramname">lba</td><td>Logical block to be written. </td></tr> | |||||
<tr><td class="paramdir">[in]</td><td class="paramname">src</td><td>Pointer to the location of the data to be written. </td></tr> | <tr><td class="paramdir">[in]</td><td class="paramname">src</td><td>Pointer to the location of the data to be written. </td></tr> | ||||
</table> | </table> | ||||
</dd> | </dd> | ||||
</div> | </div> | ||||
</div> | </div> | ||||
<a class="anchor" id="aa5ca6901525dce4b1bc1f94a95441d88"></a> | |||||
<a class="anchor" id="a181d96fe44891b7caabcd47dd29ac913"></a> | |||||
<div class="memitem"> | <div class="memitem"> | ||||
<div class="memproto"> | <div class="memproto"> | ||||
<table class="mlabels"> | <table class="mlabels"> | ||||
<td class="memname">bool SdSpiCard::writeBlocks </td> | <td class="memname">bool SdSpiCard::writeBlocks </td> | ||||
<td>(</td> | <td>(</td> | ||||
<td class="paramtype">uint32_t </td> | <td class="paramtype">uint32_t </td> | ||||
<td class="paramname"><em>block</em>, </td> | |||||
<td class="paramname"><em>lba</em>, </td> | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td class="paramkey"></td> | <td class="paramkey"></td> | ||||
<td class="paramkey"></td> | <td class="paramkey"></td> | ||||
<td></td> | <td></td> | ||||
<td class="paramtype">size_t </td> | <td class="paramtype">size_t </td> | ||||
<td class="paramname"><em>count</em> </td> | |||||
<td class="paramname"><em>nb</em> </td> | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td></td> | <td></td> | ||||
<p>Write multiple 512 byte blocks to an SD card.</p> | <p>Write multiple 512 byte blocks to an SD card.</p> | ||||
<dl class="params"><dt>Parameters</dt><dd> | <dl class="params"><dt>Parameters</dt><dd> | ||||
<table class="params"> | <table class="params"> | ||||
<tr><td class="paramdir">[in]</td><td class="paramname">block</td><td>Logical block to be written. </td></tr> | |||||
<tr><td class="paramdir">[in]</td><td class="paramname">count</td><td>Number of blocks to be written. </td></tr> | |||||
<tr><td class="paramdir">[in]</td><td class="paramname">lba</td><td>Logical block to be written. </td></tr> | |||||
<tr><td class="paramdir">[in]</td><td class="paramname">nb</td><td>Number of blocks to be written. </td></tr> | |||||
<tr><td class="paramdir">[in]</td><td class="paramname">src</td><td>Pointer to the location of the data to be written. </td></tr> | <tr><td class="paramdir">[in]</td><td class="paramname">src</td><td>Pointer to the location of the data to be written. </td></tr> | ||||
</table> | </table> | ||||
</dd> | </dd> | ||||
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</table></div><!-- contents --> | </table></div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |
</div><!-- contents --> | </div><!-- contents --> | ||||
<!-- start footer part --> | <!-- start footer part --> | ||||
<hr class="footer"/><address class="footer"><small> | <hr class="footer"/><address class="footer"><small> | ||||
Generated on Fri Aug 19 2016 08:28:00 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
Generated on Mon Sep 5 2016 10:18:52 for SdFat by  <a href="http://www.doxygen.org/index.html"> | |||||
<img class="footer" src="doxygen.png" alt="doxygen"/> | <img class="footer" src="doxygen.png" alt="doxygen"/> | ||||
</a> 1.8.10 | </a> 1.8.10 | ||||
</small></address> | </small></address> |