⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 Keil C 写的SD卡驱动程序
💻 C
字号:
#include"LPC214X.H"
#include "PCF8833.h"
#include"SD.H"
#define TFE     0x01
#define TNF     0x02
#define RNE     0x04
#define RFF     0x08
#define BSY     0x10
#define SD_Disable() IO0SET |= 1 << 20  //SD Chip Select Pin is P0.7
#define SD_Enable() IO0CLR |= 1 << 20 
INT8U write_buffer[512]={0x31,0x32,0x33,0x34,0x35,0x35};
INT8U read_buffer[512]={0x31,0x32,0x33,0x34,0x35};
//以下均为扇区数 
INT32U sector_size=0;  
INT32U sector_hidden=0; 
INT32U sector_Reserved=0; 
INT32U drive_size=0;
INT32U fat_size=0;
INT32U root_add=0;

BOOT_dispose()
{
   unsigned int a=0;
   a=read_buffer[82];
   if(a!='F')  return(1);	
   a=read_buffer[83];
   if(a!='A')  return(1);	
   a=read_buffer[84];
   if(a!='T')  return(1);	
   a=read_buffer[85];
   if(a!='3')  return(1);	
   a=read_buffer[86];
   if(a!='2')  return(1);	
   a=read_buffer[0x0c];
   a=a<<8;
   a=a|read_buffer[0x0b];
   sector_size=a;
   if(sector_size!=512)  return(1);
   a=0;
   a=read_buffer[0x1f]<<24;
   sector_hidden|=a;
   a=0;
   a=read_buffer[0x1e]<<16;
   sector_hidden|=a;
   a=0;
   a=read_buffer[0x1d]<<8;
   sector_hidden|=a;
   a=0; 
   a=read_buffer[0x1c];
   sector_hidden|=a;
   if(sector_hidden!=0x0)  return(1);
   a=0;
   a=read_buffer[0x10];
   if(a!=0x02)  return(1);  
   a=0;
   a=read_buffer[0x0f]<<8;
   sector_Reserved|=a;
   a=0;
   a=read_buffer[0x0e];
   sector_Reserved|=a;
   if(sector_Reserved!=36)  return(1);
   a=0;
   a=read_buffer[0x23]<<24;
   drive_size|=a;
   if(a!=0)   return(1);
   a=0;
   a=read_buffer[0x22]<<16;
   drive_size|=a;
   if(a!=0x0f0000)   return(1);
   a=0;
   a=read_buffer[0x21]<<8;
   drive_size|=a;
   if(a!=0x5c00)   return(1);
   a=0;
   a=read_buffer[0x20];
   drive_size|=a;
   if(a!=0x00)   return(1);
   if(drive_size!=0x0f5c00)	 return(1);
   a=0;
   a=read_buffer[0x27]<<24;
   fat_size|=a;
   if(a!=0x00)   return(1);
   a=0;
   a=read_buffer[0x26]<<16;
   fat_size|=a;
   if(a!=0x00)   return(1);
   a=0;
   a=read_buffer[0x25]<<8;
   fat_size|=a;
   if(a!=0x0300)   return(1);
   a=0;
   a=read_buffer[0x24];
   fat_size|=a;
   if(a!=0xd6)   return(1);
   if(fat_size!=0x03d6)  return(1);
   root_add=(sector_hidden+sector_Reserved+fat_size*2);
   if(root_add!=0x07d0)   return(1);
   else return(0);
}

dispose(INT16U i)
{
   if((read_buffer[i]==0)&(read_buffer[i+1]==0)&(read_buffer[i+2]==0)&(read_buffer[i+3]==0)&(read_buffer[i+4]==0)&(read_buffer[i+5]==0)&(read_buffer[i+6]==0)&(read_buffer[i+7]==0))
   return(2);
   if(read_buffer[i+0]==0xe5)
   return(1);
   return(0);
}

SD_List()
{
   INT8U response,a,j,b,y;
   INT32U add;
   INT16U i;
   INT8U LIST[16];
   a=1;
   i=0;
   y=70;
   add=0xFA000;
      response=SD_READ(read_buffer,512,add);
	  while(response!=0) ;
	  while(a)
	  {
	  j=0;
	  response=dispose(i);
	  if(response==0)   
	  {
	      for(b=0;b<8;b++)
		  {
		      if(read_buffer[i]!=0x20)
			  {
			      LIST[j]=read_buffer[i];
				  j=j+1;
			  }
			  i=i+1;
		  } 
		  LIST[j]='.';
		  j+=1;
		  for(b=0;b<8;b++)
		  {
		      if(read_buffer[i]!=0x20)
			  {
			      LIST[j]=read_buffer[i];
				  j+=1;
			  } 
			  else
			  {
			      b=7-b;
				  i=i+b;
				  b=8;
			  }
			  i=i+1;
		  }
		  PutString(0,y,LIST,0xf800,0xffff);
		  y+=16;
		  i=i+0x10;
		  for(b=0;b<16;b++)
		  {
		      LIST[b]=0;
		  }
	  }
	  if(response==1)	i=i+0x20;
	  if(response==2)   a=0;
    }  
}

main()
{ 
  INT8U response;
//  INT8U write_buffer[512]={0x31,0x32,0x33,0x34,0x35,0x35};
//  INT8U read_buffer[512]={0x31,0x32,0x33,0x34,0x35};
  PCF8833INIT();
  PCF8833CLR();
  spi_init();
  SD_Enable();
  response=SD_INIT();
  while(response!=0) ;
  response=READ_CSD();
  while(response!=0) ;
  response=SD_WRITE(write_buffer,1);
  while(response!=0) ;
  response=SD_READ(read_buffer,512,1*512);
  while(response!=0) ;
  response=BOOT_READ(read_buffer,100,0);
  while(response!=0) ;
  response=BOOT_dispose();
  while(response!=0)  PutString(0,50,"BOOT_dispose WRONG",0xf800,0xffff);
  PutString(0,50,"BOOT_dispose OK",0xf800,0xffff);
  SD_List();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -