Forum: Mikrocontroller und Digitale Elektronik Arduino Mega 2560 R3: Kommunkationsproblem zu PC


von restfet (Gast)


Lesenswert?

Hallo!

Ich habe vor mir zwei Arduino Mega 2560 R3 Boards liegen. Eines 
funktioniert einwandfrei, beim zweiten treten allerdings seit ein paar 
Wochen einige Probleme mit folgenden "Symptomen" auf:

- Das Board wird im Gerätemanager als Arduino Mega 2560 R3 (COM4) 
angezeigt.

- Wenn ich versuche, das Board mit avrdude zu programmieren, bekomme ich 
folgende Fehlermeldungen:
1
             Using Port                    : \\.\COM4
2
             Using Programmer              : wiring
3
             Overriding Baud Rate          : 115200
4
avrdude.exe: stk500v2_ReceiveMessage(): timeout
5
avrdude.exe: stk500v2_ReceiveMessage(): timeout
6
avrdude.exe: stk500v2_ReceiveMessage(): timeout
7
avrdude.exe: stk500v2_ReceiveMessage(): timeout
8
avrdude.exe: stk500v2_ReceiveMessage(): timeout
9
avrdude.exe: stk500v2_ReceiveMessage(): timeout
10
avrdude.exe: stk500v2_getsync(): timeout communicating with programmer
11
12
avrdude.exe done.  Thank you.

Ich habe den richtigen COM-Port ausgewählt und die Argumente für den 
avrdude stimmen auch sicher, weil die Programmierung des anderen Boards 
funktioniert.

- Ich habe den COM-Port für das Board auch schon umgestellt, das Problem 
bleibt aber weiterhin.

- Ich habe das Board im Gerätemanager deinstalliert und neu installiert, 
hat auch nichts gebracht.

- Ich habe versucht, den Bootloader des ATmega2560 über Arduino ISP neu 
zu laden. Das hat offenbar funktioniert, die gelbe LED L blinkt und die 
grüne LED ON leuchtet, hat das Problem aber nicht gelöst.

- Wenn ich ein Terminal öffne und ein paar Zeichen versende, leuchtet am 
funktionierenden Board die LED RX auf, beim kaputten Board passiert hier 
gar nichts.

- Wenn ich am ISP-Header des ATmega16u2 (der hier als USB-Seriell 
Converter arbeitet) RESET mit GND kurzschließe und wieder öffne, 
verschwindet das funktinierende Board (Mega 2560 R3 (COM3)) aus dem 
Gerätemanager und es wird nun der ATmega16u2 angezeigt. Wenn ich das 
gleiche mit dem kaputten Board mache, wird dieses weiterhin im 
Gerätemanager angezeigt.

Ich vermute jetzt, dass irgendwie die Firmware des ATmega16u2 
zerschossen wurde. Also habe ich versucht, über DFU die Firmware des 
ATmega16u2 neu zu laden.

Unter Windows habe ich das mit Atmel FLIP versucht. Wenn ich hier 
versuche, eine USB Verbindung zu öffnen bekomme ich folgende 
Fehlermeldung:
Could not open USB device.

In einer virtuellen Linux-Maschine habe ich versucht, das ganze mit 
dfu-programmer zu laden. Auch hier kommt eine Fehlermeldung:
dfu-programmer: no device present.

Und hier stehe ich jetzt an. Hat jemand hier ähnliche Probleme bzw. eine 
Lösung für das ganze parat? Freue mich über jede Hilfe!

lg

von Matthias L. (matthias_l531)


Lesenswert?

Hallo,

hab den Thread hier zufällig beim Googlen nach einem anderen Problem 
gefunden.

Das mit Atmel FLIP bzw. dfu-programmer kann ja auch nur funktionieren, 
wenn der Chip vorher in den DFU-Modus kommt, was er laut deiner Aussage 
aber nicht tut.

Ist der nicht funktionierende auch ganz sicher ein R3? (ältere sollten 
zwar nicht mehr im Umlauf sein, aber wer weiß). Bei den vorherigen 
Revisionen war das mit dem DFU-Modus etwas komplizierter.

Ist die "Reset-En"-Brücke geschlossen?


