Forum: Mikrocontroller und Digitale Elektronik DFU Bootloader Xmega<--USB-->PC


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Patrick S. (patricksch)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich benutze den DFU Bootloader mit deinem Xmega32C4 Mikrocontroller und 
einen iMX6 als PCU. Die Kommunikation ist mit i2c/twi. Das Aufspielen 
der Firmware mit dem DFU funktioniert problemlos.
Ich möchte nun mit einem Befehl vom PC aus (twi - intterupt driven) den 
MCU in den Bootloader springen lassen.

void (*start_bootloader) (void) = (void (*)(void))(BOOTLOADER_ADDRESS);

void reset_mcu(void)
{
  cli();
  start_bootloader();
}

BOOTLOADER_ADDRESS = 0x40FE
Bootloader byte addresse des Mikrocontroller ist 0x8000. (0x40FE = 
0x8000/2 + 0x1FC/2)

Der MCU scheint auch in den Bootloader zu springen, Problem ist, dass 
der PC nun aber den USB port nicht erkennt.

[12370.129217] usb 2-1.3: device not accepting address 95, error -32
[12370.135683] hub 2-1:1.0: unable to enumerate USB device on port 3

Hat jemand eine Idee?

von c-hater (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Patrick Schmelzer schrieb:

[...]

Dir ist offensichtlich selber nicht ganz klar, wie die Kommunikation des 
Bootloaders funktioniert.

> Die Kommunikation ist mit i2c/twi. Das Aufspielen
> der Firmware mit dem DFU funktioniert problemlos.

Das ist doch Blödsinn. Entweder läuft die Kommunikation via USB, dann 
kann sie nicht gleichzeitig über I2C laufen. Und umgekehrt.

Oder du hast da irgendeine perverse Mischpoke am Laufen, bei der 
irgendein USB-Gateway eine Rolle spielt. Dann mußt du natürlich dafür 
sorgen, daß das Gateway für den Bootloaderbetrieb entsprechend 
umkonfiguriert wird, es genügt dann eben nicht mehr, einfach nur den 
Bootloader anzuspringen.

von Patrick S. (patricksch)


Bewertung
0 lesenswert
nicht lesenswert
Vielleicht habe ich mich ja ein wenig falsch ausgedrückt(lustig, dass 
man hier oft gleich angemault wird, deswegen mag ich avrfreaks lieber!)

Die Kommunikation zwischen PC und MCU läuft über i2c. Das heisst ich 
schicke Befehle von PC nach MCU, der danach z.B. Werte wieder zurückt 
gibt.

Eine Funktion ist allerdings, dass man den MCU restartet, damit er in 
den Bootloader springt. Nachdem der MCU neu gestartet hat, müsste er am 
PC als COM Port gefunden werden. (Ja hier kommt der USB zum Einsatz)

von Patrick S. (patricksch)


Bewertung
0 lesenswert
nicht lesenswert
Das Problem ist hierbei, dass er aber noch den Interrrupt verarbeitet, 
und deshalb nicht richtig in den Bootloader springen kann.

von Thomas DG5MPQ (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Patrik,

setze doch einfach im I2C ein Flag.

wenn der Interrupt fertig ist, du wieder im normalen Ablauf im PRG bist 
kannst du das Flag auswerten und in den Bootloader springen.


Gruß Thomas

von Patrick S. (patricksch)


Bewertung
0 lesenswert
nicht lesenswert
Gute Idee!

von Patrick S. (patricksch)


Bewertung
0 lesenswert
nicht lesenswert
funktioniert, Danke!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.