📄 sdio.c
字号:
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 + -