Forum: Mikrocontroller und Digitale Elektronik Probleme mit AVRdude - Linux


von help (Gast)


Lesenswert?

Hi Leute,

ich habe bisher keine Lösung gefunden. Daher hoffe ich dass ihr mir 
helfen könnt.

Und zwar möchte ich einen ATmega16 mit meinem avrisp-mkII programmieren. 
Dazu verwende ich auf Ubuntu avrdude. Wenn ich den Controller 
programmiere, dann wird der erste Lesezyklus erfolgreich ausgeführt 
(auch eine wohl passende Signatur wird erkannt), das schreiben 
funktioniert aber nicht. Die Anzeige steht eine Weile auf 0% und dann 
taucht die Nachricht "stk500v2_recv_mk2: error in USB receive" auf.

Bei LEDs des Programmers sind grün und auch die libusb ist installiert.

Kann damit jemand was anfangen?


Vielen Dank im Voraus

David

von pegel (Gast)


Lesenswert?

Hänge mal ein oder mehrere -v an und lass dir Einzelheiten von avrdude 
anzeigen.

von help (Gast)


Lesenswert?

Ich hab mir das Makefile aus dem Netz gezogen.
Das ist die Ausgabe:

avrdude -p atmega16 -P usb -c stk500 -v    -U flash:w:main.hex

avrdude: Version 6.3
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "/etc/avrdude.conf"
         User configuration file is "/home/david-tower/.avrduderc"
         User configuration file does not exist or is not a regular 
file, skipping

         Using Port                    : usb
         Using Programmer              : stk500
avrdude: usbdev_open(): Found AVRISP mkII, serno: 0000B0020188
         AVR Part                      : ATmega16
         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         4    10   128    0 no        512    4      0 
9000  9000 0xff 0xff
           flash         33     6   128    0 yes     16384  128    128 
4500  4500 0xff 0xff
           lock           0     0     0    0 no          1    0      0 
9000  9000 0x00 0x00
           lfuse          0     0     0    0 no          1    0      0 
9000  9000 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0 
9000  9000 0x00 0x00
           signature      0     0     0    0 no          3    0      0 
0     0 0x00 0x00
           calibration    0     0     0    0 no          4    0      0 
0     0 0x00 0x00

         Programmer Type : STK500V2
         Description     : Atmel STK500
         Programmer Model: AVRISP mkII
         Hardware Version: 1
         Firmware Version Master : 1.17
         Vtarget         : 5.1 V
         SCK period      : inf us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
2.07s

avrdude: Device signature = 0x1e9403 (probably m16)
avrdude: safemode: hfuse reads as 99
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be 
performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "main.hex"
avrdude: input file main.hex auto detected as Intel Hex
avrdude: writing flash (122 bytes):

Writing |                                                    | 0% 
0.00savrdude: stk500v2_recv_mk2: error in USB receive
avrdude: stk500v2_recv_mk2: error in USB receive
avrdude: stk500v2_recv_mk2: error in USB receive
^Cmakefile:437: recipe for target 'program' failed

von Stefan F. (Gast)


Lesenswert?

Mit welchen Parametern hast du avrdude aufgerufen?
Hast du eine Stromversorgung angeschlossen?
Hast du root Rechte oder eine udev Rule hinzugefügt, damit andere User 
das Gerät benutzen dürfen?
Kannst du wenigstens die Versorgungsspannung des Targets auslesen?
Mit wie viel Mhz wird der µC getaktet und welche Taktfrequenz hast am 
Programmer mit avrdude (Parameter -B) eingestellt?

Wer schon die Antworten zwischen den Zeilen erkennt, darf sie behalten.

von help (Gast)


Lesenswert?

Stefanus F. schrieb:
> Mit welchen Parametern hast du avrdude aufgerufen?
> Hast du eine Stromversorgung angeschlossen?
> Hast du root Rechte oder eine udev Rule hinzugefügt, damit andere User
> das Gerät benutzen dürfen?
> Kannst du wenigstens die Versorgungsspannung des Targets auslesen?
> Mit wie viel Mhz wird der µC getaktet und welche Taktfrequenz hast am
> Programmer mit avrdude (Parameter -B) eingestellt?


Die Aufrufparameter sind oben zu sehen.
externe Spannung ist da. Das dürften die Vtarget mit 5.1V sein.
Die udev-rule hab ich nicht angelegt. Da der Programmer ja anscheinend 
lesen darf wird es nicht daran liegen, dachte ich mir.
Der uC wird mit den Default-gesetzten, internen 1 MHz getaktet. Die 
Taktfrequenz des Programmers kenn ich ehrlich gesagt nicht. Habe da aber 
nie was dran gemacht, deswegen dürften das auch die 
Default-Einstellungen sein.

von Stefan F. (Gast)


Lesenswert?

> Die Aufrufparameter sind oben zu sehen.

Oh, dieser Beitrag war noch nicht da, als ich geschrieben hatte.

