Friday, September 15, 2017

SD card FAT library for CCS C compiler


This is a simple FAT library (FAT16 and FAT32) for CCS PIC C compiler for reading files from MMC/SD card module. This library works with PIC microcontrollers with limited RAM and ROM like PIC12F1840 MCU. This library works with FAT16 and FAT32 formatted MMC/SD card, it's automatically detects the FAT type (FAT16 or FAT32).

About the FAT library:
  • MMC/SD Card driver integrated in the library
  • This library is for reading files only
  • This library works with MMC/SD cards which do not have MBR (Master Boot Record) on its first sector. The MMC/SD card may run on PC or camera but the library may not be able to detect the FAT file system and hence FAT initialization error because the MBR and to make it run just format the card using Windows
  • Only short file name is supported (file name + extension < 13 characters)
  • Only one file can be opened at a time, if a 2nd file is opened the first file will be automatically closed
  • The user can set buffer size starting from 1 byte. Bigger buffer size --> higher speed.
  • Letter case insensitive
  • Library functions read files from the root directory only.
Library Functions:
MMC/SD card and MCU connection:
The MMC or the SD card is interfaced with the microcontroller using SPI protocol, with this library I can use hardware SPI module of the microcontroller or software SPI which is implemented by the compiler. The hardware SPI is much faster than the software SPI.
Examples:
Hardware SPI module is used and the CS pin is connected to pin RB3:
// SD Card module connections
#define   SDCARD_SPI_HW
#define   SDCARD_PIN_SELECT  PIN_B3
// End of SD card module connections
Software SPI: here the SD card communicates with the microcontroller via soft SPI:
// SD Card module connections
#define   SDCARD_PIN_SDI     PIN_B0
#define   SDCARD_PIN_SDO     PIN_B1
#define   SDCARD_PIN_SCL     PIN_B2
#define   SDCARD_PIN_SELECT  PIN_B3
// End of SD card module connections
sdcard_init(); : Initializes the media. Returns 0 if OK, non-zero if error. This function must be called before any other function.
sdcard_read_byte(int32 addr, int8* data); : Reads a byte from the MMC/SD card at address addr, saves it to pointer data. Returns 0 if OK, non-zero if error. 
fat_init(); : Initializes the FAT library. Returns 0 if OK, 1 if error.
fat_open_file(int8* fname); : Opens file stream. fname is file name. Returns 0 if OK and 1 if the opening process faced problem (file not found, long file name ...........).
fat_read_data(int32 size, int8* data); : Reads an array data of size size from the opened file. Returns 0 if OK, 1 if error or end of file is reached.
Library Download:
FAT Library for CCS PIC C compiler

Examples:
Wave player using PIC18F4550 microcontroller