spi to mmc

i got a working code for pic uc(18f4520) from the net.
i have also tried the example code on the mikroC pro for pic , index but i am not able to write into the memory card.
i am doing an academic project can someone please help me out with this and guide me if possible
thankyou,

The source codes are:
1:

/*..............................................................
SD CARD PROJECT
===============
In this project a SD card is connected to PORTC as follows:
CS RC2
CLK RC3
DO RC4
DI RC5
The program opens a file called Test.TXT on the SD card
and writes the string "Writing to SD Card..." to this file.
Author: studentcompanion.co.za
Date: July 2013
File: Test.C
..............................................................*/
char filename[] = "Test.TXT";
unsigned char txt[] = "Writing complete to SD Card...";

// MMC module connections
sbit Mmc_Chip_Select at LATC2_bit; // for writing to output pin always use latch (PIC18 family)
sbit Mmc_Chip_Select_Direction at TRISC2_bit;


void main()
{

UART1_Init(9600);
//
// Initialise the SPI bus
//
SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV16,_SPI_DATA_SAMPLE_MIDDLE,
_SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);

// use fat16 quick format instead of init routine if a formatting is needed
if (Mmc_Fat_Init() == 0)
{
UART1_Write_Text("mmc fat initialised");
// reinitialize spi at higher speed
SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV4, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);

Mmc_Fat_Assign(&filename, 0x80); // Find existing file or create a new one
Mmc_Fat_Rewrite();

Mmc_Fat_Write(txt,21);
}

for(;😉;
}



/*-----------------------------------------------------------------------------------------------*/




2:


/*
* Project name:
Mmc_Fat16_Test(Demonstration of usage of Mmc_Fat16 library)
* Copyright:
(c) MikroElektronika, 2012
* Revision History:
20081218:
- initial release;
20111012;
- revision (JK);
* Description:
This project consists of several blocks that demonstrate various aspects of
usage of the Mmc_Fat16 library. These are:
- Creation of new file and writing down to it;
- Opening existing file and re-writing it (writing from start-of-file);
- Opening existing file and appending data to it (writing from end-of-file);
- Opening a file and reading data from it (sending it to USART terminal);
- Creating and modifying several files at once;
- Reading file contents;
- Deleting file(s);
- Creating the swap file (see Help for details);
* Test configuration:
MCU: PIC18F45K22
#-Link-Snipped-#
Dev.Board: EasyPIC7
#-Link-Snipped-#
Oscillator: HS-PLL, 32.00000 MHz
Ext. Modules: ac:MMC-SD_Board on PORTC
SW: mikroC PRO for PIC
#-Link-Snipped-#
* NOTES:
- Make sure that MMC card is properly formatted (to FAT16 or just FAT)
before testing it on this example.
- Connect RS232 cable and turn on RS232 switches SW1.1 and SW2.1 (board specific).
- This example expects MMC card to be inserted before reset, otherwise,
the FAT_ERROR message is displayed.
*/

// MMC module connections
sbit Mmc_Chip_Select at LATC0_bit; // for writing to output pin always use latch (PIC18 family)
sbit Mmc_Chip_Select_Direction at TRISC0_bit;
// eof MMC module connections

const LINE_LEN = 43;
char err_txt[20] = "FAT16 not found";
char file_contents[LINE_LEN] = "XX MMC/SD FAT16 library by Anton Rieckert\n";
char filename[14] = "MIKRO00x.TXT"; // File names
unsigned short loop, loop2;
unsigned long i, size;

// UART1 write text and new line (carriage return + line feed)
void UART1_Write_Line(char *uart_text) {
UART1_Write_Text(uart_text);
UART1_Write(13);
UART1_Write(10);
}