> Der uC wird mit den Default-gesetzten, internen 1 MHz getaktet.

Dann brauchst du den Parameter -B16. Wenn du die Fuses auf 8Mhz oder 
mehr umgestellt hast, geht es auch ohne -B.

> Die Taktfrequenz des Programmers kenn ich ehrlich gesagt nicht.

Den Standard Wert weiß ich auch nicht, ist auf jeden Fall mehr als der 
µC bei 1Mhz schafft.

von Karl M. (Gast)


Lesenswert?

help schrieb:
> Stefanus F. schrieb:
>> Mit welchen Parametern hast du avrdude aufgerufen?
>> Hast du eine Stromversorgung angeschlossen?
>> Hast du root Rechte oder eine udev Rule hinzugefügt, damit andere User
>> das Gerät benutzen dürfen?
>> Kannst du wenigstens die Versorgungsspannung des Targets auslesen?
>> Mit wie viel Mhz wird der µC getaktet und welche Taktfrequenz hast am
>> Programmer mit avrdude (Parameter -B) eingestellt?
>
> Die Aufrufparameter sind oben zu sehen.
> externe Spannung ist da. Das dürften die Vtarget mit 5.1V sein.
> Die udev-rule hab ich nicht angelegt. Da der Programmer ja anscheinend
> lesen darf wird es nicht daran liegen, dachte ich mir.
> Der uC wird mit den Default-gesetzten, internen 1 MHz getaktet. Die
> Taktfrequenz des Programmers kenn ich ehrlich gesagt nicht. Habe da aber
> nie was dran gemacht, deswegen dürften das auch die
> Default-Einstellungen sein.

Hallo, dann schaue dir bitte die Parameter von avrdude an, bei F_CPU = 1 
MHz darf der ISP Takte <= 250 kHz sein.
Somit sind "-B 10" [µs] ausreichend langsam.

von help (Gast)


Lesenswert?

Stefanus F. schrieb:
>> Der uC wird mit den Default-gesetzten, internen 1 MHz getaktet.
>
> Dann brauchst du den Parameter -B16. Wenn du die Fuses auf 8Mhz oder
> mehr umgestellt hast, geht es auch ohne -B.

Ich werd verrückt. Das war die Lösung!
Stefano ich Danke dir vielmals.

Kann ich diesen Beitrag auf "Solved" setzen für die Nachwelt?

von Karl M. (Gast)


Lesenswert?

Karl M. schrieb:
> Hallo, dann schaue dir bitte die Parameter von avrdude an, bei F_CPU = 1
> MHz darf der ISP Takte <= 250 kHz sein.
> Somit sind "-B 10" [µs] ausreichend langsam.

Die 10 µs tauchen dann auch hier bei der Ausgabe unter "SCK period : inf 
us" auf.

von Stefan F. (Gast)


Lesenswert?

Die 10 ergeben hier nur zufällig 10µS. Dieser Parameter hat keine 1:1 
Beziehung zu den µS. Schau mal in die Anleitung von avrdude.

von Karl M. (Gast)


Lesenswert?

Hallo Stefanus ,

Stefanus F. schrieb:
> Die 10 ergeben hier nur zufällig 10µS. Dieser Parameter hat keine
> 1:1
> Beziehung zu den µS. Schau mal in die Anleitung von avrdude.

Ich beziehe mich auf diese Anleitung und habe den Parameter auch auf 
anderen Programmieradapter, wie den AVRISP-MKII Clone, übertragen:

https://www.nongnu.org/avrdude/user-manual/avrdude_4.html

-----------------------------
B bitclock
-----------------------------
Specify the bit clock period for the JTAG interface or the ISP clock 
(JTAG ICE only). The value is a floating-point number in microseconds. 
The default value of the JTAG ICE results in about 1 microsecond bit 
clock period, suitable for target MCUs running at 4 MHz clock and above. 
Unlike certain parameters in the STK500, the JTAG ICE resets all its 
parameters to default values when the programming software signs off 
from the ICE, so for MCUs running at lower clock speeds, this parameter 
must be specified on the command-line. It can also be set in the 
configuration file by using the ’default_bitclock’ keyword.
-----------------------------

Ich will ja immer noch etwas lernen, wie ist der Parameter in deinen 
Augen zu verstehen?

von Stefan F. (Gast)


Lesenswert?

Vielleicht hat sich das inzwischen Geändert. Es war mal so, dass kleine 
Zahlen kleine Änderungen bewirkten und je größer die Zahl wurde, umso 
größer die Schrittweite.

Wie dem auch sei, ich benutze einfach immer -B16 und komme damit prima 
klar.

von Karl M. (Gast)


Lesenswert?

Hallo Stefanus ,
unsere Antworten hatten sich uber schnitten und beide liefern eine 
Lösung.

Damit ist dem TO geholfen.

Stefanus F. schrieb:
> Wie dem auch sei, ich benutze einfach immer -B16 und komme damit prima
> klar.

..thumbs up..

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.