Bootloader für Cortex M3

Ich bin mit einem LPC 1768-board von mbed, (mit cortex-M3 cpu) und ich bin versucht, etwas zu erreichen, hier vor allem das upgrade der Benutzer-Anwendung von der SD-Karte, ich Schreibe zwei Programme, zuerst ein bootloader/nano-kernel und einen Anwender-app ("helloworld" wird nicht für einen start):

  • Bootloader/nano-kernel bei 0x00-Adresse läuft, wird es ein paar Prüfungen, und schließlich schnappen Sie sich die Binär-Datei auf der SD-Karte
  • Bootloader/nano-kernel eine Kopie dieser binären Adresse 0x9000 (das vielleicht später ändern, aber dieser Raum wird nicht vom bootloader verwendet/nano-kernel sollte also ok sein)
  • Bootloader springt der Benutzer die Anwendung bei 0x9000 + 4

Die Sd-Karte ist ganz einfach zu trainieren, ich habe Probleme mit dem springen Teil. Hier ist der code, der Sprung-Funktion.

void run(void) {

  void (*user_code_entry)(void);

  unsigned *p;   
  SCB->VTOR = (USER_FLASH_START & 0x1FFFFF80);

  //Load contents of second word of user flash - the reset handler address
  //in the applications vector table
  p = (unsigned *)(USER_FLASH_START +4); //USER_FLASH_START is 0x9000

  user_code_entry = (void (*)(void))p;

  //Jump to user application
  user_code_entry();

}

Also ich zusammengestellt haben (ich bin mit Keil uvision4) der Benutzeranwendung ändern des start-Adresse 0x9000. Wenn ich das Programm mein board (mit flashmagictool), und dann manuell springen (immer noch mit flashmagictool) zu 0x9004 (0x9000 + 4) der Benutzer die Anwendung ausgeführt werden soll, so glaube ich, dass die Zusammenstellung gearbeitet hat, ok, damit Benutzer-app läuft auf 0x9000.

Aber Wenn ich den bootloader/nano-kernel, dieser springt nicht an die Benutzer-Applikation und leider kann ich nicht Debuggen, ich bin mir nicht sicher, was Los ist... ich habe auch versucht, nicht die SD kopieren Teil, also ich programmiere den bootloader zuerst mit im Grunde nur der Sprung auf die 0x9004. Ich habe dann das Programm die Benutzer-Anwendung, die sitzt bei 0x9000. Wenn ich einen Neustart des Vorstandes, bootloader läuft, aber springt nicht an user-app. Ich habe den Speicher, und es scheint, dass beide Programme (bootloader + user-app) sind korrekt und an der richtigen Stelle.

Ich bin sicher, ich bin hier etwas fehlt, ist es eine low-level-code sollte ich suchen ? Ich habe gelesen, Töne von docs online, und aus den Beispielen, die ich gefunden haben, Sie werden springen, um Benutzer-code die gleiche Weise, wie ich tun... vielen Dank für jede Hilfe.

  • sollte dies funktionieren ziemlich ähnlich wie auf dem PC auch, aber mit virtuellen Adressen, anstelle der physischen - probieren Sie es aus und sehen, ob es funktioniert, dann bewegen Sie den code Keil
  • Cortex M3 hat keine MMU, es gibt also keine virtuellen Adressen.
InformationsquelleAutor batmat | 2012-10-03
Schreibe einen Kommentar