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