Forum: Mikrocontroller und Digitale Elektronik PIC32 Bootloader


von Karsten M. (ht47506)


Lesenswert?

Hallo zusammen,

ich habe hier ein älteres Projekt auf einem PIC32MX460F512L. Es ist noch 
mit MPLab8 und den Microchip Application Libraries vom 14.07.2011 
geschrieben. Wir haben den Beispiel USB HID Bootloader verwendet, der 
über einen externen Taster aktiviert wurde. Das funktionierte soweit 
gut. Nun soll aber der Bootloader von der Application aus gestartet 
werden. Gedacht ist folgende Vorgehensweise:

1. Application hinterlegt im Flash ein Flag
2. Application führt Reset aus
3. Bootloader erkennt Flag und empfängt neue Application. Anschliessend 
setzt er das Flag zurück und startet die Application.

Hier bekomme ich nun es aber nicht hin in der Application ein Flag 
mittels NVMWriteWord zu speichern, welches im Bootloader gelesen werden 
kann. Ich vermute, dass ich das mit den Virtuellen Adressen und der 
Config im Linkerscript nicht richtig verstehe. Die Linkerscripts 
entsprechen denen des Beispiels in der Library.

Kann mir hier jemand weiterhelfen ?

Grüße

Karsten

von A. S. (Gast)


Lesenswert?

Woran liegt es denn?
a) kannst Du in der Applikation ein Byte ändern? Das kannst Du ja in der 
Applikation prüfen.

b) kannst Du im Bootloader ein Byte lesen? Dazu brauchst Du keine 
Applikation

c) Ob Beide an gleicher Adresse arbeiten, kannst Du mit verschiedenen 
Mustern testen.

d) führt der Reset bei Euch auch zur Spannungsabschaltung? Sonst eigent 
sich doch praktisch jedes Register, dass beim Startup, aber nicht beim 
Reset gesetzt wird.

von Karsten M. (ht47506)


Lesenswert?

Hallo Achim,

danke für die Infos.

Also ich kann in der App das Byte ins Flash schreiben und nach einem 
Neustart in der App auch wieder lesen. Wenn ich im Bootloader ein Byte 
ins Flash schreibe, kann ich das beim nächsten Start auch wieder 
problemlos zurücklesen. Versuche ich im Bootloader das Byte aus der App 
zu lesen, so ist dieses schlicht nicht da.
Ich vermute daher, dass irgendwas mit der Adresse nicht stimmt, da im 
Linkerscript ja unterschiedliche Bereiche für App und Bootloader 
definiert sind.
Ich habe aber leider keine besonders große Ahnung von Mikrocontrollern - 
ich entwickle seit 20 Jahren Windows Software. Die Idee mit dem Register 
klingt gut, die Spannung bleibt im Resetfall erhalten. Welches kann ich 
da nehmen ?

Grüße

karsten

von A. S. (Gast)


Lesenswert?

Karsten M. schrieb:
> Wenn ich im Bootloader ein Byte
> ins Flash schreibe, kann ich das beim nächsten Start auch wieder
> problemlos zurücklesen.

Zurücklesen im Bootloader aber nicht in der APP? Hast Du keinen Debugger 
um den Speicher zu durchsuchen? Für die App mag mancher Speicher tabu 
sein, aber der Booter sollte doch weitgehend überall schreiben können 
;-)

Karsten M. schrieb:
> Welches kann ich da nehmen

Jedes, dass beim Power-On definiert gesetzt wird und das Du nicht 
brauchst und das beim Umsetzen keine Problem macht, also z.b. ein 
Control-register für einen ungenutzten Uart oder ein Datenrichtungs-Bit 
eines ungenutzten Ports.

von Karsten M. (ht47506)


Angehängte Dateien:

Lesenswert?

Achim S. schrieb:
> um den Speicher zu durchsuchen? Für die App mag mancher Speicher tabu
> sein, aber der Booter sollte doch weitgehend überall schreiben können
> ;-)

Das dachte ich auch, aber selbst wenn ich über den ICD3 den 
Speicherinhalt ins MPlab lade, kann ich dort die Daten der App nicht 
finden, wenn das Bootloader Project läuft. Zudem verwirren mich die 
Speicheradressen. Ich habe die Linker Scripts mal angehangen.

Achim S. schrieb:
> Control-register für einen ungenutzten Uart oder ein Datenrichtungs-Bit
> eines ungenutzten Ports.

Danke für den Tipp. Das werde ich mal probieren.

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.