Autor Tema: Problema con la Re escritura en SD Card (secure digital)  (Leído 1403 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado astoroth_

  • PIC10
  • *
  • Mensajes: 20
Problema con la Re escritura en SD Card (secure digital)
« en: 20 de Junio de 2006, 22:38:46 »
Hola a todos, he planteado esta cuestión en el foro de DSPICs pero de momento no he obtenido solución alguna. Mi problema radica en que cuando escribo un bloque de 512 bytes en la SD, la tarjeta no me deja volver a escribir nada. Lo que más me intriga es que si que consigo escribir los primeros 512 bytes, además, el código lo he comparado con más de 10 códigos distintos (para distintos microcontroladores) y todos siguen los mismos pasos. El tamaño de bloque está fijado a 512 bytes previamente tal y como pone en las especificaciones de SanDisk. Os adjunto mi código.

Código: [Seleccionar]
unsigned char SD_WriteBlock(unsigned long addr, unsigned char *buf)
{
unsigned int i;
unsigned char status;

unsigned char CMD24_WRITE_SINGLE_BLOCK[] = {0x18,0x00,0x00,0x00,0x00,0xFF}; //antes 24
CMD24_WRITE_SINGLE_BLOCK[1] = ((addr & 0xFF000000) >> 24);
CMD24_WRITE_SINGLE_BLOCK[2] = ((addr & 0x00FF0000) >> 16);
CMD24_WRITE_SINGLE_BLOCK[3] = ((addr & 0x0000FF00) >> 8);
CMD24_WRITE_SINGLE_BLOCK[4] = ((addr & 0x000000FF));

SD_Enable();

// Send the read command
status = SD_WriteCommand(CMD24_WRITE_SINGLE_BLOCK);
if(status != 0)
{
// ABORT: invalid response for read single command
return 1;
}
        for(i=0;i<1;++i)
SPIRead();

        SPIWrite(0xFE);

// Escribo unas efes de prueba
for(i = 0; i < BLOCK_SIZE; i++)
{   
               SPIWrite('f');
}

        SPIWrite(0xFF);
        SPIWrite(0xFF);
        SPIRead();
       
        while(SPIRead()!=0xFF);  // When busy 0x00

SD_Disable();
   
SPIWrite(0xFF);

return 0;
}

Gracias de antemano

Javio


 

anything