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?