Estoy intentando interconectar un SDHC de 8GB con el controlador STM32L0 a través de SPI.
Siguió este tutorial.
Como sugiere este , seguí la secuencia de comandos de la siguiente manera :
-
CMD0
arg:0x0
, CRC:0x95
(respuesta:0x01
) -
CMD8
arg:0x000001AA
, CRC:0x87
(respuesta:0x01
)
Estoy enviando algunos relojes con CS Activado y Desactivado entre estos comandos como se explica aquí .
De alguna manera, obtengo la respuesta de CMD0
como 0x01
pero CMD8
siempre responde con 0xFF
.
A continuación se muestra el código que estoy usando para iniciar mi tarjeta SD:
void SD_INIT(void){
CS_HIGH;
for(count = 0; count < 8; count++){
SPI_SEND_CMD_DUMMY();
}
CS_LOW;
for(count = 0; count < 8; count++){
SPI_SEND_CMD_DUMMY();
}
uint8_t txBuff[] = {0x40,0x00, 0x00, 0x00, 0x00, 0x95 };
HAL_SPI_TransmitReceive(&hspi2,txBuff,readBuff,6,100);
//count = 255; //Try 255 times..
for(count = 255;count>0;count--){
uint8_t dummy[] = {0xFF};
HAL_SPI_TransmitReceive(&hspi2,dummy,readBuff,1,100);
if(readBuff[0] == 0x01){
status = 1;
break;
}
}
for(count = 0; count < 8; count++){
SPI_SEND_CMD_DUMMY();
}
CS_HIGH;
for(count = 0; count < 8; count++){
SPI_SEND_CMD_DUMMY();
}
/*-------------------SDHC TRY----------------*/
if(status==1){
//status=0;
CS_LOW;
for(count = 0; count < 8; count++){
SPI_SEND_CMD_DUMMY();
}
//HIGH CAPACITY 0x000001AA
uint8_t tx1Buff[] = {0x48,0x00, 0x00, 0x01, 0xAA, 0x87 };
HAL_SPI_TransmitReceive(&hspi2,tx1Buff,readTempBuff,6,100);
//count = 255; //Try 255 times.. //10ms = 160000
for(count = 100;count>0;count--){
uint8_t dummy[] = {0xFF};
HAL_SPI_TransmitReceive(&hspi2,dummy,readTempBuff,1,100);
if(readTempBuff[0] == 0x05){ //Invalid Command
status = 3;
break;
}
}
for(count = 0; count < 8; count++){
SPI_SEND_CMD_DUMMY();
}
CS_HIGH;
for(count = 0; count < 8; count++){
SPI_SEND_CMD_DUMMY();
}
}
void SPI_SEND_CMD_DUMMY(void){
uint8_t txBuff = 0xFF;
HAL_SPI_Transmit(&hspi2,&txBuff,1,100);
}
La respuesta que estoy recibiendo en readTempBuff
es:
readTempBuff[0] : 0xFF
readTempBuff[1] : 0xFF
readTempBuff[2] : 0xFF
readTempBuff[3] : 0xFF
readTempBuff[4] : 0xFF