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

📄 sdio.c

📁 近期完成的一个项目
💻 C
📖 第 1 页 / 共 4 页
字号:
   //Buffer_send[4]=0xc4;
   //Buffer_send[5]=0xa3;
   Buffer_send[4]=Uart_Reg_IIR;
   Buffer_send[5]=crc7_CMD52[Uart_Reg_IIR];
   Uart_Reg_IIR=0;
   Timing_Sync();
   Write_Res_SD(Buffer_send[0]);
   Write_Res_SD(Buffer_send[1]);
   Write_Res_SD(Buffer_send[2]);
   Write_Res_SD(Buffer_send[3]);
   Write_Res_SD(Buffer_send[4]);
   Write_Res_SD(Buffer_send[5]); 
   while(SD_CLK_PIN==0);
   SD_CMD_PIN=1;
   //SD_DATA1_PIN=1;
   }// end if
   break;
   default:
   break;
   }//end switch 
   }// endif
  else                                         //Data Write Command
 {
   switch (Reg_address)
   {
   case 0x0E:                                  //0x00+0x0e,write ox07 bus width
   if((CMD_R[1]&0x70)==0x00)
   {
   Buffer_send[0]=0x34;                        //command index
   Buffer_send[1]=0x00;                      
   Buffer_send[2]=0x00;
   Buffer_send[3]=0x20;                                          
   Buffer_send[4]=0x80;
   Buffer_send[5]=0x23;
   Timing_Sync();
   Write_Res_SD(Buffer_send[0]);
   Write_Res_SD(Buffer_send[1]);
   Write_Res_SD(Buffer_send[2]);
   Write_Res_SD(Buffer_send[3]);
   Write_Res_SD(Buffer_send[4]);
   Write_Res_SD(Buffer_send[5]);
   while(SD_CLK_PIN==0);
   SD_CMD_PIN=1; 
   XBR1|=0x80;}//endif 
   break; 
   case 0x04:                                  //0X00+0X04,Enable function 1
   if((CMD_R[1]&0x70)==0x00)
   {
   Buffer_send[0]=0x34;                        //command index
   Buffer_send[1]=0x00;                      
   Buffer_send[2]=0x00;
   Buffer_send[3]=0x20;                                          
   Buffer_send[4]=0x02;
   Buffer_send[5]=0x85;
   Timing_Sync();
   Write_Res_SD(Buffer_send[0]);
   Write_Res_SD(Buffer_send[1]);
   Write_Res_SD(Buffer_send[2]);
   Write_Res_SD(Buffer_send[3]);
   Write_Res_SD(Buffer_send[4]);
   Write_Res_SD(Buffer_send[5]); 
   while(SD_CLK_PIN==0);
   SD_CMD_PIN=1;
   }// endif 
   else                                        //write 0x02 of function 1,FCR set
   {
   Buffer_send[0]=0x34;                        //command index
   Buffer_send[1]=0x00;                      
   Buffer_send[2]=0x00;
   Buffer_send[3]=0x20;                                          
   //Buffer_send[4]=0xcf;
   //Buffer_send[5]=0x05;
   Buffer_send[4]=CMD_R[4];
   Buffer_send[5]=crc7_CMD52[CMD_R[4]];
   Timing_Sync();
   Write_Res_SD(Buffer_send[0]);
   Write_Res_SD(Buffer_send[1]);
   Write_Res_SD(Buffer_send[2]);
   Write_Res_SD(Buffer_send[3]);
   Write_Res_SD(Buffer_send[4]);
   Write_Res_SD(Buffer_send[5]); 
   while(SD_CLK_PIN==0);
   SD_CMD_PIN=1;
   }// end else   
   break;
   case 0x06:                                  //write 0x03 of function 1,LCR set
   if((CMD_R[1]&0x70)==0x10)
   {
   Buffer_send[0]=0x34;                        //command index
   Buffer_send[1]=0x00;                      
   Buffer_send[2]=0x00;
   Buffer_send[3]=0x20;                                          
   //Buffer_send[4]=0x03;
   //Buffer_send[5]=0x97;
   Buffer_send[4]=CMD_R[4];
   Buffer_send[5]=crc7_CMD52[CMD_R[4]];
   Timing_Sync();
   Write_Res_SD(Buffer_send[0]);
   Write_Res_SD(Buffer_send[1]);
   Write_Res_SD(Buffer_send[2]);
   Write_Res_SD(Buffer_send[3]);
   Write_Res_SD(Buffer_send[4]);
   Write_Res_SD(Buffer_send[5]); 
   while(SD_CLK_PIN==0);
   SD_CMD_PIN=1;
   }// endif   
   break;
   case 0x02:                                  //write 0x01 of function 1,IER set
   if((CMD_R[1]&0x70)==0x10)
   {   
   Buffer_send[0]=0x34;                        //command index
   Buffer_send[1]=0x00;                      
   Buffer_send[2]=0x00;
   Buffer_send[3]=0x20;                                          
   Buffer_send[4]=CMD_R[4];
   Buffer_send[5]=crc7_CMD52[CMD_R[4]];
   Timing_Sync();
   Write_Res_SD(Buffer_send[0]);
   Write_Res_SD(Buffer_send[1]);
   Write_Res_SD(Buffer_send[2]);
   Write_Res_SD(Buffer_send[3]);
   Write_Res_SD(Buffer_send[4]);
   Write_Res_SD(Buffer_send[5]);
   while(SD_CLK_PIN==0);
   SD_CMD_PIN=1;
   }// endif  
   break;
   case 0x00:                                  //write 0x00 of function 1,DLL set
   if((CMD_R[1]&0x70)==0x10)
   {
   Buffer_send[0]=0x34;                        //command index
   Buffer_send[1]=0x00;                      
   Buffer_send[2]=0x00;
   Buffer_send[3]=0x20;                                          
   //Buffer_send[4]=0x60;
   //Buffer_send[5]=0xa1;
   Buffer_send[4]=CMD_R[4];
   Buffer_send[5]=crc7_CMD52[CMD_R[4]];
   Timing_Sync();
   Write_Res_SD(Buffer_send[0]);
   Write_Res_SD(Buffer_send[1]);
   Write_Res_SD(Buffer_send[2]);
   Write_Res_SD(Buffer_send[3]);
   Write_Res_SD(Buffer_send[4]);
   Write_Res_SD(Buffer_send[5]);
   while(SD_CLK_PIN==0);
   SD_CMD_PIN=1;
   }
   break; 
   case 0x08:                                  //write 0x04 of function 1,DLL set
   if((CMD_R[1]&0x70)==0x10)
   {
   Buffer_send[0]=0x34;                        //command index
   Buffer_send[1]=0x00;                      
   Buffer_send[2]=0x00;
   Buffer_send[3]=0x20;                                          
   //Buffer_send[4]=0x01;
   //Buffer_send[5]=0xb3;
   Buffer_send[4]=CMD_R[4];
   Buffer_send[5]=crc7_CMD52[CMD_R[4]];
   Timing_Sync();
   Write_Res_SD(Buffer_send[0]);
   Write_Res_SD(Buffer_send[1]);
   Write_Res_SD(Buffer_send[2]);
   Write_Res_SD(Buffer_send[3]);
   Write_Res_SD(Buffer_send[4]);
   Write_Res_SD(Buffer_send[5]);
   while(SD_CLK_PIN==0);
   SD_CMD_PIN=1;
   }
   else                                        //write 0x04 of cccr,int enable
   {
   Buffer_send[0]=0x34;                        //command index
   Buffer_send[1]=0x00;                      
   Buffer_send[2]=0x00;
   Buffer_send[3]=0x20;                                          
   Buffer_send[4]=CMD_R[4];
   Buffer_send[5]=crc7_CMD52[CMD_R[4]];
   Timing_Sync();
   Write_Res_SD(Buffer_send[0]);
   Write_Res_SD(Buffer_send[1]);
   Write_Res_SD(Buffer_send[2]);
   Write_Res_SD(Buffer_send[3]);
   Write_Res_SD(Buffer_send[4]);
   Write_Res_SD(Buffer_send[5]);
   while(SD_CLK_PIN==0);
   SD_CMD_PIN=1;
   }
   break; 
   case 0x10:                                  //write 0x08 of function 1,DLL set
   if((CMD_R[1]&0x70)==0x10)
   {
   Buffer_send[0]=0x34;                        //command index
   Buffer_send[1]=0x00;                      
   Buffer_send[2]=0x00;
   Buffer_send[3]=0x20;                                          
   //Buffer_send[4]=0x01;
   //Buffer_send[5]=0x85;
   Buffer_send[4]=CMD_R[4];
   Buffer_send[5]=crc7_CMD52[CMD_R[4]];
   Timing_Sync();
   Write_Res_SD(Buffer_send[0]);
   Write_Res_SD(Buffer_send[1]);
   Write_Res_SD(Buffer_send[2]);
   Write_Res_SD(Buffer_send[3]);
   Write_Res_SD(Buffer_send[4]);
   Write_Res_SD(Buffer_send[5]);
   while(SD_CLK_PIN==0);
   SD_CMD_PIN=1;
   }
   break; 
   default:
   break;
   }//end switch	
   }//end else
   SD_CMD_PIN=1;
   P2MDOUT&=~0x02;
}

