Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of SDFileSystem by
Revision 7:61db99e52c0d, committed 2014-08-01
- Comitter:
- neilt6
- Date:
- Fri Aug 01 15:00:36 2014 +0000
- Parent:
- 6:55a26a56046a
- Child:
- 8:7b6acbb6739b
- Commit message:
- Minor syntax improvements
Changed in this revision
| SDFileSystem.cpp | Show annotated file Show diff for this revision Revisions of this file |
| SDFileSystem.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/SDFileSystem.cpp Fri Aug 01 14:45:21 2014 +0000
+++ b/SDFileSystem.cpp Fri Aug 01 15:00:36 2014 +0000
@@ -19,23 +19,23 @@
#include "CRC7.h"
#include "CRC16.h"
-SDFileSystem::SDFileSystem(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name, PinName cd, SwitchType cdtype, int hz) : FATFileSystem(name), m_SPI(mosi, miso, sclk), m_CS(cs, 1), m_CD(cd), m_CD_ASSERT((int)cdtype), m_FREQ(hz)
+SDFileSystem::SDFileSystem(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name, PinName cd, SwitchType cdtype, int hz) : FATFileSystem(name), m_Spi(mosi, miso, sclk), m_Cs(cs, 1), m_Cd(cd), m_CD_ASSERT((int)cdtype), m_FREQ(hz)
{
//Initialize the member variables
m_CardType = CARD_NONE;
- m_CrcEnabled = true;
+ m_Crc = true;
m_LargeFrames = false;
m_Status = STA_NOINIT;
//Configure the SPI bus
- m_SPI.format(8, 0);
+ m_Spi.format(8, 0);
//Configure the card detect pin
- m_CD.mode(PullUp);
+ m_Cd.mode(PullUp);
if (cdtype == SWITCH_NO)
- m_CD.rise(this, &SDFileSystem::checkSocket);
+ m_Cd.rise(this, &SDFileSystem::checkSocket);
else
- m_CD.fall(this, &SDFileSystem::checkSocket);
+ m_Cd.fall(this, &SDFileSystem::checkSocket);
}
SDFileSystem::CardType SDFileSystem::card_type()
@@ -51,32 +51,32 @@
return m_CardType;
}
-bool SDFileSystem::crc_enabled()
+bool SDFileSystem::crc()
{
//Return whether or not CRC is enabled
- return m_CrcEnabled;
+ return m_Crc;
}
-void SDFileSystem::crc_enabled(bool enabled)
+void SDFileSystem::crc(bool enabled)
{
//Check the card socket
checkSocket();
//Just update the member variable if the card isn't initialized
if (m_Status & STA_NOINIT) {
- m_CrcEnabled = enabled;
+ m_Crc = enabled;
return;
}
//Enable or disable CRC
- if (!m_CrcEnabled && enabled) {
+ if (enabled && !m_Crc) {
//Send CMD59(0x00000001) to enable CRC
+ m_Crc = true;
writeCommand(CMD59, 0x00000001);
- m_CrcEnabled = true;
- } else if (m_CrcEnabled && !enabled) {
+ } else if (!enabled && m_Crc) {
//Send CMD59(0x00000000) to disable CRC
writeCommand(CMD59, 0x00000000);
- m_CrcEnabled = false;
+ m_Crc = false;
}
}
@@ -106,12 +106,12 @@
return m_Status;
//Set the SPI frequency to 100kHz for initialization
- m_SPI.frequency(100000);
+ m_Spi.frequency(100000);
//Send 80 dummy clocks with /CS and DI held high
- m_CS = 1;
+ m_Cs = 1;
for (int i = 0; i < 10; i++)
- m_SPI.write(0xFF);
+ m_Spi.write(0xFF);
//Write CMD0(0x00000000) to reset the card
resp = writeCommand(CMD0, 0x00000000);
@@ -211,7 +211,7 @@
}
//Send CMD59(0x00000001) to enable CRC if necessary
- if (m_CrcEnabled) {
+ if (m_Crc) {
resp = writeCommand(CMD59, 0x00000001);
if (resp != 0x00) {
//Initialization failed
@@ -245,11 +245,11 @@
//Increase the SPI frequency to full speed (limited to 20MHz for MMC, or 25MHz for SDC)
if (m_CardType == CARD_MMC && m_FREQ > 20000000)
- m_SPI.frequency(20000000);
+ m_Spi.frequency(20000000);
else if (m_FREQ > 25000000)
- m_SPI.frequency(25000000);
+ m_Spi.frequency(25000000);
else
- m_SPI.frequency(m_FREQ);
+ m_Spi.frequency(m_FREQ);
//Return the device status
return m_Status;
@@ -318,36 +318,36 @@
}
//Send the write data token
- m_SPI.write(0xFE);
+ m_Spi.write(0xFE);
//Check if large frames are enabled or not
if (m_LargeFrames) {
//Switch to 16-bit frames for better performance
- m_SPI.format(16, 0);
+ m_Spi.format(16, 0);
//Write the data block from the buffer
for (int b = 0; b < 512; b += 2) {
- m_SPI.write((buffer[b] << 8) | buffer[b + 1]);
+ m_Spi.write((buffer[b] << 8) | buffer[b + 1]);
}
//Calculate the CRC16 checksum for the data block and send it (if enabled)
- m_SPI.write(m_CrcEnabled ? CRC16((char*)buffer, 512) : 0xFFFF);
+ m_Spi.write(m_Crc ? CRC16((char*)buffer, 512) : 0xFFFF);
//Switch back to 8-bit frames
- m_SPI.format(8, 0);
+ m_Spi.format(8, 0);
} else {
//Write the data block from the buffer
for (int b = 0; b < 512; b++)
- m_SPI.write(buffer[b]);
+ m_Spi.write(buffer[b]);
//Calculate the CRC16 checksum for the data block and send it (if enabled)
- unsigned short crc = m_CrcEnabled ? CRC16((char*)buffer, 512) : 0xFFFF;
- m_SPI.write(crc >> 8);
- m_SPI.write(crc);
+ unsigned short crc = m_Crc ? CRC16((char*)buffer, 512) : 0xFFFF;
+ m_Spi.write(crc >> 8);
+ m_Spi.write(crc);
}
//Receive the data response, and deselect the card
- char resp = m_SPI.write(0xFF) & 0x1F;
+ char resp = m_Spi.write(0xFF) & 0x1F;
deselect();
//Check the response
@@ -414,7 +414,7 @@
void SDFileSystem::checkSocket()
{
//Check if a card is in the socket
- if (m_CD == m_CD_ASSERT) {
+ if (m_Cd == m_CD_ASSERT) {
//The socket is occupied, clear the STA_NODISK flag
m_Status &= ~STA_NODISK;
} else {
@@ -428,7 +428,7 @@
{
//Wait for the specified timeout for the card to become ready
for (int i = 0; i < timeout; i++) {
- if (m_SPI.write(0xFF) == 0xFF)
+ if (m_Spi.write(0xFF) == 0xFF)
return true;
wait_ms(1);
}
@@ -440,10 +440,10 @@
inline bool SDFileSystem::select()
{
//Pull /CS low
- m_CS = 0;
+ m_Cs = 0;
//Send a dummy clock to enable DO
- m_SPI.write(0xFF);
+ m_Spi.write(0xFF);
//Wait for up to 500ms for the card to become ready
if (waitReady(500))
@@ -457,10 +457,10 @@
inline void SDFileSystem::deselect()
{
//Pull /CS high
- m_CS = 1;
+ m_Cs = 1;
//Send a dummy byte to release DO
- m_SPI.write(0xFF);
+ m_Spi.write(0xFF);
}
char SDFileSystem::writeCommand(char cmd, unsigned int arg)
@@ -487,18 +487,18 @@
cmdPacket[2] = arg >> 16;
cmdPacket[3] = arg >> 8;
cmdPacket[4] = arg;
- if (m_CrcEnabled || cmd == CMD0 || cmd == CMD8)
+ if (m_Crc || cmd == CMD0 || cmd == CMD8)
cmdPacket[5] = (CRC7(cmdPacket, 5) << 1) | 0x01;
else
cmdPacket[5] = 0x01;
//Send the command packet
for (int b = 0; b < 6; b++)
- m_SPI.write(cmdPacket[b]);
+ m_Spi.write(cmdPacket[b]);
//Allow up to 10 bytes of delay for the command response
for (int b = 0; b < 10; b++) {
- resp = m_SPI.write(0xFF);
+ resp = m_Spi.write(0xFF);
if (!(resp & 0x80))
break;
}
@@ -521,10 +521,10 @@
unsigned int ret;
//Read the 32-bit response value
- ret = (m_SPI.write(0xFF) << 24);
- ret |= (m_SPI.write(0xFF) << 16);
- ret |= (m_SPI.write(0xFF) << 8);
- ret |= m_SPI.write(0xFF);
+ ret = (m_Spi.write(0xFF) << 24);
+ ret |= (m_Spi.write(0xFF) << 16);
+ ret |= (m_Spi.write(0xFF) << 8);
+ ret |= m_Spi.write(0xFF);
//Deselect the card
deselect();
@@ -540,7 +540,7 @@
//Wait for up to 200ms for the DataStart token to arrive
for (int i = 0; i < 200; i++) {
- token = m_SPI.write(0xFF);
+ token = m_Spi.write(0xFF);
if (token != 0xFF)
break;
wait_ms(1);
@@ -555,34 +555,34 @@
//Check if large frames are enabled or not
if (m_LargeFrames) {
//Switch to 16-bit frames for better performance
- m_SPI.format(16, 0);
+ m_Spi.format(16, 0);
//Read the data into the buffer
unsigned short dataWord;
for (int i = 0; i < length; i += 2) {
- dataWord = m_SPI.write(0xFFFF);
+ dataWord = m_Spi.write(0xFFFF);
buffer[i] = dataWord >> 8;
buffer[i + 1] = dataWord;
}
//Read the CRC16 checksum for the data block
- crc = m_SPI.write(0xFFFF);
+ crc = m_Spi.write(0xFFFF);
//Switch back to 8-bit frames
- m_SPI.format(8, 0);
+ m_Spi.format(8, 0);
} else {
//Read the data into the buffer
for (int i = 0; i < length; i++)
- buffer[i] = m_SPI.write(0xFF);
+ buffer[i] = m_Spi.write(0xFF);
//Read the CRC16 checksum for the data block
- crc = (m_SPI.write(0xFF) << 8);
- crc |= m_SPI.write(0xFF);
+ crc = (m_Spi.write(0xFF) << 8);
+ crc |= m_Spi.write(0xFF);
}
//Deselect the card
deselect();
//Verify the CRC16 checksum (if enabled)
- return (!m_CrcEnabled || crc == CRC16(buffer, length));
+ return (!m_Crc || crc == CRC16(buffer, length));
}
--- a/SDFileSystem.h Fri Aug 01 14:45:21 2014 +0000
+++ b/SDFileSystem.h Fri Aug 01 15:00:36 2014 +0000
@@ -106,13 +106,13 @@
* 'true' if CRC is enabled for commands and data,
* 'false' if CRC is disabled for commands and data.
*/
- bool crc_enabled();
+ bool crc();
/** Set whether or not CRC is enabled for commands and data
*
* @param enabled Whether or not to enable CRC for commands and data.
*/
- void crc_enabled(bool enabled);
+ void crc(bool enabled);
/** Get whether or not 16-bit frames are enabled for data read/write operations
*
@@ -153,13 +153,13 @@
};
//Member variables
- SPI m_SPI;
- DigitalOut m_CS;
- InterruptIn m_CD;
+ SPI m_Spi;
+ DigitalOut m_Cs;
+ InterruptIn m_Cd;
const int m_CD_ASSERT;
const int m_FREQ;
SDFileSystem::CardType m_CardType;
- bool m_CrcEnabled;
+ bool m_Crc;
bool m_LargeFrames;
int m_Status;
