Ich verwende Code Composer, um den TMS320C31 DSP (über MPSD) so zu programmieren, dass er in den SST39SF010A- Flash schreibt . Ich kann erfolgreich ein Byte an eine beliebige Stelle des Flashs schreiben, indem ich den im Datenblatt erwähnten Sequenzen "Chip Erase" und dann "Byte-Program Algorithm" folge.
Das Problem ist, wenn ich mehr als ein Byte an verschiedenen Stellen schreiben möchte, wird nur das erste Byte geschrieben und der Rest nicht. Ich habe Verzögerungen zwischen den Schreibvorgängen hinzugefügt, aber keinen Unterschied.
Was ist die Ursache für dieses Problem? Ich habe nach Treibern (Programmieralgorithmen) für diesen Blitz gesucht, aber nichts gefunden!
Aktualisierung: 21.7.2013
Dies ist der Code, den wir geschrieben haben, um den Flash zu programmieren:
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" wird korrekt in die erste Adresse geschrieben, "AB" jedoch nicht.
Wir verwenden ein FPGA im System zwischen dem DSP und dem Flash (und allen anderen Systemperipheriegeräten). Daten und Adresse des DSP werden durch das FPGA zum Flash umgeleitet, und Steuersignale werden vom FPGA generiert. Ich denke, es gibt kein Problem beim Generieren der Steuersignale, da wir in der Lage sind, ein Byte erfolgreich zu schreiben, ist das richtig?
Problem gelöst und ich möchte die Lösung teilen:
Software-Datenschutz
Diese Funktion ist bei einigen Flashs verfügbar, die zu Beginn jedes Schreibzyklus eine Softwaresequenz erfordern, damit ein Schreibvorgang durchgeführt werden kann. Um die Software-Datenschutzfunktion zu aktivieren, muss eine Reihe von drei Schreibbefehlen an bestimmte Adressen mit bestimmten Daten ausgeführt werden. Einmal eingestellt, muss jede Schreibanforderung mit dem gleichen 3-Byte-Code beginnen. Diese Funktion ist in dem von mir verwendeten Flash dauerhaft aktiviert.
Die Lösung besteht also darin, die folgenden Befehle vor jedem Byte-Schreibvorgang hinzuzufügen, nicht nur den ersten:
* flash_addr1 = 0xaa;
* flash_addr2 = 0x55;
* flash_addr3 = 0xa0;
Abdella
Benutzer19579
Abdella
Benutzer19579
Abdella
Benutzer19579
Abdella
Abdella