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

📄 sdio.c

📁 近期完成的一个项目
💻 C
📖 第 1 页 / 共 4 页
字号:
 unsigned char *buf, 
 unsigned char size  
 )
{
unsigned short crc;
unsigned char *data1 = buf;

crc = 0;
while (size )
{
crc = crc16_table[((crc >> 8) ^ *(data1++)) & 0xFF] ^ (crc << 8);
size--;
}

return crc;
}
/*unsigned char insert_crc7 (unsigned char *path_trace_message,int cnt)
{
  unsigned char crc7_accum = 0;
  int i;
  unsigned char j;
  path_trace_message[0] &= ~0x7f; 
	for (i=0;i<=cnt;++i)
  {
    crc7_accum =crc7_syndrome_table[(crc7_accum << 1)^path_trace_message[i]];
  }
  path_trace_message[0] ^= crc7_accum;
  path_trace_message[0]=(path_trace_message[0]<<1)|1;
  j=path_trace_message[0];
  return(path_trace_message[0]);
}*/

/*unsigned int CRC16(unsigned char * chr, int cnt)
{
   unsigned int i,j;
   //unsigned char crc_16;
   unsigned int  crc_16=0xffff;
   for(i=0;i<cnt;i++)
  {
   crc_16=crc_16^((unsigned int)chr[i]);
   for (j=0;j<8;j++)
   {
     if(crc_16&0x0001)
    {
     crc_16=(crc_16>>1)^0x8408;
    }
    else
    crc_16=(crc_16>>1);
   }
  }
   crc_16= ~crc_16;
   return(crc_16);
}*/

void  Data_Write(void)
{
  Write_Byte_SD(Adc_X);
  Write_Byte_SD(Adc_Y);
}

void Timing_Sync(void)
{
  while(SD_CLK_PIN==0);
  while(SD_CLK_PIN==1);
  while(SD_CLK_PIN==0);                   
  while(SD_CLK_PIN==1);
  while(SD_CLK_PIN==0);
  while(SD_CLK_PIN==1);
}

void Data_Rv_Sync(void)
{
  while(SD_DATA0_PIN==1);
  while(SD_CLK_PIN==0);
  while(SD_CLK_PIN==1);
  while(SD_CLK_PIN==0);                   
  //while(SD_CLK_PIN==1);
}

void Data_Wr_Sync(void)
{
  while(SD_CLK_PIN==0);
  while(SD_CLK_PIN==1);
  while(SD_CLK_PIN==0); 
  while(SD_CLK_PIN==1);
  while(SD_CLK_PIN==0); 
  SD_DATA0_PIN=0;
  while(SD_CLK_PIN==1);
}

void Slave_Mode_Sel(void)
{
}

void Response_to_CMD0(void)
{
   Slave_Mode_Sel();
}

void Response_to_CMD3(void)                    //R6 response
{   
   P2MDOUT=0x02;
   Buffer_send[0]=0x03;                        //command index
   Buffer_send[1]=RCA_REG[0];                  
   Buffer_send[2]=RCA_REG[1];
   Buffer_send[3]=0x00;                                        
   Buffer_send[4]=0x00;
   Buffer_send[5]=0xeb;
   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]);                //card status,0 stand for no error
   Write_Res_SD(Buffer_send[4]);
   Write_Res_SD(Buffer_send[5]);
   while(SD_CLK_PIN==0);
   SD_CMD_PIN=1;
   SD_CMD_PIN=1;
   P2MDOUT&=~0x02;
}

void Response_to_CMD5(void)                    //R4 response
{
   P2MDOUT=0x02;                               //output mode
   Buffer_send[0]=0x3f;                        //command index
   Buffer_send[1]=0x90;                        //card status
   Buffer_send[2]=OCR_REG[0];
   Buffer_send[3]=OCR_REG[1];                  //ready for data                   
   Buffer_send[4]=OCR_REG[2];
   Buffer_send[5]=0xff;
   Timing_Sync();
   Write_Res_SD(Buffer_send[0]);
   Write_Res_SD(Buffer_send[1]);
   Write_Res_SD(Buffer_send[2]);               //0xff
   Write_Res_SD(Buffer_send[3]);               //0xC0
   Write_Res_SD(Buffer_send[4]);               //0xff
   Write_Res_SD(Buffer_send[5]);               //reserved bits
   while(SD_CLK_PIN==0);
   SD_CMD_PIN=1;
   SD_CMD_PIN=1;
   P2MDOUT&=~0x02;
   Slave_state=Initialization_State;
}

