pic18f4680 USE SDquestion?

General discussion on mikroC.
Post Reply
Author
Message
john0426
Posts: 2
Joined: 01 May 2011 17:09

pic18f4680 USE SDquestion?

#1 Post by john0426 » 02 May 2011 09:24

HI my friends.
i practice a SD card program.
i connected to pic18F4680 and sd card.
but pragram run to initialise area.
it stop not continue run.
i check circult correct. check input voltage correct.
i use hspul mode. let systems can run on 32Mhz.
so can help me debug.
where is debug.
thanks u very much.

AS follows:
// universal variables
unsigned int px, k; // universal for loops and other stuff

// Variables for MMC routines
unsigned char data[512]; // Buffer for MMC sector reading/writing
unsigned char data_for_registers[16]; // buffer for CID and CSD registers

char filename[]="testok.txt";

// RS232 communication variables
unsigned char received_character;
unsigned long sector_address;
unsigned char first_byte, second_byte, third_byte, fourth_byte,ret_states;
unsigned char serial_buffer[2];
unsigned char serial_pointer;


unsigned int i;
unsigned short L,j;


void printhex(unsigned char i) {
unsigned char hi,lo;
hi = i & 0xF0; // High nibble
hi = hi >> 4;
hi = hi + '0';
if (hi>'9') hi = hi + 7;
lo = (i & 0x0F) + '0'; // Low nibble
if (lo>'9') lo=lo+7;
USART_Write(hi);
USART_Write(lo);

}

