Dependencies: PinDetect TextLCD mbed mRotaryEncoder
Diff: SDCard.h
- Revision:
- 0:afb2650fb49a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SDCard.h Mon Feb 13 02:11:20 2012 +0000 @@ -0,0 +1,120 @@ +//mbed Microcontroller Library +//SDCard Interface +//Copyright 2010 +//Thomas Hamilton + +#ifndef SDCardLibrary +#define SDCardLibrary + +#include "stdint.h" +#include "mbed.h" +#include "FATFileSystem.h" + +class SDCard : public FATFileSystem +{ + private: + SPI DataLines; + DigitalOut ChipSelect; + //physical chip interface + + unsigned int t; + //timeout counter + unsigned int Timeout; + //timeout limit + bool CRCMode; + //low: CRCs disabled, high: CRCs enabled + bool Capacity; + //low: low-capacity, high: high-capacity + bool Version; + //low: version 1, high: version 2 + unsigned char Status; + //0x00: Ready, 0x01: not initialized + unsigned char FSR[64]; + //function status register + unsigned char CSD[16]; + //card-specific data register + unsigned char OCR[4]; + //operating conditions register + unsigned char DataCRCTable[512]; + //CRC16 CCITT lookup table + unsigned char CommandCRCTable[256]; + //CRC7 SD command lookup table + + unsigned char Initialize(); + //complete all initialization operations + void Command(unsigned char Index, + unsigned int Argument, unsigned char* Response); + //sends the SD command with the given Index and Argument to the SD + //card and stores the SD Response + void CommandCRC(unsigned char* IndexPtr, + unsigned int* ArgumentPtr, unsigned char* Result); + //calculates the SD proprietary CRC7 result of an SD command + //(composed of a command index and argument) and stores the one- + //byte solution in Result + void DataCRC( + unsigned short Length, unsigned char* Data, unsigned char* Result); + //calculates the CRC16 CCITT result of the number of bytes in Data + //given by Length and stores the two-byte solution in Result + //assumes DataCRCTable has already been calculated + void GenerateCRCTable(unsigned char Size, + unsigned long long Generator, unsigned char* Table); + //pre-calculates CRC results from the given Generator for efficient + //checking; assumes pre-allocated Table is large enough to hold the + //number of bytes given in Size + + virtual unsigned char disk_initialize(); + virtual unsigned char disk_status(); + virtual unsigned char disk_read(unsigned char* buff, + unsigned long sector, unsigned char count); + virtual unsigned char disk_write(const unsigned char* buff, + unsigned long sector, unsigned char count); + virtual unsigned char disk_sync(); + virtual unsigned long disk_sector_count(); + virtual unsigned short disk_sector_size(); + virtual unsigned long disk_block_size(); + //FAT system virtual functions that are called by the FAT module + + public: + SDCard(PinName mosi, PinName miso, PinName sck, PinName cs, + const char* DiskName); + //constructor needs SPI pins, DigitalOut pins, and a directory name + virtual ~SDCard(); + //destructor deallocates tables and registers + unsigned char Format(unsigned int AllocationUnit); + //formats the card FAT with given AllocationUnit in sectors; the + //maximum is 32768 sectors + unsigned char Log(unsigned char Control, unsigned char Data); + //multipurpose single-byte raw data-logging method with three modes + //Control description + // 0 synchronizes card and resets internal counter to + // finalize read or write operations + // 1 successively write Data to a raw byte address in order + // starting at address 0 + // 2 successively read and return a raw data byte in order + // starting at address 0 + //return byte from sync or write operations and input Data of sync + //or read operations are not used; writing with this function will + //deformat the drive + unsigned char Write(unsigned int Address, unsigned char* Data); + //write the first 512 byte sector of Data to the card at the given + //Address + unsigned char Write(unsigned int Address, + unsigned char SectorCount, unsigned char* Data); + //write the first given SectorCount of 512 byte sectors of Data to + //the card at the given Address + unsigned char Read(unsigned int Address, unsigned char* Data); + //read the first 512 byte sector from card at the given Address + //into Data + unsigned char Read(unsigned int Address, + unsigned char SectorCount, unsigned char* Data); + //read the first given SectorCount of 512 byte sectors from the + //card at the given Address into Data + unsigned char SelectCRCMode(bool Mode); + //toggle CRC mode; low: CRCs disabled, high: CRCs enabled, default: + //CRCs disabled + void SetTimeout(unsigned int Retries); + //change the number of retries for interface functions; increase if + //lines are unreliable; default: 1024, minimum: 1024 +}; + +#endif \ No newline at end of file