falsche programmer Id

Hallo,

Mein Leonardo funktioniert von einem Moment auf den anderen nicht mehr. Wenn ich den Code uploaden will, kommt die Meldung:

Binäre Sketchgröße: 4.858 Bytes (von einem Maximum von 28.672 Bytes)
Found programmer: Id = "TYPE   "; type = E
    Software Version = 0.
; Hardware Version = 
.D
avrdude: error: buffered memory access not supported. Maybe it isn't
a butterfly/AVR109 but a AVR910 device?

Verändert hatte ich nur eine Berechnung von

diff = (2^32 * RxBuffer[2]) + (2^16 * RxBuffer[3]) + (2^8 * RxBuffer[4]) + RxBuffer[5];

zu

diff = (2^16 * RxBuffer[3]) + (2^8 * RxBuffer[4]) + RxBuffer[5];

Das komische daran ist, dass die genannte Id: "TYPE " genau einer Ausgabe in meinem Code entspricht? Wie bekomme ich das wieder hin

Ein Duemilanove am gleichen Computer funktioniert ohne Probleme.

Hier noch die detaillierte Ausgabe

Forcing reset using 1200bps open/close on port /dev/tty.usbmodem24321
PORTS {/dev/tty.usbserial-A800etXH, /dev/cu.usbserial-A800etXH, /dev/tty.usbmodem24321, /dev/cu.usbmodem24321, /dev/tty.Bluetooth-PDA-Sync, /dev/cu.Bluetooth-PDA-Sync, /dev/tty.Bluetooth-Modem, /dev/cu.Bluetooth-Modem, /dev/tty.FireFly-14E0-SPP, /dev/cu.FireFly-14E0-SPP, } / {/dev/tty.usbserial-A800etXH, /dev/cu.usbserial-A800etXH, /dev/tty.usbmodem24321, /dev/cu.usbmodem24321, /dev/tty.Bluetooth-PDA-Sync, /dev/cu.Bluetooth-PDA-Sync, /dev/tty.Bluetooth-Modem, /dev/cu.Bluetooth-Modem, /dev/tty.FireFly-14E0-SPP, /dev/cu.FireFly-14E0-SPP, } => {}
PORTS {/dev/tty.usbserial-A800etXH, /dev/cu.usbserial-A800etXH, /dev/tty.usbmodem24321, /dev/cu.usbmodem24321, /dev/tty.Bluetooth-PDA-Sync, /dev/cu.Bluetooth-PDA-Sync, /dev/tty.Bluetooth-Modem, /dev/cu.Bluetooth-Modem, /dev/tty.FireFly-14E0-SPP, /dev/cu.FireFly-14E0-SPP, } / {/dev/tty.usbserial-A800etXH, /dev/cu.usbserial-A800etXH, /dev/tty.usbmodem24321, /dev/cu.usbmodem24321, /dev/tty.Bluetooth-PDA-Sync, /dev/cu.Bluetooth-PDA-Sync, /dev/tty.Bluetooth-Modem, /dev/cu.Bluetooth-Modem, /dev/tty.FireFly-14E0-SPP, /dev/cu.FireFly-14E0-SPP, } => {}
Uploading using selected port: /dev/tty.usbmodem24321
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega32u4 -cavr109 -P/dev/tty.usbmodem24321 -b57600 -D -Uflash:w:/var/folders/rw/_93xtq4j35sg1fr848jybjj80000gn/T/build7486514018723700044.tmp/Blink.cpp.hex:i 

avrdude: Version 5.11, compiled on Sep  2 2011 at 18:52:52
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf"
         User configuration file is "/Users/the/.avrduderc"
         User configuration file does not exist or is not a regular file, skipping

         Using Port                    : /dev/tty.usbmodem24321
         Using Programmer              : avr109
         Overriding Baud Rate          : 57600
         AVR Part                      : ATmega32U4
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PA0
         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    10     8    0 no       1024    8      0  9000  9000 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : butterfly
         Description     : Atmel AppNote AVR109 Boot Loader

Connecting to programmer: .avrdude: Send: . [1b] 
avrdude: Send: S [53] 
avrdude: Recv: T [54] 