// Creates new file and writes some data to it
void M_Create_New_File() {
filename[7] = 'A';
Mmc_Fat_Set_File_Date(2010, 4, 19, 9, 0, 0); // Set file date & time info
Mmc_Fat_Assign(&filename, 0xA0); // Find existing file or create a new one
Mmc_Fat_Rewrite(); // To clear file and start with new data
for(loop = 1; loop <= 99; loop++) {
UART1_Write('.');
file_contents[0] = loop / 10 + 48;
file_contents[1] = loop % 10 + 48;
Mmc_Fat_Write(file_contents, LINE_LEN-1); // write data to the assigned file
}
}

// Creates many new files and writes data to them
void M_Create_Multiple_Files()
{
for(loop2 = 'B'; loop2 <= 'Z'; loop2++) {
UART1_Write(loop2); // signal the progress
filename[7] = loop2; // set filename
Mmc_Fat_Set_File_Date(2010, 4, 19, 9, 0, 0); // Set file date & time info
Mmc_Fat_Assign(&filename, 0xA0); // find existing file or create a new one
Mmc_Fat_Rewrite(); // To clear file and start with new data
for(loop = 1; loop <= 44; loop++) {
file_contents[0] = loop / 10 + 48;
file_contents[1] = loop % 10 + 48;
Mmc_Fat_Write(file_contents, LINE_LEN-1); // write data to the assigned file
}
}
}

// Opens an existing file and rewrites it
void M_Open_File_Rewrite() {
filename[7] = 'C';
Mmc_Fat_Assign(&filename, 0);
Mmc_Fat_Rewrite();
for(loop = 1; loop <= 55; loop++) {
file_contents[0] = loop / 10 + 48;
file_contents[1] = loop % 10 + 48;
Mmc_Fat_Write(file_contents, LINE_LEN-1); // write data to the assigned file
}
}

// Opens an existing file and appends data to it
// (and alters the date/time stamp)
void M_Open_File_Append() {
filename[7] = 'B';
Mmc_Fat_Assign(&filename, 0);
Mmc_Fat_Set_File_Date(2010, 4, 19, 9, 20, 0);
Mmc_Fat_Append(); // Prepare file for append
Mmc_Fat_Write(" for mikroElektronika 2010\n", 27); // Write data to assigned file
}

// Opens an existing file, reads data from it and puts it to UART
void M_Open_File_Read() {
char character;
filename[7] = 'B';
Mmc_Fat_Assign(&filename, 0);
Mmc_Fat_Reset(&size); // To read file, procedure returns size of file
for (i = 1; i <= size; i++) {
Mmc_Fat_Read(&character);
UART1_Write(character); // Write data to UART
}
}

// Deletes a file. If file doesn't exist, it will first be created
// and then deleted.
void M_Delete_File() {
filename[7] = 'F';
Mmc_Fat_Assign(filename, 0);
Mmc_Fat_Delete();
}

// Tests whether file exists, and if so sends its creation date
// and file size via UART
void M_Test_File_Exist() {
unsigned long fsize;
unsigned int year;
unsigned short month, day, hour, minute;
unsigned char outstr[12];

filename[7] = 'B'; //uncomment this line to search for file that DOES exists
// filename[7] = 'F'; //uncomment this line to search for file that DOES NOT exist
if (Mmc_Fat_Assign(filename, 0)) {
//--- file has been found - get its create date
Mmc_Fat_Get_File_Date(&year, &month, &day, &hour, &minute);
UART1_Write_Text(" created: ");
WordToStr(year, outstr);
UART1_Write_Text(outstr);
ByteToStr(month, outstr);
UART1_Write_Text(outstr);
WordToStr(day, outstr);
UART1_Write_Text(outstr);
WordToStr(hour, outstr);
UART1_Write_Text(outstr);
WordToStr(minute, outstr);
UART1_Write_Text(outstr);

//--- file has been found - get its modified date
Mmc_Fat_Get_File_Date_Modified(&year, &month, &day, &hour, &minute);
UART1_Write_Text(" modified: ");
WordToStr(year, outstr);
UART1_Write_Text(outstr);
ByteToStr(month, outstr);
UART1_Write_Text(outstr);
WordToStr(day, outstr);
UART1_Write_Text(outstr);
WordToStr(hour, outstr);
UART1_Write_Text(outstr);
WordToStr(minute, outstr);
UART1_Write_Text(outstr);

//--- get file size
fsize = Mmc_Fat_Get_File_Size();
LongToStr((signed long)fsize, outstr);
UART1_Write_Line(outstr);
}
else {
//--- file was not found - signal it
UART1_Write(0x55);
Delay_ms(1000);
UART1_Write(0x55);
}
}