void Response_to_CMD53(void)
{
  SD_CMD_PIN=1;
  P2MDOUT|=0x02;
  Uart_Reg_Rv_Count=0;
  Reg_address=(CMD_R[3]+CMD_R[2]);
  if(((CMD_R[1]&0x80)==0))                      //Data Read Command
 { 
   switch(Reg_address)
   {
   case 0x00:                                   //cmd53 read byte                                    
   if((CMD_R[1]&0x70)==0x10)                    //Function 1
   {  
   SD_BUSY_LED^=1;
   SD_DATA1_PIN=1;
   Uart_Reg_IIR=0xc1;
   Int_Pending=0x00;
   Buffer_send[0]=0x35; 
   Buffer_send[1]=0x00;                         //Command index equas 53
   Buffer_send[2]=0x00;                      
   Buffer_send[3]=0x20;                       
   Buffer_send[4]=CMD_R[4];     
   Buffer_send[5]=crc7_CMD53[CMD_R[4]];
   P2MDOUT|=0x04;
   Data_Wr_Sync();
   Write_Res_SD_CMD53(Buffer_send[0],Data_Send[0]);
   Write_Res_SD_CMD53(Buffer_send[1],Data_Send[1]);
   Write_Res_SD_CMD53(Buffer_send[2],Data_Send[2]);
   Write_Res_SD_CMD53(Buffer_send[3],Data_Send[3]);
   Write_Res_SD_CMD53(Buffer_send[4],Data_Send[4]);
   Write_Res_SD_CMD53(Buffer_send[5],Data_Send[5]);
   while(SD_CLK_PIN==0); 
   SD_DATA0_PIN=1; 
   SD_CMD_PIN=1;
   P2MDOUT&=~0x04;
   timer_index=1;
   //Acc_Request_Flag=1;
   break;                                              
   }//end if
   }//end switch
  }//endif
 else                                         //Data Write Command
 {  
   switch (Reg_address)
  {
   case 0x00:                                  //pc write data
   if((CMD_R[1]&0x70)==0x10)
   { 
   Buffer_send[0]=0x35;                        //Command index equas 53
   Buffer_send[1]=0x00;                        //reserved bits
   Buffer_send[2]=0x00;                        //reserved bits
   Buffer_send[3]=0x20;                        //current state
   Buffer_send[4]=CMD_R[4];
   Buffer_send[5]=crc7_CMD53[CMD_R[4]];
   Timing_Sync(); 
   Write_Res_SD(Buffer_send[0]);
   Write_Res_SD(Buffer_send[1]);
   Write_Res_SD(Buffer_send[2]);
   Write_Res_SD(Buffer_send[3]);
   Write_Res_SD(Buffer_send[4]);
   Write_Res_SD(Buffer_send[5]);
   while(SD_CLK_PIN==0);
   SD_CMD_PIN=1;
   Data_Rv_Sync();
   for(index=0;index<CMD_R[4];index++)
   {
    Data_Receive[index]=Read_Byte_SD();
   }
   if(Data_Receive[0]==0x32)
   {      
    ADC();
    crc_16_result=sp_crc16(Data_Send,4);
    Data_Send[4]=crc_16_result/256;
    Data_Send[5]=crc_16_result%256;
    Uart_Reg_IIR=0xcc;
    Int_Pending=0x02;
    Uart_Reg_Rv_Count=0x04;
    SD_DATA1_PIN=0;
   }
   }
   break;
  }//end switch
 }//end else 
   SD_CMD_PIN=1;
   P2MDOUT&=~0x02;
}

