Problemas al inicializar la tarjeta SD con MSP430

1

He estado trabajando en algún código para hablar con una tarjeta SD con el MSP430. No puedo hacer que la tarjeta entre en modo inactivo, y en realidad estoy bastante perplejo en cuanto a por qué. He mirado la salida del microcontrolador con un analizador lógico y todo se ve como debería. He probado algunas tarjetas diferentes y adaptadores de tarjetas SD con los mismos resultados, por lo que parece un problema de código. Estoy inicializando la tarjeta SD con este código:

void MMC_initSPI(void){
//SOMI: 3.1
//SIMO: 3.0
//CLK: 3.2
//CS: 1.4
//chip select
SD_CSn_PxDIR|=SD_CSn_PIN;
SD_CSn_PxOUT|=SD_CSn_PIN;

UCB0CTL1 = UCSSEL_2 | UCSWRST;  // source USCI clock from SMCLK, put USCI in reset mode
UCB0CTL0 |= SPI_MODE_0;         // SPI MODE 0 - CPOL=0 CPHA=0
                                // note: UCCKPH is inverted from CPHA
//do I need to do this??
UCB0BR0 = LOBYTE(SPI_400kHz);   // set initial speed
UCB0BR1 = HIBYTE(SPI_400kHz);

P3SEL  |= BIT0 + BIT1 + BIT2;   // configure for USCI

UCB0CTL1 &= ~UCSWRST;           // release for operation
}

y luego enviar 0xFF dentro de un bucle for 11 veces (bien dentro de los 71 pulsos de reloj necesarios para despertar la tarjeta a nuevos datos) antes de usar la función mmc_GoIdle() , que es la siguiente:

char mmc_GoIdle(){
char response=0x01;
CS_LOW();

//Send Command 0 to put MMC in SPI mode
mmcSendCmd(MMC_GO_IDLE_STATE, 0, 0x95);
//Now wait for READY RESPONSE
if(mmcGetResponse()!=0x01)
return MMC_INIT_ERROR;

while(response==0x01)
{
  CS_HIGH();
spiSendByte(0xff);
CS_LOW();
mmcSendCmd(MMC_SEND_OP_COND,0x00,0xff);
response=mmcGetResponse();
}
CS_HIGH();
spiSendByte(0xff);
return (MMC_SUCCESS);
}

pero siempre vuelve %código%. ¿Alguien puede detectar algo obviamente malo? El analizador lógico me dice que está devolviendo MMC_INIT_ERROR y no 0x00 como debería. ¿Algunas ideas?

    
pregunta Jay Greco

1 respuesta

-3

Prueba con SPI_MODE_1 que funcionará.

    
respondido por el user77264

Lea otras preguntas en las etiquetas