void main() {
PORTC = 0;
USART_init(19200);
TRISC = 0b11010011;


while(1)
{

if (USART_Data_Ready())
{








USART_Write('P'); // If PIC present report
USART_Write('I'); //
USART_Write('C'); //
USART_Write('-'); //
USART_Write('S'); //
USART_Write('t'); //
USART_Write('a'); //
USART_Write('r'); //
USART_Write('t'); //
USART_Write('e'); //
USART_Write('d'); //
USART_Write(13); //
USART_Write(10); //



// Beffore all, we must initialise a MMC card
Spi_Init_Advanced(MASTER_OSC_DIV16, DATA_SAMPLE_MIDDLE, CLK_IDLE_LOW, LOW_2_HIGH);
i = MMC_Init(&PORTC,2);



if(i == 0)
{
USART_Write('M'); // If MMC present report
USART_Write('M');
USART_Write('C');
USART_Write('I');
USART_Write('n');
USART_Write('i');
USART_Write('t');
USART_Write('-');
USART_Write('O');
USART_Write('K');
USART_Write(13);
USART_Write(10);
}


if(i)
{
USART_Write('M'); // If error report
USART_Write('M');
USART_Write('C');
USART_Write('I');
USART_Write('n');
USART_Write('i');
USART_Write('t');
USART_Write('-');
USART_Write('E');
USART_Write('r');
USART_Write('r');
USART_Write(13);
USART_Write(10);
}



if(ret_states)
{
Usart_Write('U');
Usart_Write('i');
Usart_Write('F');
Usart_Write('i');
Usart_Write('l');
Usart_Write('e');
Usart_Write('-');
Usart_Write('C');
Usart_Write('r');
Usart_Write('E');
Usart_Write('a');
Usart_Write('t');
usart_Write('e');
USART_Write(13);
USART_Write(10);
}



for(i=0; i<=511; i++) data = 'E'; // Fill MMC buffer with same characters
i = MMC_Write_Sector(55, data);


if(i == 0)
{
Usart_Write('W');
Usart_Write('r');
Usart_Write('i');
Usart_Write('t');
Usart_Write('e');
Usart_Write('-');
Usart_Write('O');
Usart_Write('K');
}
else // if there are errors.....
{
Usart_Write('W');
Usart_Write('r');
Usart_Write('i');
Usart_Write('t');
Usart_Write('e');
Usart_Write('-');
Usart_Write('E');
Usart_Write('r');
Usart_Write('r');
}
USART_Write(13);
USART_Write(10);


// Reading of CID and CSD register on MMC card.....

i = MMC_Read_CID(data_for_registers);
if(i == 0)
{
for(k=0; k<=15; k++)
{
printhex(data_for_registers[k]);
if(k!=15) USART_Write('-');
}
USART_Write(13);
}
else
{
Usart_Write('C');
Usart_Write('I');
Usart_Write('D');
Usart_Write('-');
Usart_Write('E');
Usart_Write('r');
Usart_Write('r');
}
i == MMC_Read_CSD(data_for_registers);
if(i == 0)
{
for(k=0; k<=15; k++)
{
printhex(data_for_registers[k]);
if(k!=15) USART_Write('-');
}
USART_Write(13);
USART_Write(10);
}
else
{
Usart_Write('C');
Usart_Write('S');
Usart_Write('D');
Usart_Write('-');
Usart_Write('E');
Usart_Write('r');
Usart_Write('r');
}



// Variables initialisation
serial_pointer = 0;

// MAIN loop

if (USART_Data_Ready())
{
serial_buffer[serial_pointer] = USART_Read(); // Get the received character
serial_pointer++;
if(serial_pointer>1)
{
serial_pointer = 0;
// Collecting four bytes of the address!
if(serial_buffer[0] == 'S') first_byte = serial_buffer[1];
if(serial_buffer[0] == 's') second_byte = serial_buffer[1];
if(serial_buffer[0] == 'E') third_byte = serial_buffer[1];
if(serial_buffer[0] == 'e') fourth_byte = serial_buffer[1];
if(serial_buffer[0] == 'R') // Command: Read memmory
{
if(serial_buffer[1] == 'r')
{
sector_address = ((long)first_byte << 24) + ((long)second_byte << 16) +
((long)third_byte << 8) + ((long)fourth_byte);
i = MMC_Read_Sector(sector_address,data);
//USART_Write(0x30 + i); //
if(i == 0)
{
for(k=0; k<512; k++)
{ //USART_Write(data[k]); // send 512 bytes from MMC card via usart
printhex(data[k]);
USART_Write(' ');
if(((k+1) % 16)==0)
{
USART_Write(' ');
//printhex(k);
for(px=(k-15); px<=k; px++)
{
if((data[px]>33) && (data[px]<126))
{
USART_Write(data[px]);
}
else
{
USART_Write('.');
}
}
USART_Write(13);
}
}
USART_Write(13);
USART_Write(10);
}
else
{
USART_Write('R'); // If Error
USART_Write('d');
USART_Write('-');
USART_Write('E');
USART_Write('r');
USART_Write('r');
USART_Write(13);
USART_Write(10);
}
}
}
if(serial_buffer[0] == 'W') // Command: Write
{
if(serial_buffer[1] == 'w')
{
// Generating 32-bit address of the sector out of four received bytes
sector_address = ((long)first_byte << 24) + ((long)second_byte << 16) +
((long)third_byte << 8) + ((long)fourth_byte);
for(k=0; k<512; k++) data[k] = received_character;// fill RAM baffer
i = MMC_Write_Sector(sector_address, data); // write buffer tou MMC
if(i != 0)
{
USART_Write('W'); // If Error
USART_Write('r');
USART_Write('-');
USART_Write('E');
USART_Write('r');
USART_Write('r');
USART_Write(13);
USART_Write(10);
}
else
{
USART_Write('W'); // If OK
USART_Write('r');
USART_Write('-');
USART_Write('O');
USART_Write('K');
USART_Write(13);
USART_Write(10);
}
}
}
if(serial_buffer[0] == 'C')
{
received_character = serial_buffer[1];
}
}

}
}
}
}

john0426
Posts: 2
Joined: 01 May 2011 17:09

Re: pic18f4680 USE SDquestion?

#2 Post by john0426 » 13 May 2011 18:08

HELP me.help me.
have anybody can teach me. :cry: :cry:

i program show a message.
but i dont understand where bug.

as follow :

Sent: 1
Received: P
Received: IC-Started
MMCIn
Received: it-Err
Write-Err

Received: 0
Received: 0-00-00-00-00-00-00-00-00-00-00-00-00-00-0
Received: 0-00

Received: 0
Received: 0-00-00-00-00-00-00-00-00-00-00-00-00-
Received: 00-00-00

Disconnected from COM1

Post Reply

Return to “mikroC General”