Autor Tema: Mmemoria Flash PIC24  (Leído 1477 veces)

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

Desconectado Rikr09

  • PIC16
  • ***
  • Mensajes: 112
Mmemoria Flash PIC24
« en: 21 de Agosto de 2012, 10:58:27 »
Buenas, estoy usando una memoria Flash SST25VF080B con un PIC24FJ128GA310. Ella escribo a partir de la dirección de memoria 4096, ya que el primer sector de ella (Sectores de 4K), se ha de emplear para almacenar temporalmente los datos de n sector en el momento que se vaya a borrar. Mi problema radica en que , cuando le quito la alimentación de voltaje al PIC y sobreescribo sobre las 10 primeras posiciones de memoria de ella, ya escritas, el resto de información que ya estaba guardado, se modifica, siendo que sobre él no he efectuado cambio alguno.


Agradezco su pronta ayuda, ya que esto me ha retrasado un poco en la realización de mis actividades.

Gracias

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Mmemoria Flash PIC24
« Respuesta #1 en: 21 de Agosto de 2012, 12:38:56 »
Pero para volver a escribir no debes borrar el sector?
No contesto mensajes privados, las consultas en el foro

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Mmemoria Flash PIC24
« Respuesta #2 en: 21 de Agosto de 2012, 15:26:18 »
Hay que tener algunas consideraciones en este tipo de memorias:

Lo que dice Suky es cierto, para que grabe correctamente la posicion de memoria debe estar en 0xFF y no se puede "limpiar" los bytes individualmente sino que se borran por bloques.

El metodo de grabación en tipo page program no debe exceder la pagina actual es decir cada pagina esta compuesta por 256 bytes, y cuando la memoria hace la transicion de 256 a 0 sobreescribe la direccion 0 de la pagina en la que se inició la grabación malogrando lo que antes estaba grabado, el chip no cambia de pagina automaticamente. Esto me dió buenos dolores de cabeza, pero en el datasheet esta indicado. Esto por lo menos ya lo he visto en SST25VF064C y 25LC1024, asi que se debe grabar byte a byte.

Saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Rikr09

  • PIC16
  • ***
  • Mensajes: 112
Re: Mmemoria Flash PIC24
« Respuesta #3 en: 21 de Agosto de 2012, 16:35:37 »
De antemano agradezco sus respuestas.

Ahora bien, el método que empleo para escribir, automaticamente antes de realizar la escritura de los datos copia estos y los guarda en el primer sector de la memoria (0-4095) , luego los borra, escribe los nuevos datos junto con los que ya se habian copiado.

Este es el siguiente,
Código: [Seleccionar]
void ChangeStringSector( BYTE *Data, DWORD Addrs, UINT Length ){
    DWORD i, con2; BYTE data, band; UINT con1;

    con1 = i = band = 0;
    con2 = ( SelectSector(Addrs) * SECTOR_4K ) - SECTOR_4K;  // Inicio de Sector a leer

    // Lee la memoria y hace el cambio de datos
    for( i=con2;i<(SelectSector(Addrs) * SECTOR_4K); i++ ){
        data = FlashRead(i);
        if( Addrs == i ){
            while( Length-- ){ data = *Data++; FlashWrite(data, con1 ); con1++; i++; }
            band = 1;
        }
        if( band == 1 ){ band = 0; }else{ FlashWrite( data, con1 ); con1++; }
    }

    // Borra el Sector leido
    EraserSector( SelectSector(Addrs), 1 );

    // Escribe en el sector borrado los nuevos datos
    con1 = 0;
    for( i=con2;i<(SelectSector(Addrs) * SECTOR_4K);i++ ){
        FlashWrite( FlashRead(con1), i ); con1++;
    }
    //strlen(buffer);//me determina el tamao del buffer que he de implementar para ubicarlo en el lugar de Lenght
    // Borra el Sector utilizado como buffer
    EraserSector( 0, 1 );
}

El problema que detecto es que al momento de Reset el PIC, y leo lo que esta en la memoria, luego de haber 'sobreescrito' los primeros 10 bytes de la memoria (a partir de la 52096), la lectura empieza desplazada n+1, es decir se vuela el primer dato, es decri, hasta el dato numero 10 todo es perfecto, luego cuando empieza la segunda linea de 10 datos, no me lee el numero 11 sino el 12 y asi... de ahi adelante todo carece de coherencia...


Gracias por su atencion, interes y ayuda, Suky,  Kallitos y todos los q deseen colaborarme con esto.  :-/
« Última modificación: 21 de Agosto de 2012, 17:03:11 por Rikr09 »