Firmware Upload bricht ab

Hallo zusammen,

ich bin dabei meinen ersten Tonuino zusammenzubauen und bekomme keine Firmware auf den AIO hochgeladen, der Upload über den Web Uploader bricht nach ein paar Prozenten ab.

Ja, der Jumper auf dem Button-Board steckt :wink: (habe auch Taster auf Platine und Play/Pause-Knopf manuell halten probiert).

Wenn ich das ganze mit IDE bzw. direkt mit avrdude versuche wird der Upload mit Unterbrechungen fertig, aber die abschließende Überprüfung scheitert.

$ avrdude /etc/avrdude.conf -v -patmega328p -carduino "-P/dev/ttyACM0" -b57600 -D "-Uflash:w:./firmware_aio.hex:i"

avrdude: Version 6.3, compiled on Jul  7 2020 at 19:38:43

         Using Port                    : /dev/ttyACM0
         Using Programmer              : arduino
         Overriding Baud Rate          : 57600
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : Arduino
         Description     : Arduino
         Hardware Version: 3
         Firmware Version: 5.0
         Vtarget         : 0.3 V
         Varef           : 0.3 V
         Oscillator      : 28.800 kHz
         SCK period      : 3.3 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: reading input file "./firmware_aio.hex"
avrdude: writing flash (25316 bytes):

Writing | ##                                                 | 4% 0.25savrdude: stk500_recv(): programmer is not responding
avrdude: stk500_recv(): programmer is not responding
Writing | ###################                                | 38% 26.78savrdude: stk500_recv(): programmer is not responding
avrdude: stk500_recv(): programmer is not responding
Writing | ############################                       | 56% 44.58savrdude: stk500_recv(): programmer is not responding
avrdude: stk500_recv(): programmer is not responding
Writing | ################################################## | 100% 73.67s

avrdude: 25316 bytes of flash written
avrdude: verifying flash memory against ./firmware_aio.hex:
avrdude: load data flash data from input file ./firmware_aio.hex:
avrdude: input file ./firmware_aio.hex contains 25316 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 4.76s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
         0xff != 0x0c
avrdude: verification error; content mismatch

avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: safemode: Fuses OK (E:00, H:00, L:00)

avrdude done.  Thank you.

Für mich sieht es so aus, als würden dabei die Unterbrechungen mit einem Blinken der LED4 einhergehen, wenn der Upload mal eine längere Zeit läuft blinkt diese nicht.
Habe auch schon andere USB-Kabel und Ports versucht, ändert aber nichts am Ergebnis.

Die AiO wird von uns mit einem installierten Blinksketch ausgeliefert (ich habe diesen drauf geflasht, das flashen hat also auf jeden fall funktioniert). Ist dieser noch drauf oder wurde er erfolgreich überschrieben? Wenn er noch drauf ist, sollte sich die Platine über den Button einschalten lassen, an bleiben und LED4 schnell blinken.

Wenn ich Play/Pause bzw. Power auf der Platine drücke blinken LED4 und LED5 kurz. Beim gedrückt halten ist LED5 permanent an und LED4 blinkt ca. alle 2 Sekunden 2 mal schnell.

LED5 zeigt an ob die 5V da sind (=die Platine ist eingeschaltet). Wenn du Power auf der Platine drückst leuchtet die, das ist normal. Dann muss aber ein Sketch laufen der die Platine aktiv hält. Sonst kannst du Power nicht loslassen. Die Platine geht dann wieder aus. Soweit ist das also normal. Bei dir ist halt kein sketch (mehr) drauf, der die Spannung an hält und (im Auslieferungszustand) die LED4 blinken lässt. Das LED4 beim gedrückt halten ab und zu blinkt wird der Bootloader sein.

Hast du die Arduino IDE eingerichtet und kannst custom Sketches kompilieren? Wenn ja versuche mal diesen Sketch zu installieren. Das ist der womit die Platine ausgeliefert wird:

/*
   simple blink sketch
   blinks LED_BUILTIN on AiO >= v1.1
*/

const uint8_t powerControlPin = 7;
const uint8_t onboardSdAccessControlPin = A5;
const uint8_t ledPin = LED_BUILTIN;

void setup() {
  pinMode(powerControlPin, OUTPUT);
  digitalWrite(powerControlPin, HIGH);
  pinMode(onboardSdAccessControlPin, OUTPUT);
  digitalWrite(onboardSdAccessControlPin, LOW);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  digitalWrite(ledPin, HIGH);
  delay(1000);
  digitalWrite(ledPin, LOW);
  delay(1000);
}

Wenn der installiert ist sollte die LED4 nach kurzem drücken der Taste auf der Platine im 1s Takt dauerhaft blinken.

Das Hochladen von dem Blink-Sketch hat erst nach einigen Anläufen geklappt (sonst wieder nach einigen Prozenten abgebrochen) ist jetzt aber drauf und verhält sich wie beschrieben.

Ok kleine Programme gehen also, wenn such widerwillig. Bootloader ist also drauf und funktional. Die Frage ist also warum bricht es öfters ab… Kontaktprobleme vielleicht?!

Hm, keine Ahnung ob es sinnvoll ist das so zu testen, aber ich habe mal die Blink-Sketch Loop mit Serial.println versehen. Wenn ich den Sketch dann laufen lasse sehe ich im Serial Monitor alle Ausgaben über Minuten ohne Probleme.

Macht einen Unterscheid ob den Taster auf dem Board oder die Play/Pause Taste (oder Jumper) auf dem DIY Adapter verwendest (hälst) während des flashens? Evtl. prellt der Taster auf dem Board.

Ne, verhält sich gleich.