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