PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : dsPIC33F bzw. PIC24H Bootloader Frage



Kaiser-F
19.07.2010, 21:59
Hallo Leute,

ich bastle gerade an einem CAN/RS232 Bootloader für meinen dsPIC33FJ256GP710A.

Prinzipiell habe ich keine Probleme damit. Funktioniert an und für sich.
Jedoch habe ich eine Befürchtung und ich hoffe, jemand von Euch kann mir dabei helfen.

Der Programmspeicher im PIC24H und dsPIC33F ist wie folgt untergliedert:

http://www.kaiser-mechatronik.de/forum/20100719-01.jpg
http://ww1.microchip.com/downloads/en/DeviceDoc/70199C.pdf

Erst kommen der Start GOTO Befehl und die Reset Adresse.
Dann die beiden ISR Tabellen.
Ab 0x200 ist dann entweder im Normalfall das Anwenderprogramm,
oder bei mir eben die Bootloader Section.

1.) Funktionsweise meines Bootloaders
Mein Bootloader soll nach einem Reset oder Neustart immer als erstes
ausgeführt werden. Damit stelle ich sicher, dass ich selbst bei fehlerhaften Programm (while(1) oder so zeug) wieder zugriff auf den Bootloader habe und ich mich nicht "aussperren" kann. Also muss der GoTo Befehl immer auf meine Bootloader Anfangsadresse zeigen.

2.) Der GoTo Befehl bei 0x0000 und Reset Adresse bei 0x0002
Hier muss immer der Sprungbefehl auf die Anfangsadresse des Bootloaders stehen. Die resetadresse ist 0x0000, also der Sprungbefehl auf 0x200.

3.) Das Problem.
Deim Uploaden eines Neuen Userprogramms muss zunächst der Code in dem Flashbereich NACH dem Bootloader geschrieben werden. Da in Anwendungsprogrammen auch Interrupts benutzt werden, müssen auch die ISR-Tabellen Vor dem Bootloader aktualisiert werden.
Dabei muss ich natürlich aufpassen, dass die ersten beiden Befehle (GoTo Befehl und Resetadresse) nicht überschrieben werden.

Nun zu meinem Problem:
Ich habe beispielhaft mal den ISR bereich gelöscht. Beim löschen (Page Erase) wird im gegensatz zum restlichen Flash komischerweise alles auf 0x00 gesetzt (anstatt 0xff). Mein Bootloader schreibt dann wieder den korrekten Sprungbefehl an Addresse 0x0000 und die resetadresse in 0x0002. Das habe ich auch überprüft durch auslesen.
Das Problem war dann aber, dass nach dem erase der Bootloader noch lief, als ich dann aber einen reset gemacht habe, um zu sehen ob der bootloader wieder kommt, musste ich feststellen, dass er nicht kommt!

Nun ist meine Frage:
Worauf mus sich in der ISR-Tabelle noch aufpassen?
Sind es die Traps?
Worauf muss ich die neuen Befehle überprüfen, damit ich mich nicht aussperre.

Ich verstehe nicht, warum GOTO Befehl auf Bootloader und Resetadrese 0x000 nicht ausreichen...?

Hier ein Überblick:

http://www.kaiser-mechatronik.de/forum/20100719-02.jpg
http://ww1.microchip.com/downloads/en/DeviceDoc/70593B.pdf

Gibt es da irgendeinen Standardbefehl, der vom Controller geprüft wird oder so?
Sprungbefehl zu 0x000 als standard...?

Denn die Gefahr ist, dass ich Code lade, der evtl fehlerhafte ISR einstellungen hat. Und dann komm ich niewieder auf meinen Bootloader...

Ich wäre für jeden hilfreichen Hinweis Dankbar.

Vielen Dank!