void Response_to_CMD7(void)                   //R1b Response
{
   P2MDOUT=0x02;
   Buffer_send[0]=0x01;                       //command index
   Buffer_send[1]=0x00;                       //card status
   Buffer_send[2]=0x00;
   Buffer_send[3]=0x01;                       //ready for data                   
   Buffer_send[4]=0x00;
   Buffer_send[5]=0x7B;
   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_CMD_PIN=1;
   P2MDOUT&=~0x02;
   //Slave_state=Command_State;
}

void Response_to_CMD15(void)
{
   Slave_state=Inactive_State;
}

void Response_to_CMD52(void)
{  
  //SD_BUSY_LED=0;
  P2MDOUT=0x02;
  Reg_address=(CMD_R[3]+CMD_R[2]);
  if(((CMD_R[1]&0x80)==0))                       //Data Read Command,R/W FLAG
 { 
   switch (Reg_address)
   {
   case 0x00:                                   //GET CCRV 0X00
   if((CMD_R[1]&0x70)==0x00)                    //get function number
   {
   Buffer_send[0]=0x34;                         //command index
   Buffer_send[1]=0x00;                       
   Buffer_send[2]=0x00;
   Buffer_send[3]=0x20;                                        
   Buffer_send[4]=0x11;
   Buffer_send[5]=0x81;
   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:                                   //GET CCRV 0X08  CARD CAPACITY REG
   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]=0x40;
   Buffer_send[5]=0x69;
   //Buffer_send[4]=0x42;
   //Buffer_send[5]=0x4d;
   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                                        //read 0x08 of function 1,DLL set
   {                                   
   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]=crc7_CMD52[1];
   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 0x02:                                
   if((CMD_R[1]&0x70)==0x00)
   {
   if(CMD_R[2]==0x00)                          //GET CCRV 0X01 SD REV
   { 
   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;
   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 if(CMD_R[2]==0x00)
   else                                        //GET FBR DEVICE CODE
   {
   Buffer_send[0]=0x34;                        //command index
   Buffer_send[1]=0x00;                      
   Buffer_send[2]=0x00;
   Buffer_send[3]=0x20;                                          
   //Buffer_send[4]=0x00;
   //Buffer_send[5]=0xa1;
   Buffer_send[4]=0x01;                       //support standard uart
   Buffer_send[5]=0xb3;
   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
   }//end if((CMD_R[1]&0x70)==0x00)
   break;
   case 0x12:                                 //GET CCRV 0X09 COMMON CIS BYTE1
   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]=0x00;
   Buffer_send[5]=0xa1;
   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 0x14:                                  //GET CCRV 0X0A COMMON CIS BYTE2
   if((CMD_R[1]&0x70)==0x00)
   {
 
    if(CMD_R[2]==0x00)
    {   
     Buffer_send[0]=0x34;                        
     Buffer_send[1]=0x00;                      
     Buffer_send[2]=0x00;
     Buffer_send[3]=0x20;                                          
     Buffer_send[4]=0x10;
     Buffer_send[5]=0x93;
     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 if(CMD_R[2]==0x00)
     else                                        //0X02+0X12,GET FBR CIS BYTE 1
    {
	 Buffer_send[0]=0x34;                        //command index
     Buffer_send[1]=0x00;                      
     Buffer_send[2]=0x00;
     Buffer_send[3]=0x20;                                          
     Buffer_send[4]=0x00;
     Buffer_send[5]=0xa1;
     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   
   }//end if((CMD_R[1]&0x70)==0x00)
  else                                           //read uart receive count
   {
     Buffer_send[0]=0x34;                        //command index
     Buffer_send[1]=0x00;                      
     Buffer_send[2]=0x00;
     Buffer_send[3]=0x20;                                          
     Buffer_send[4]=Uart_Reg_Rv_Count;
     Buffer_send[5]=crc7_CMD52[Uart_Reg_Rv_Count];
	 Uart_Reg_Rv_Count=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;  
   }
   break;
   case 0x16: 
   if((CMD_R[1]&0x70)==0x00)
   {
   if(CMD_R[2]==0x00)                          //GET CCRV 0X0B COMMON CIS BYTE3
   {   
   Buffer_send[0]=0x34;                        //command index
   Buffer_send[1]=0x00;                      
   Buffer_send[2]=0x00;
   Buffer_send[3]=0x20;                                          
   Buffer_send[4]=0x00;
   Buffer_send[5]=0xa1;
   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]);

⌨️ 快捷键说明

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