void Waiting_CMD(void)
{
   while(SD_CMD_PIN==0);
   while(SD_CMD_PIN==1);
   while(SD_CLK_PIN==0);
   CMD_R[0]=Read_CMD_SD();
   CMD_R[1]=Read_CMD_SD();
   CMD_R[2]=Read_CMD_SD();
   CMD_R[3]=Read_CMD_SD();
   CMD_R[4]=Read_CMD_SD();
   CMD_R[5]=Read_CMD_SD();
  switch(CMD_R[0]&0x3F)
   {
    case 0:                                      
    //Response_to_CMD0();
    break;
	case 3:                                  //Send Relative Address           
    Response_to_CMD3();
	break;
	case 5:                                 //Send Operation Condition                                           
    Response_to_CMD5();
    break;
	case 7:                                 //Send card status                           
    Response_to_CMD7();
    break;
	case 15:                                //Set to Inactive State
	Response_to_CMD15();
    break;
	case 52:
    Response_to_CMD52();
	break;
	case 53:
  	Response_to_CMD53();
	break;
	default: 
    break;
   }
   return;
}

void main()
{  
   unsigned int crc1,i;
   Watchdog_close();                      
   Oscillator_Init();                                   
   IO_Init();                                            
   //Timer_Init();                     
   ADC_Init();                           
   //Interrupts_Init(); 
  /* Buffer_send[0]=0x74; 
   Buffer_send[1]=0x90;                        //Command index equas 53
   Buffer_send[2]=0x00;                        //reserved bits
   Buffer_send[3]=0x02;                        //reserved bits
   Buffer_send[4]=0x00;                        //current state
   //Buffer_send[5]=0x06;                      //read or write data
   Buffer_send[5]=CRC7(Buffer_send,5);
   crc1=Buffer_send[5];*/
   //debug_info=0;
  while(1)
   {  
     /*if(debug_info!=0)
    {
      timer_index=0;
      for(i=0;i<debug_info;i++)
      {
       delay_s(1);
       SD_BUSY_LED=0;
       delay_s(1);
       SD_BUSY_LED=1;
      }//end for
       debug_info=0;
    }//endif*/
   Waiting_CMD(); 
   }
}//end main

⌨️ 快捷键说明

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