Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //********************************************************
- // **** ROUTINES FOR FAT32 IMPLEMATATION OF SD CARD *****
- //********************************************************
- //Controller: ATmega168 (Clock: 8 Mhz-internal)
- //Compiler: AVR-GCC
- //Version : 2.1
- //Author: CC Dharmani, Chennai (India)
- // www.dharmanitech.com
- // With some changes by Mujda
- //Date: 26 Feb 2009 - updated 13 Sep 2009
- //********************************************************
- //Link to the Post: http://www.dharmanitech.com/2009/01/sd-card-interfacing-with-atmega8-fat32.html
- //**************************************************
- // ***** HEADER FILE : FAT32.h ******
- //**************************************************
- #ifndef _FAT32_H_
- #define _FAT32_H_
- //Structure to access Master Boot Record for getting info about partioions
- struct MBRinfo_Structure{
- unsigned char nothing[446]; //ignore, placed here to fill the gap in the structure
- unsigned char partitionData[64]; //partition records (16x4)
- unsigned int signature; //0xaa55
- };
- //Structure to access info of the first partioion of the disk
- struct partitionInfo_Structure{
- unsigned char status; //0x80 - active partition
- unsigned char headStart; //starting head
- unsigned int cylSectStart; //starting cylinder and sector
- unsigned char type; //partition type
- unsigned char headEnd; //ending head of the partition
- unsigned int cylSectEnd; //ending cylinder and sector
- unsigned long firstSector; //total sectors between MBR & the first sector of the partition
- unsigned long sectorsTotal; //size of this partition in sectors
- };
- //Structure to access boot sector data
- struct BS_Structure{
- unsigned char jumpBoot[3]; //default: 0x009000EB
- unsigned char OEMName[8];
- unsigned int bytesPerSector; //deafault: 512
- unsigned char sectorPerCluster;
- unsigned int reservedSectorCount;
- unsigned char numberofFATs;
- unsigned int rootEntryCount;
- unsigned int totalSectors_F16; //must be 0 for FAT32
- unsigned char mediaType;
- unsigned int FATsize_F16; //must be 0 for FAT32
- unsigned int sectorsPerTrack;
- unsigned int numberofHeads;
- unsigned long hiddenSectors;
- unsigned long totalSectors_F32;
- unsigned long FATsize_F32; //count of sectors occupied by one FAT
- unsigned int extFlags;
- unsigned int FSversion; //0x0000 (defines version 0.0)
- unsigned long rootCluster; //first cluster of root directory (=2)
- unsigned int FSinfo; //sector number of FSinfo structure (=1)
- unsigned int BackupBootSector;
- unsigned char reserved[12];
- unsigned char driveNumber;
- unsigned char reserved1;
- unsigned char bootSignature;
- unsigned long volumeID;
- unsigned char volumeLabel[11]; //"NO NAME "
- unsigned char fileSystemType[8]; //"FAT32"
- unsigned char bootData[420];
- unsigned int bootEndSignature; //0xaa55
- };
- //Structure to access FSinfo sector data
- struct FSInfo_Structure
- {
- unsigned long leadSignature; //0x41615252
- unsigned char reserved1[480];
- unsigned long structureSignature; //0x61417272
- unsigned long freeClusterCount; //initial: 0xffffffff
- unsigned long nextFreeCluster; //initial: 0xffffffff
- unsigned char reserved2[12];
- unsigned long trailSignature; //0xaa550000
- };
- //Structure to access Directory Entry in the FAT
- struct dir_Structure{
- unsigned char name[11];
- unsigned char attrib; //file attributes
- unsigned char NTreserved; //always 0
- unsigned char timeTenth; //tenths of seconds, set to 0 here
- unsigned int createTime; //time file was created
- unsigned int createDate; //date file was created
- unsigned int lastAccessDate;
- unsigned int firstClusterHI; //higher word of the first cluster number
- unsigned int writeTime; //time of last write
- unsigned int writeDate; //date of last write
- unsigned int firstClusterLO; //lower word of the first cluster number
- unsigned long fileSize; //size of file in bytes
- };
- //Attribute definitions for file/directory
- #define ATTR_READ_ONLY 0x01
- #define ATTR_HIDDEN 0x02
- #define ATTR_SYSTEM 0x04
- #define ATTR_VOLUME_ID 0x08
- #define ATTR_DIRECTORY 0x10
- #define ATTR_ARCHIVE 0x20
- #define ATTR_LONG_NAME 0x0f
- #define DIR_ENTRY_SIZE 0x32
- #define EMPTY 0x00
- #define DELETED 0xe5
- #define GET 0
- #define SET 1
- #define READ 0
- #define VERIFY 1
- #define ADD 0
- #define REMOVE 1
- #define TOTAL_FREE 1
- #define NEXT_FREE 2
- #define GET_LIST 0
- #define GET_FILE 1
- #define DELETE 2
- #define EOF 0x0fffffff
- //************* external variables *************
- extern volatile unsigned char buffer[512];
- extern volatile unsigned long startBlock;
- extern volatile unsigned long firstDataSector, rootCluster, totalClusters;
- extern volatile unsigned int bytesPerSector, sectorPerCluster, reservedSectorCount;
- //global flag to keep track of free cluster count updating in FSinfo sector
- unsigned char freeClusterCountUpdated;
- unsigned long unusedSectors;
- //************* functions *************
- unsigned char getBootSectorData (void);
- unsigned long getFirstSector(unsigned long clusterNumber);
- unsigned long getSetFreeCluster(unsigned char totOrNext, unsigned char get_set, unsigned long FSEntry);
- struct dir_Structure* findFiles (unsigned char flag, unsigned char *fileName);
- unsigned long getSetNextCluster (unsigned long clusterNumber,unsigned char get_set,unsigned long clusterEntry);
- unsigned char readFile (unsigned char flag, unsigned char *fileName);
- unsigned char convertFileName (unsigned char *fileName);
- void createFile (unsigned char *fileName);
- unsigned long searchNextFreeCluster (unsigned long startCluster);
- void memoryStatistics (void);
- void displayMemory (unsigned long memory);
- void deleteFile (unsigned char *fileName);
- void freeMemoryUpdate (unsigned char flag, unsigned long size);
- void sampleData(unsigned char *line);
- void convertToAscii(unsigned char *line, unsigned int start, int val, int places);
- void adc_init();
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement