¡No se puede escribir más de un byte en el flash SST39SF010A!

2

Utilizo el código compositor para programar el DSP TMS320C31 (a través de MPSD) para escribir en el SST39SF010A flash. Puedo escribir con éxito un byte en cualquier ubicación del flash siguiendo las secuencias de "Borrado de chip" y luego de "Algoritmo de programa de byte" mencionadas en la hoja de datos.

El problema es que cuando quiero escribir más de un byte en diferentes ubicaciones, solo se escribe el primer byte y el resto no. Agregué retrasos entre escrituras pero ninguna diferencia.

¿Cuál es la causa de este problema? Busqué controladores (algoritmos de programación) para este flash pero no pude encontrarlos.

Actualización: 21/7/2013

  • Primero:

Este es el código que escribimos para programar el flash:

void main()  {

volatile unsigned int * start_flash = (volatile unsigned int *)0x00001000;   
      volatile unsigned int * end_flash = (volatile unsigned int *)0x0001ffff;

      volatile unsigned char * flash_addr1 = (volatile unsigned char *)0x005555;    
      volatile unsigned char * flash_addr2 = (volatile unsigned char *)0x002aaa;
      volatile unsigned char * flash_addr3 = (volatile unsigned char *)0x005555; 
      volatile unsigned char * flash_addr4 = (volatile unsigned char *)0x010000;

      volatile unsigned int x = 0;     

          // Chip Erase

        * flash_addr1 = 0xaa;    
        * flash_addr2 = 0x55;      
        * flash_addr1 = 0x80;    
        * flash_addr1 = 0xaa;
        * flash_addr2 = 0x55;
        * flash_addr1 = 0x10; 

        // Delay
        for(x=0;x<=100000;x++);          

        // Byte Program

        * flash_addr1 = 0xaa;    
        * flash_addr2 = 0x55;
        * flash_addr3 = 0xa0;  

        // Data in the first address

        * (start_flash) = 0xba;

        for(x=0;x<=100000;x++); 

       // Data in the following address

        * (start_flash+1) = 0xab;

        while(1);
  }

"BA" está escrito correctamente en la primera dirección, pero "AB" no lo está.

  • Segundo:

Estamos utilizando un FPGA en el sistema entre el DSP y el Flash (y todos los demás periféricos del sistema). Los datos y la dirección del DSP se pasan por alto a través del FPGA al Flash, y las señales de control se generan desde el FPGA. Creo que no hay problema en generar las señales de control ya que podemos escribir un byte con éxito, ¿es correcto?

    
pregunta Abdella

1 respuesta

1

Se resolvió el problema y me gustaría compartir la solución:

Protección de datos de software

Esta función está disponible en algunos flashes que requieren una secuencia de software al comienzo de cada ciclo de escritura para que se pueda realizar una escritura. Para habilitar la función de protección de datos del software, se debe realizar una serie de comandos de tres escrituras a direcciones específicas con datos específicos. Una vez establecido, el mismo código de 3 bytes debe comenzar cada solicitud de escritura. Esta función está habilitada permanentemente en el flash que estoy usando.

Entonces, la solución es agregar los siguientes comandos antes de cualquier operación de escritura de bytes, no solo la primera:

    * flash_addr1 = 0xaa;    
    * flash_addr2 = 0x55;
    * flash_addr3 = 0xa0;  
    
respondido por el Abdella

Lea otras preguntas en las etiquetas