Ansonsten würde ich mal versuchen aus dem funktionierenden Arduino ein 
ISP-Programmer zu machen (falls kein anderer zur Hand) und damit den 
fehlerhaften 16u2 im ISP-Modus neuzuflashen.



Gruß

von restfet (Gast)


Lesenswert?

Bei beiden Boards handelt es sich um R3 und bei beiden ist die 
Reset-En-Brücke geschlossen.

Dann werd ich mal bei Zeiten versuchen, das ganze mit dem ArduinoISP 
hinzubiegen.

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

drueck mal den resetknopf, resetknopf loslassen, und unmittelbar danach 
avrdude abfeuern

von Johann H. (Firma: none) (johann1979)


Lesenswert?

Wie siehts mit der "normalen" Arduino IDE aus?
Ich hatte mal den gleichen Fehler.
Hat sich rausgestellt, dass es nicht möglich ist, einen Code zu laden 
mit
Serial.println("HELLO!!!");
wegen der 3 Ausrufezeichen...

von bianchifan (Gast)


Lesenswert?

Mit DFU kenne ich mich nicht aus, aber warum so kompliziert?
Deiner Erzählung entnehme ich, dass du entweder originale Megas oder 
Original-Clone vorliegen hast. Die müssten für den U2 einen eigenen 
ISP-Stecker (6-polig) drauf haben. Mit einem handelsüblichen ISP-Adapter 
und ggfls. einem 6-10-pol-Adapter sollte 
Auslesen-Vergleichen-Beschreiben ein Kinderspiel sein. Mit dem Dude bzw. 
einer passenden Gui geht Arduino-ISP, ich bevorzuge allerdings 
ExtremeBurner/USBASP.

von restfet (Gast)


Lesenswert?

Kaj G. schrieb:
> drueck mal den resetknopf, resetknopf loslassen, und unmittelbar
> danach
> avrdude abfeuern

Hat nichts gebracht, gibt ein timeout.

Johann Haller schrieb:
> Wie siehts mit der "normalen" Arduino IDE aus?

Bleibt bei Uploading... stecken, gibt auch ein timeout.

bianchifan schrieb:
> Mit DFU kenne ich mich nicht aus, aber warum so kompliziert?

Weil ich mir erstmal einen 6-Pol-ISP-Stecker zusammenlöten muss. Da hab 
ichs lieber zuerst mit dem DFU ausprobiert. Aber jetzt läufts eh drauf 
hinaus, das Ding mit ISP zu flashen.

von Johann H. (Firma: none) (johann1979)


Lesenswert?

> Johann Haller schrieb:
>> Wie siehts mit der "normalen" Arduino IDE aus?
>
> Bleibt bei Uploading... stecken, gibt auch ein timeout.


Genau DAS meinte ich. Evtl. versteckt sich in Deinem Code eine Folge, 
die den Bootloader resettet.
z.B. !!! bei printf. In der DOGM lib zur Displayansteuerung gibt es auch 
eine
Schriftart, die den Upload verhindert...Ist echt ein Sch*** Fehler und 
ewig doof zu finden.
Kannst Du z.B das "Blink example" hochladen???

von Johann H. (Firma: none) (johann1979)


Lesenswert?

Was mir noch einfällt...öffne mal deine Hex Datei und such folgende 
Zeichenfolge: "212121"...

: Bearbeitet durch User
von restfet (Gast)


Lesenswert?

Das Programm, das ich raufladen wollte, schaltet nur Portpins ein bzw. 
aus. Im Programm werden auch keine Strings verwendet und im Hex-File 
konnte ich die Sequenz 212121 auch nicht finden.

von restfet (Gast)


Lesenswert?

Ich bin jetzt endlich dazu gekommen, den 16u2 mit ArduinoISP zu flashen 
- leider vergeblich. Hier das output des avrdude:

1
D:\>avrdude -c arduino -p m16u2 -P COM3 -b 19200 -vv -U flash:w:m16u2-usbserial-COMBINED.hex:i -F
2
3
avrdude: Version 6.0.1, compiled on Sep 18 2013 at 08:20:41
4
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
5
         Copyright (c) 2007-2009 Joerg Wunsch
6
7
         System wide configuration file is "C:\Program Files (x86)\WinAVR-20100110\bin\avrdude.conf"
