Forum: Mikrocontroller und Digitale Elektronik LPC2468 - Wo ist unbelegter Flash-Speicher? - Wie per Befehl neustarten?


von Andreas S. (andy386)


Lesenswert?

Hallo!

Mein µC-Programm ist jetzt soweit lauffähig, dass u.a. Flash-Lesen und 
-Schreiben funktioniert. Ich habe jetzt die vorletzte Flashseite 
genommen. Um es schön zu machen, würde ich gerne wissen, ob die jew. 
Seiten bereits benutzt werden. Wie kann ich dass mit dem LPC2468 
realisieren?

Und gibt es einen Befehl (im C), um den Controller zu resetten bzw. 
dessen Programm neu auszuführen? Ich konnte in der Hilfe nix dazu 
finden...

von Oliver J. (skriptkiddy)


Lesenswert?

Andreas Schneider schrieb:
> Und gibt es einen Befehl (im C), um den Controller zu resetten bzw.
> dessen Programm neu auszuführen? Ich konnte in der Hilfe nix dazu
> finden...
Einen solchen Befehl kenne ich zwar nicht, aber ich würde einfach den 
Watchdog anwerfen, bzw. dessen Zurücksetzen unterbinden, wenn er denn 
schon laufen sollte.

Das führt garantiert innerhalb kürzester Zeit zum Reset.

von A. S. (telekatz)


Lesenswert?

Andreas Schneider schrieb:
> Mein µC-Programm ist jetzt soweit lauffähig, dass u.a. Flash-Lesen und
> -Schreiben funktioniert. Ich habe jetzt die vorletzte Flashseite
> genommen. Um es schön zu machen, würde ich gerne wissen, ob die jew.
> Seiten bereits benutzt werden. Wie kann ich dass mit dem LPC2468
> realisieren?

Wenn du deinem Linker nicht mitteilst, dass an der entsprechenden 
Adresse noch Flashspeicher ist, wird er ihn auch nicht benutzen und du 
hast ihn ganz für dich alleine.

von Andreas S. (andy386)


Lesenswert?

Danke, skriptkiddy!
Idee ist umgesetzt und läuft super!

@telekatz
Das klingt spannend... In der IDE habe ich leider nur die Option, die 
Startadresse hochzusetzen, einzelne Bereiche rauszunehmen klappt 
irgendwie nicht. Damit wäre aber der Bootsektor im beschreibbaren 
Bereich - ist das okay? oder kann ich bedenkenlos einen anderen Chip 
angeben?

scheint nicht so: "The Adress is not in Flash" (bei einem Chip mit 
kleinerem Flashspeicher)

von Andreas S. (andy386)


Lesenswert?

So, ich noch mal:
Angeblich nimmt der Linker nicht den obersten Flashsektor (Nr. 27). Hab 
testweise etwas reingeschrieben und das Programm neu aufgespielt, meine 
Informationen sind aber dennoch weg...

[edit]
oder liegt das daran, dass das Flash-Löschen Controllerseitig passiert? 
Oder wird der zu löschende Speicherbereich von der IDE benannt?

von A. S. (telekatz)


Lesenswert?

Wie programmierst du den Flash? Und welche IDE verwendest du?

von Andreas S. (andy386)


Lesenswert?

Naja, das macht soweit alles meine IDE, die HITOP5.
Ich speichere nur ein paar Sachen in einem einzigen Sektor.

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Andreas Schneider schrieb:
> Naja, das macht soweit alles meine IDE, die HITOP5.
Ist dort nicht auch die GNU-Toolchain im Hintergrund? Wenn ja, wird die 
Entwicklungsumgebung wohl intern ein tempörares Linker-Skipt erzeugen, 
deren Dateiname dann dem Linker übergeben wird. Falls man die Größe 
eines Speicherbereichs (Adressebereich des Flash-Speichers) nicht in der 
IDE vorgeben kann, kann man dies evtl. in einem eigenen Linker-Skript 
machen, sofern die IDE zulässt eines vorzugeben. Der Linker bricht dann 
mit einer Fehlermeldung ab, wenn der Speicherbereich nicht ausreicht.

> Ich speichere nur ein paar Sachen in einem einzigen Sektor.
Evtl. wird durch die Programmiersoftware der gesamte Flash-Speicher vor 
der Übertragung des Anwendungscodes gelöscht. Falls man der IDE nicht 
mitteilen kann, dass nur bestimmte Sektoren gelöscht werden sollen, kann 
man wenig machen. Am Einfachsten dürfte es sein, beim Lesen der 
Konfigurationsdaten auf leeren Flash zu prüfen (0xff) und dann auf 
Standardwerte zurückzugreifen, die im Programm hinterlegt sind.

von Andreas S. (andy386)


Lesenswert?

Ja, die GNU Toolchain läuft im Hintergrund.
hab aber keinen Plan davon...

Ich hab versucht, die Flash-Definitionen in der Hitop-XML zu ändern, 
z.B. die letzte Flashpage auszuklammern ö.ä., aber es kommt immer die 
Fehlermeldung "The Adress is not in Flash"

Eigenartigerweise will Hitop nichts in den Sektor 27 (7D000-7DFFF) 
schreiben, und lt. Anleitung beginnt der Bootblock erst ab 7E000 - 
dennoch scheinen da irgendwelche Informationen zu sein, die wichtig 
sind...

von Andreas S. (andy386)


Lesenswert?

Ok, ich hab mir jetzt 50k Zeilen Adressen und Opcode reingezogen 
(Dissasembly-Tab im Hitop), nach der Liste steht ab Sektor 10 (das ist 
18000+) nicht mehr ausser FF's. Warum er mir dann beim Schreiben in 
einen der hohen Sektoren Fehler reinbaut, ist mir unklar...

von Andreas S. (andy386)


Lesenswert?

Dieser CCLK, der bei der Speicherroutine angegeben werden muss/soll - 
ist damit der Systemclock (also Bus, ~14MHz) oder der CPU-Takt (~72MHz) 
gemeint?

von Robert T. (robertteufel)


Lesenswert?

Andreas Schneider schrieb:
> Dieser CCLK, der bei der Speicherroutine angegeben werden muss/soll -
> ist damit der Systemclock (also Bus, ~14MHz) oder der CPU-Takt (~72MHz)
> gemeint?

Es ist der CPU-Takt

uebrigens, wie kommst Du auf 14 MHz Bus-Clk? 18 MHz als default wuerde 
ich verstehen aber 14 und 72 passen irgendwie nicht zusammen.

Robert

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.