Außerhalb der main Funktion deklariere ich IAP_LOCATION als
Funktionspointer.
In der Funktion wird dem Funktionspointer dann die Addresse 0x7FFFFFF1
wie im Datenblatt beschreiben zugeweisen. Dann rufe ich die Funktion mit
"command" als Parameter auf.
52 sollte der Code für Erase Sectors sein. Also Sektor 0-7 löschen. Der
Chip läuft mit 70MHz PLL 5x und 14MHz Quarz.
Prinzipiel sollte sich das Programm doch mit diesem Aufruf selber
löschen. Habe es vorher auch mit 51 (Copy Ram To Rom) probiert und den
Werten hinter den "//", aber auch ohne Erfolg.
Was mache ich falsch?
Grüße,
Bernd
Hallo
Bin im Moment nicht gearde im Büro um Nachzusehen, aber mir schwebt es
so vor, dass man vor jedem Schreibvorgang prepare aufrufen sollte.
Gruss, Daniel
Danke,
ich habe da wohl nicht gründlich genug gelesen. Das reine Programmieren
klappt jetzt.
1
command[0]=50;
2
command[1]=7;
3
command[2]=7;
4
iap_entry(command,result);
5
DbgTraceLong(30,result[0]);
6
7
command[0]=51;// copy ram to rom
8
command[1]=0x7000;
9
command[2]=((unsignedlong)(&write)&0xFFFFFFFC);
10
command[3]=512;
11
command[4]=70000;
12
iap_entry(command,result);
13
DbgTraceString(0xB,"AfterFlashing");
14
DbgTraceLong(30,result[0]);
Jetzt stellt sich noch die Frage, wo sind Konstanten wie
"SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION" definiert?
Aber das Löschen funktionniert noch nicht.
[c]
command[0]=50;
command[1]=7;
command[2]=7;
iap_entry(command, result);
DbgTraceLong(30, result[0]); // gibt 0 zurück
DbgTraceString(0xB, "BeforeEraseSector");
command[0]=52; //erase sector
command[1]=7; // startsector 7
command[2]=7; // endsector 7
command[3]=70000;
iap_entry(command, result);
DbgTraceString(0xB, "AfterErase"); // wird nicht mehr ausgeführt?!?!?
[/c)
Das Vorbereiten mit Prepare wird mit 0 als Ergebnis abgeschlossen, wenn
ich dann allerding Erase Sector (52) mit Startsektor 7 und Endsektor 7
aufrufe, kehrt die Funktion nicht mehr zurück. Die Schreibfunktion (51)
hingegen terminiert nach 1 ms.
Bernd
Auch wenn ich es nicht verstehe. Nach dem ich einmal alles ausgeschaltet
läuft es jetzt. Sollte sich der LPC irgendwie weggehangen haben?
Nun ja, auf jeden fall läufts. Danke für den Tip.
Danke,
Bernd
Ich arbeite mit dem LPC2124, deshalb kann ich es dir jetzt nicht sagen,
wie es beim LPC2103 aussieht. Für den LPC2124 ist es sehr wichtig die
Version 1.66 zu verwenden. Die Version 1.63 ist für die ISP
Programmierung etwas fehlerhaft. Ein Upload kann man mit dem Philips ISP
Utility machen und ist sehr gut Dokumentiert.
Wenn wir ins Flash etwas schreiben, schalten wir immer den PLL aus und
gehen mit dem Speed zurück auf die 12MHz. Irgendwo hatte ich mal
gelesen, dass man dies so machen soll.
Gruss, Daniel
Beim LPC2124 war der bootloader im Flash und konnte mit der o.g. Utility
auf einen neueren Stand gebracht werden.
Der LPC2101/2/3 hat den bootloader in einem ROM Bereich, kein Update,
kein versehentliches Loeschen moeglich.
Robert