DFU Bootloader Xmega<--USB-->PC

OP #4049940
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?
Gast #4050112
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.
OP #4050689
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)
Gast #4050753
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren