- Wed Oct 21, 2009 4:20 am
#83404
Thanks for the kindful reply.i want to initialise the SD card.means first i want to see either my sd card is present or not.
#include<LPC214x.h>
#include<stdio.h>
#define cmd_size 5
#define clk 0x00000800;//p0.11 timer capture
#define IN_IDLE_STATE (1<<0) /*waking from idle stage*/
void spi_sd_init(void);
unsigned char sd_init(void);
unsigned char spi_tx_ready(unsigned char);
void spi_send(void);
void spi_send1(void);
unsigned char sd_response(unsigned char);
unsigned char sd_init_cmd[]={0x40,0x00,0x00,0x00,0x00,0x95};//reset commands
unsigned char sd_out_idle[]= {0x45, 0x00,0x00,0x00,0x00, 0xFF}; //bring out from idel state
long int i;
int main()
{
spi_sd_init();
sd_init();
}
void spi_sd_init()
{
IODIR0=clk;/*direction-11th pin out on PINSEL0 */
IOSET0=clk;/*output set-11th pin out on PINSEL0*/
PINSEL1=0x000000A8;/*enable SCK,MISO,MOSI*/
SSPCR0=0x0007;/*8bit data transfer*/
SSPCR1=0x02;/*ssp enable*/
SSPCPSR=0x02;/*clock pre scale =here we enable 2*/
PINSEL1|=clk;/*SSEL enable*/
}
unsigned char sd_init(void)
{
int i;
long int count =0xFF;
IOSET0=clk;//unselect slave
for(i=0;i<10;i++)
spi_tx_ready(0xFF);/*check tx reg*/
IOCLR0=clk; //select slave
spi_send();/*send sd_init commmands*/
if( sd_response(IN_IDLE_STATE))
{
IOSET0=clk;
return (1);
}
IOSET0=clk;//unselect slave
spi_tx_ready(0xFF); //send dummy clock
IOCLR0=clk; //select slave
i=255;//for repeating process
do
{
spi_send1();//send commands for bring out from idle stage
}while((spi_tx_ready(0x00)) && --count);
if(!count)
{
IOSET0=clk;
return 2;
}
spi_tx_ready(0xFF); //send dummy clock
IOCLR0=clk; //select slave
return 1;
}
/*check tx reg*/
unsigned char spi_tx_ready(unsigned char ch)
{
unsigned char ch1;
while((SSPSR & 0x02)!=1); /*wait until TNF full*/
SSPDR=ch;
while((SSPSR & 0x10)!=0); /*wait until busy bit o*/
ch1=SSPDR;
return ch1;
}
void spi_send(void)
{
int i;
for(i=0;i<cmd_size;i++)
spi_tx_ready(sd_init_cmd[i]); /*send the sd commands*/
}
void spi_send1(void)
{
int j;
for(j=0;j<cmd_size;j++)
spi_tx_ready(sd_out_idle[j]);
}
unsigned char sd_response(unsigned char ch)
{
long int count =0xFF;
while((spi_tx_ready(0xFF)!=ch) && --count);/*254 !=1 && 254-this loop will execute upto 255 time*/
return (1);
}