LPC2103 In Application Flash Programming?

Gast #610546
Lesenswert?
• ▲
▼
Hallo,

irgendwie will bei mir die Flashprogrammierung aus der Anwendung heraus 
nicht funktionnieren. hier mal ein Ausschnitt aus dem Programm.
1
#define IAP_LOCATION 0x7ffffff1
2
typedef void (*IAP)(unsigned int [],unsigned int[]);
3
IAP iap_entry;
4

5
 int main (void) { 
6

7
  int i;
8

9
  unsigned int command[5];
10
  unsigned int result[2];
11
  unsigned char write[]={0,1,2,3,4,5,6,7,8,9};
12
  Init();     
13
  command[0]=52;
14
  command[1]=0;//0x7000;
15
  command[2]=7;//((unsigned long)(&write)&0xFFFFFFFC);
16
  command[3]=70000;//256;
17
  command[4]=70000;
18
  iap_entry=(IAP) IAP_LOCATION;
19
  iap_entry(command, result);

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
Gast #610982
Lesenswert?
• ▲
▼
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]=((unsigned long)(&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
#611808
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.