XMEGA DFU Bootloader und SPM aus Application Flash

OP Persönliche Seite #3639869
Lesenswert?
• ▲
▼
Hi Leute :-D
Bei den XMEGAs ist ja SPM in den Application Flash nur noch aus der 
Bootloader Section erlaubt. Das heißt, wenn man den Flash im AVR als 
eine Art kleinen (internen) Dataflash nutzen will, muss man eine 
Hilfsfunktion in die Bootloader Section legen. Da tummelt sich aber bei 
meiner Anwendung Atmels DFU Bootloader (direkt das Binary hochgeladen - 
klappt).

Da die Sourcen des Bootloaders aber zugänglich sind und das Ganze das 
Atmel Software Framework (ASF) nutzt, würde ich gerne die entsprechende 
Funktion, die für das Schreiben des Flashes in dem Bootloader zuständig 
ist für meine Zwecke "missbrauchen" und aus der Application aufrufen.

Nach etwas Rumsucherei ist das die Funktion:
1
void nvm_flash_erase_and_write_buffer(flash_addr_t address, const void *buf,
2
  uint16_t len, bool b_blank_check)
in der Datei NVM.c aus dem Atmel Software Framework.
http://asf.atmel.com/docs/3.4.1/common.services.usb.class.msc.device.unit_tests.stk600_atxmega128a1u/html/nvm_8c_source.html

Da gibt es jetzt eine Reihe kleiner Probleme.
1. Wie finde ich am Besten heraus, an welcher Adresse diese Funktion im 
Binary abgelegt ist, wenn mir nur Sourcecode, Binary aber nicht der 
erforderliche KEIL Compiler zur Verfügung steht?

2. Gibt es unterschiede im Application Binary Interface (ABI) bezüglich 
des Funktionsaufrufes zwischen KEIL AVR Compiler (Womit Atmel den 
Bootloader kompiliert hat) und dem AVR-GCC (mit dem ich die Funktion 
aufrufen will)?
Wenn ja, gibt es Möglichkeiten das Anzupassen? Ich denke da gerade an 
eine (inline) Assembler Wrapper Funktion, die die Argumente entsprechend 
umsortiert.

3. Hat das schon mal jemand gemacht? ;-) ;-)

4. Kann es sein, dass es einfacher ist, die 150 verbleibenden Bytes in 
der Boot section (atxmega32A4U) mit meiner eigenen Variante zu füllen? 
Im prinzip würde es ja reichen dort ein einzelnes SPM unterzubringen, 
denn nur dieser Befehl kann nicht aus der App Section ausgeführt werden.

Vielen Dank für eure Hilfe schon mal!
OP Persönliche Seite #3640351
Lesenswert?
• ▲
▼
Habe es jetzt anders gelöst. Da bei der kleinsten Variante 
(atxmega32a4u) immer noch 150 Byte in der Bootsection frei sind, habe 
ich im Prinzip nvm_common_spm aus dem ASF assembliert (sind 30 
Instruktionen) und ganz hinten an die Boot section drangehängt (mittels 
srec_cat).

Jetzt kann ich den Teil mit SPM (der nur aus der Boot section 
funktioniert) aus der Applikation anspringen.

Ein bisschen hacky, aber was solls ;-)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.