Forum: Mikrocontroller und Digitale Elektronik AT89C51ED2 Flashspeicher zu voll?


von Stefan Kaspar (Gast)


Lesenswert?

Hallo zusammen,

ich habe hier ein merkwürdiges Problem mit einem AT89C51ED2. Dieser hat 
64k internes Flashrom. Mein Programmcode ist ziemlich umfangreich, ca. 
60k bedingt durch viele Textstrings, die in unterschiedlichen Sprachen 
dargestellt werden müssen.

Ich mußte nun eine Erweiterung am Programm vornehmen und dieses war nun 
ca. 62k groß. Der Prozessor startete nicht mehr. Wenn man das Programm 
wieder verringerte, indem man z.B. eine komplette Sprache aus dem 
Programm nahm, damit es unter 62k groß war, lief es einwandfrei.

Hat jemand schon etwas ähnliches beobachtet? Bei Atmel und hier im Forum 
wurde ich nicht fündig.

Stefan

von Matthias K. (matthiask)


Lesenswert?

Ab F800h (63488 dez.)liegt der interne Bootloader. Vermutlich kommst Du 
damit in Konflikt. MW kann man den nicht löschen oder überschreiben.

von Peter D. (peda)


Lesenswert?

Matthias K. schrieb:
> Ab F800h (63488 dez.)liegt der interne Bootloader. Vermutlich kommst Du
> damit in Konflikt.

Aber erst, wenn man ihn versehentlich enabled, also das ENBOOT-Bit 
setzt.


Peter

von Matthias K. (matthiask)


Lesenswert?

Peter Dannegger schrieb:
> Aber erst, wenn man ihn versehentlich enabled, also das ENBOOT-Bit
> setzt.

Sicher? Die Flash-Api-Funktionen liegen auch da oben, die lassen sich 
auch aus der Application aufrufen.

von Ralf (Gast)


Lesenswert?

> Sicher? Die Flash-Api-Funktionen liegen auch da oben, die lassen sich
> auch aus der Application aufrufen.
Aber nur, wenn das Bootloader-ROM in die letzten zwei kB gemappt wird -> 
siehe Datenblatt.

Ralf

von Stefan Kaspar (Gast)


Lesenswert?

Hallo Matthias, hallo Peter,

danke Euch beiden für den Hinweis, das war die Ursache. Jetzt 
funktioniert es.

Das Häckchen in FLIP ist gerade umgekehrt: Ist es gesetzt, dann ist BLJB 
= 0 und der Bootloader startet. Ist es nicht gesetzt, dann ist BLJB = 1 
und die Userapplication startet.

Stefan

von Matthias K. (matthiask)


Lesenswert?

Stefan Kaspar schrieb:
> Das Häckchen in FLIP ist gerade umgekehrt: Ist es gesetzt, dann ist BLJB
> = 0 und der Bootloader startet. Ist es nicht gesetzt, dann ist BLJB = 1
> und die Userapplication startet.

Hat eigentlich nichts mit dem Ursprungsproblem zu tun(?)

von Peter D. (peda)


Lesenswert?

Doch.
Man kann den Factory-Bootloader starten, die Applikation starten oder 
nen User-Bootloader starten.
Setzt man den Bootvektor auf 0x00, dann starten man quasi den 
User-Bootloader auf Adresse 0x0000 mit den API-Funktionen enabled.


Peter

von Matthias K. (matthiask)


Lesenswert?

Peter Dannegger schrieb:
> Doch.
> Man kann den Factory-Bootloader starten, die Applikation starten oder
> nen User-Bootloader starten.
> Setzt man den Bootvektor auf 0x00, dann starten man quasi den
> User-Bootloader auf Adresse 0x0000 mit den API-Funktionen enabled.

Ich nehme nicht an, dass der Ursprungsposter dies umgesetzt hat. Mit 
Flip und interen Bootloader habe ich es auch nicht geschafft, was 
oberhalb F800H in den Flash zu bekommen.

von Stefan Kaspar (Gast)


Lesenswert?

Ich verwende den internen Bootloader und Flip, ich habe keinen eigenen 
Bootloader und im Programm rufe ich auch keine Funktionen des 
Bootloaders auf. Tatsächlich funktioniert jetzt das Programm, nachdem 
ich das Flag in FLIP gelöscht habe, der Code geht jetzt bis 0xF840.

Laut dem Datenblatt von Atmel startet der Bootloader, wenn die 
Hardwarebedingungen gesetzt sind oder BLJB = 0 (in FLIP Häkchen gesetzt) 
und
BSB <> 0 und SBV = 0xFC. Vor der Programmerweiterung war bei mir über 
FLIP BLBJ = 0 (Häkchen gesetzt), aber die Userapplication ist trotzdem 
gestartet, ohne Probleme.

Stefan

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.