// Tries to create a swap file, whose size will be at least 100
// sectors (see Help for details)
void M_Create_Swap_File()
{
unsigned int i;

size = Mmc_Fat_Get_Swap_File(5000, "mikroE.txt", 0x20); // see help on this function for details

for(i=0; i<512; i++)
f16_sector.fSect = i;

if (size) {
LongToStr((signed long)size, err_txt);
UART1_Write_Line(err_txt);

for(i=0; i<5000; i++) {
Mmc_Write_Sector(size++, f16_sector.fSect);
UART1_Write('.');
}
}
}

// Main. Uncomment the function(s) to test the desired operation(s)
void main()
{
#define COMPLETE_EXAMPLE // comment this line to make simpler/smaller example
//ANSELC = 0; // Configure AN pins as digital
//SLRCON = 0; // Set output slew rate on all ports at standard rate
// Initialize UART1 module
UART1_Init(19200);
Delay_ms(10);

UART1_Write_Line("PIC-Started"); // PIC present report

// Initialize SPI1 module
SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV64, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);
// use fat16 quick format instead of init routine if a formatting is needed
if (Mmc_Fat_Init() == 0)
{
UART1_Write_Line("mmc initialised.");
// reinitialize spi at higher speed
SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV4, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);
//--- Test start
UART1_Write_Line("Test Start.");
//--- Test routines. Uncomment them one-by-one to test certain features
M_Create_New_File();
#ifdef COMPLETE_EXAMPLE
M_Create_Multiple_Files();
M_Open_File_Rewrite();
M_Open_File_Append();
M_Open_File_Read();
M_Delete_File();
M_Test_File_Exist();
M_Create_Swap_File();
#endif
UART1_Write_Line("Test End.");

}
else if(Mmc_Fat_Init() == 255)
{
UART1_Write_Line("memory card not found);
//UART1_Write_Line(err_txt); // Note: Mmc_Fat_Init tries to initialize a card more than once.
// If card is not present, initialization may last longer (depending on clock speed)
}
else if(Mmc_Fat_Init() == 1)
{
//UART1_Write_Line("boot sectror not found");
UART1_Write_Line(err_txt); // Note: Mmc_Fat_Init tries to initialize a card more than once.
// If card is not present, initialization may last longer (depending on clock speed)
}
Mmc_Fat_Write(" End ", LINE_LEN-1); // write data to the assigned file
}

Replies

  • Harshad Italiya
    Harshad Italiya
    Are you using same board for MMC interface? Is this example code you posted given by Mikroelectronika?

You are reading an archived discussion.

Related Posts

What is 2-(meaning)Leg(Meaning) >???What is 2-(meaning)Leg(Meaning) >???
Google Chromecast, the HDMI streaming dongle from the online search giant is now available on Indian e-commerce stores with a price tag of Rs. 3099 (on Amazon) and Rs. 3998...
NASA purposely ended the six month journey of its Lunar Atmosphere and Dust Environment Explorer (LADEE) by crashing it on the moon. It might seem a poetic way of biding...
Hi everyone, I have studing for my grad. project for a while. It is about 3 phase power calculation and simulating it on LabView software. This calculation will be applied...
Only 6 states in India have bicameral legislature. Many states have abolished Vidhan Parishad, while Andhra Pradesh had earlier abolish and re-established it. Why our states want to abolish it?