Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C by SendSDCCmd ( 14 years ago )
unsigned int SendSDCCmd(unsigned char cmd, unsigned int
address)
{
char resp;
unsigned char res_byte_l=0,res_byte_h=0,index;
unsigned int res_out;
unsigned int timeout = 8;
SDC_CS_0 //CS=0
Write_SPI(get_cmd(cmd)); //wyslij kod komendy
Write_SPI(address>>24); //najstarszy bajt argumentu
Write_SPI(address>>16); //kolejne bajty argumentu
Write_SPI(address>>8);
Write_SPI(address); //najmlodszy bajt argumentu
Write_SPI(get_crc(cmd)); //wyslij CRC
resp=get_rsp(cmd); //typ odpowiedzi karty
if(resp==R1 || resp==R1b)
{
while(timeout!=0)
{res_byte_l=ReadMedia(); //czekaj na odpowiedz
rozna od 0xFF
if(res_byte_l!=0xff)
break;
timeout--;}
}
else
if(resp == R2)
{ReadMedia();
res_byte_l = ReadMedia();
res_byte_h = ReadMedia();}
if(resp == R1b) //dodatkowo czekaj na
zwolnienie linii danych dla R1b
{
res_byte_l = 0x00;
for(index =0; index < 0xFF && res_byte_l == 0x00; index++)
{timeout = 0xFFFF;
do
{res_byte_l = ReadMedia();
timeout--;
}while((res_byte_l == 0x00) && (timeout !=
0));
}
}
if(get_tdata(cmd)==NODATA) //nie sa spodziewane
kolejne dane
{SDC_CS_1 //CS=1
Write_SPI(0xff);}
if(resp == R1 || resp == R1b)
return(res_byte_l); //potwierdzenie 1 bajtowe
if(resp == R2) //poteirdzenie 2 bajtowe,
lub 3 bajtowe
{res_out=res_byte_h;
res_out=res_out<<8;
res_out=res_out|res_byte_l;
return(res_out);}
}
Revise this Paste
Children: 53172