Forum: Mikrocontroller und Digitale Elektronik Atxmega32A4U flashen bzw DFU Bootloader ansprechen


von Timo K. (trimixtimo)


Lesenswert?

Hallo zusammen,

Ich habe mir das Trimension XMega Breakout Board bestellt, um nach 
einigen Projekten mit der Atmega Familie auch mal die XMegas zu 
verwenden.

Das besagte Breakoutboard wird mit dem Atmel DFU Bootloader 
ausgeliefert. Über Flip 3.4.7 konnte ich gestern erfolgreich das erste 
Programm via USB auf den XMega32A4U übertragen. Direkt nach der 
Übertragung konnte ich den Windows-Sound hören, der signalisiert, dass 
ein USB-Gerät entfernt wurde. Wenn ich das Board nun über USB mit Strom 
versorge, startet das Programm (blinkende LED als ersten Test). Nun 
möchte ich aber eine neue hex-Datei übertragen und schaffe es nicht mehr 
den Bootloader anzusprechen. In der Anleitung des Boards steht, dass man 
PC03 auf GND legen muss um nach einem Reset in den Bootloader zu kommen. 
Dies deckt sich ja soweit auch mit der Werkseinstellung des Bootloaders 
für den Xmega32a4u. Leider waren an dieser Stelle alle Versuche 
vergebens. Habe ich den Bootloader eventuell aus Versehen überschrieben?

Ich habe hier auch noch einen AVR-Dragon zur Verfügung. Wenn ich mit 
diesem und Atmel Studio 7 das Board über PDI flashen möchte, kommt nur 
eine Fehlermeldung:
1
Got error setting up PDI mode: Device is not supported in this emulator mode. Debugger command setParameter failed.
2
3
Unable to enter programming mode. Verify device selection, interface settings, target power, security bit, and connections to the target device.

Ich hab schon mehrfach darüber gelesen, dass der Dragon nicht mit allen 
XMegas über PDI kommunizieren kann und daher steht die Überlegung an, 
den JTAG ICE PCBA zu beschaffen, sollte ich das Problem der 
PDI-Programmierung nicht anderweitig in den Griff bekommen.

Am Ende möchte ich alle XMegas (insbesondere 128A3) einmalig über PDI 
mit einem angepassten Bootloader beschreiben und danach die 
entsprechenden Programmversionen über USB übertragen.

Der Testcode :
1
#include <avr/io.h>
2
#include <util/delay.h>
3
4
#define BLINK_DELAY_MS 1000
5
6
int main( void )
7
{
8
  PORTE.DIRSET = 0b00000001 ;
9
  
10
  while(1){
11
    PORTE.OUTSET = 0b00000001 ;
12
    _delay_ms( BLINK_DELAY_MS ) ;
13
    PORTE.OUTCLR = 0b00000001 ;
14
    _delay_ms( BLINK_DELAY_MS ) ;
15
  }
16
}

Grüße Timo

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.