8
9
         Using Port                    : COM3
10
         Using Programmer              : arduino
11
         Overriding Baud Rate          : 19200
12
avrdude: ser_recv(): programmer is not responding
13
avrdude: stk500_recv(): programmer is not responding
14
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
15
         AVR Part                      : ATmega16U2
16
         Chip Erase delay              : 9000 us
17
         PAGEL                         : PD7
18
         BS2                           : PC6
19
         RESET disposition             : possible i/o
20
         RETRY pulse                   : SCK
21
         serial program mode           : yes
22
         parallel program mode         : yes
23
         Timeout                       : 200
24
         StabDelay                     : 100
25
         CmdexeDelay                   : 25
26
         SyncLoops                     : 32
27
         ByteDelay                     : 0
28
         PollIndex                     : 3
29
         PollValue                     : 0x53
30
         Memory Detail                 :
31
32
                                  Block Poll               Page                       Polled
33
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
34
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
35
           eeprom        65    20     4    0 no        512    4    128  9000  9000 0x00 0x00
36
           flash         65     6   128    0 yes     16384  128    128  4500  4500 0x00 0x00
37
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
38
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
39
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
40
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
41
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
42
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
43
44
         Programmer Type : Arduino
45
         Description     : Arduino
46
         Hardware Version: 2
47
         Firmware Version: 1.18
48
         Topcard         : Unknown
49
         Vtarget         : 0.0 V
50
         Varef           : 0.0 V
51
         Oscillator      : Off
52
         SCK period      : 0.1 us
53
54
avrdude: AVR device initialized and ready to accept instructions
55
56
Reading | ################################################## | 100% 0.03s
57
58
avrdude: Device signature = 0xffffff (retrying)
59
60
Reading | ################################################## | 100% 0.02s
61
62
avrdude: Device signature = 0xffffff (retrying)
63
64
Reading | ################################################## | 100% 0.02s
65
66
avrdude: Device signature = 0xffffff
67
avrdude: Yikes!  Invalid device signature.
68
avrdude: Expected signature for ATmega16U2 is 1E 94 89
69
avrdude: safemode: lfuse reads as FF
70
avrdude: safemode: hfuse reads as FF
71
avrdude: safemode: efuse reads as FF
72
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
73
         To disable this feature, specify the -D option.
74
avrdude: erasing chip
75
avrdude: reading input file "m16u2-usbserial-COMBINED.hex"
76
avrdude: writing flash (15668 bytes):
77
78
Writing | ################################################## | 100% 5.35s
79
80
avrdude: 15668 bytes of flash written
81
avrdude: verifying flash memory against m16u2-usbserial-COMBINED.hex:
82
avrdude: load data flash data from input file m16u2-usbserial-COMBINED.hex:
83
avrdude: input file m16u2-usbserial-COMBINED.hex contains 15668 bytes
84
avrdude: reading on-chip flash data:
85
86
Reading | ################################################## | 100% 3.84s
87
88
avrdude: verifying ...
89
avrdude: verification error, first mismatch at byte 0x0000
90
         0xff != 0x90
91
avrdude: verification error; content mismatch
92
93
avrdude: safemode: lfuse reads as FF
94
avrdude: safemode: hfuse reads as FF
95
avrdude: safemode: efuse reads as FF
96
avrdude: safemode: Fuses OK (H:FF, E:FF, L:FF)
97
98
avrdude done.  Thank you.

Wie man gleich sieht, ist jeder Wert, der vom 16u2 zurückkommt 0xFF.

Daraufhin hab ich die Spannungswerte am ISP-Header gemessen.
An MISO, SCK, RESET, MOSI und VCC liegen ca. 4,8V an (also praktisch 
Versorgungsspannung...). Am GND-Pin sinds zum Glück 0V. Kurzschluss 
konnte ich aber keinen messen.

Zum Vergleich: Am ISP-Header des ATMega2560 sind nur an VCC und RESET 
die 4,8V, an allen anderen Pins sind 0V. Der lässt sich übrigens auch 
wunderbar über ISP programmieren.

Kann es sein, dass die Fuses des 16u2 irgendwie verpfuscht wurden?

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.