avrdude: Recv: Y [59] P [50] E [45]   [20]   [20]   [20] 
avrdude: Send: V [56] 
avrdude: Recv: 0 [30] . [0d] 
avrdude: Send: v [76] 
avrdude: Recv: . [0a] 
avrdude: Recv: D [44] 
avrdude: Send: p [70] 
avrdude: Recv: E [45] 
Found programmer: Id = "TYPE   "; type = E
    Software Version = 0.
; Hardware Version = 
.D
avrdude: Send: a [61] 
avrdude: Recv: V [56] 
avrdude: Send: b [62] 
avrdude: Recv: I [49] 
avrdude: error: buffered memory access not supported. Maybe it isn't
a butterfly/AVR109 but a AVR910 device?

Außer daß wenn Du 4 Byte in eine 32-Bit Zahl umwandeln willst dann

diff = (2^32 * RxBuffer[2]) + (2^16 * RxBuffer[3]) + (2^8 * RxBuffer[4]) + RxBuffer[5];

falsch ist. Da kommt eine 40Bit Zahl raus. Richtig ist:

diff = (2^24 * RxBuffer[2]) + (2^16 * RxBuffer[3]) + (2^8 * RxBuffer[4]) + RxBuffer[5];

Mehr kann ich zu Deinem Problem nicht sargen. Kannst Du den Sketch uns schiken damit wir probieren könne?

Grüße Uwe

ja danke, hatte da immer einen Überlauf und war auf der Suche nach der Ursache. (Zu meiner Verteidigung, die Dokumentation des Protokolls ist falsch :)) Und genau in dem Moment ist der Fehler passiert.
der noch grössere Fehler war aber, ^ zu verwenden, was bitweise xor ist. pow ist die gesuchte Funktion

(pow(2,24) * RxBuffer[2]) + (pow(2,16) * RxBuffer[3]) + (pow(2,8) * RxBuffer[4]) + RxBuffer[5]

Code kann ich gerne geben, nur denke ich, dass er nicht direkt für das Problem verantwortlich war/ist. Das ist eher in die Richtung “Reset im falschen Moment gedrückt” oder sowas ähnliches.

Ich suche eher einen “Hack” mit dem ich die Programmer Id korrigieren kann, ohne den Bootloader neu zu programmieren.

Code: GitHub - thewknd/kellerbus: kellerbus library for Arduino

Die betreffende Funktion

kellerbus.cpp #171

//################## readDeviceTime ###################
// Takes:   -
// Returns: internal device time
// Effect:  wrapper function F92 / device time

time_t CKellerBus::readDeviceTime(void)
{
  // Prepare TxBuffer
  TxBuffer[0] = device;
  TxBuffer[1] = 0b01111111 & 92;
  TxBuffer[2] = 3;
  
  TransferData(3,9);
    
  setTime(0,0,0,1,1,2000);
  adjustTime((pow(2,24) * RxBuffer[2]) + (pow(2,16) * RxBuffer[3]) + (pow(2,8) * RxBuffer[4]) + RxBuffer[5]);

  deviceTime = now();
  
  return deviceTime;
}

Und der Aufruf der Funktion in examples/test/test.ino

#include <kellerbus.h>
#include <Time.h>


CKellerBus kbus(&Serial1,9600,5,250);

time_t kbusTime;

[...]

  kbusTime = kbus.readDeviceTime(); 
  Serial.print("DEVICE TIME     : "); 
  Serial.print(day(kbusTime),DEC);
  Serial.print(".");
  Serial.print(month(kbusTime),DEC);
  Serial.print(".");
  Serial.print(year(kbusTime),DEC);
  Serial.print(" ");
  Serial.print(hour(kbusTime),DEC);
  Serial.print(":");
  Serial.print(minute(kbusTime),DEC);
  Serial.print(":");
  Serial.print(second(kbusTime),DEC);
  Serial.println(" (d:m:y h:m:s)");
  
[...]

habe den Bootloader neu installiert, funktioniert wieder.

Hat das Problem sonst niemand? Tritt bei mir relativ oft auf, mit dem Mega und dem Duemilanove hatte ich das Problem nie und nun mit dem Leonardo andauernd.

Oft korrigiert sich die Programmer id wieder selber beim zweiten upload Versuch. Manchmal hilft aber nur, den Bootloader neu zu installieren.