ATTiny2313: Bitkipper beim Programmieren

OP #2162684
Lesenswert?

Hallo,

seit kurzem beschäftige ich mich mit AVR µCs und bin sehr davon angetan; 
momentan habe ich jedoch das Problem, dass mein USB-Programmer 
(Diamex-AVR) sich weigert, die ATTiny2313-Controller korrekt zu 
programmieren. Ohne erkennbaren Determinismus scheinen Bits zwischen 
Programmer und IC zu kippen, so dass mal die Controller-Signatur nicht 
stimmt, mal die Kommunikation komplett abbricht oder manchmal avrdude 
erst beim Verifizieren der geschriebenen Daten aussteigt. Je nach 
Mondphase funktioniert es dann auch mal.

Der Programmer ist per ISP-Stecker mit einer Platine verbunden, auf der 
ein 8- und ein 20-poliger Sockel mit den entsprechenden PINS verbunden 
sind; interessanterweise lassen sich ATTiny13-Controller im 
erstgenannten Sockel problemlos beschreiben, während der 
parallelgeschaltete 20polige Sockel halt Probleme macht. Um ein Problem 
mit der Platine auszuschließen, habe ich nochmal eine zweite 
zusammengelötet, die nur den 20poligen Sockel enthält; auch hier erhalte 
ich nur einen bunten Strauß an Fehlermeldungen. Ein angeschlossenes 
Conrad-Pong mit ATMega8 lässt sich vom Programmer problemlos 
beschreiben, ich bin mir daher nicht sicher, wo ich den Fehler suchen 
soll.

Hier ein Auszug aus mehreren avrdude-Aufrufen, ohne die Verkabelung oder 
etwas anderes anzufassen:
1
stefan@exa:~/git/tiny-pong […] $ avrdude -p attiny2313 -c stk500v2 -P /dev/diamex 
2

3
avrdude: AVR device initialized and ready to accept instructions
4

5
Reading | ################################################## | 100% 0.02s
6

7
avrdude: Device signature = 0x1e910a
8
avrdude: safemode: Verify error - unable to read hfuse properly. Programmer may not be reliable.
9
avrdude: safemode: To protect your AVR the programming will be aborted
10

11
avrdude done.  Thank you.
12

13
stefan@exa:~/git/tiny-pong […] $ avrdude -p attiny2313 -c stk500v2 -P /dev/diamex 
14

15
avrdude: stk500v2_command(): command failed
16
avrdude: stk500_2_ReceiveMessage(): timeout
17
avrdude: stk500v2_program_enable(): bad STK600 connection status: Unknown (0x64)
18
avrdude: initialization failed, rc=-1
19
         Double check connections and try again, or use -F to override
20
         this check.
21

22

23
avrdude done.  Thank you.
24

25
stefan@exa:~/git/tiny-pong […] $ avrdude -p attiny2313 -c stk500v2 -P /dev/diamex 
26

27
avrdude: stk500v2_command(): command failed
28
^C
29
stefan@exa:~/git/tiny-pong […] $ avrdude -p attiny2313 -c stk500v2 -P /dev/diamex 
30

31
avrdude: AVR device initialized and ready to accept instructions
32

33
Reading | ################################################## | 100% 0.02s
34

35
avrdude: Device signature = 0x1e910a
36
avrdude: safemode: Verify error - unable to read efuse properly. Programmer may not be reliable.
37
avrdude: safemode: To protect your AVR the programming will be aborted
38

39
avrdude done.  Thank you.
40
stefan@exa:~/git/tiny-pong […] $ avrdude -p attiny2313 -c stk500v2 -P /dev/diamex
41

42
avrdude: AVR device initialized and ready to accept instructions
43

44
Reading | ################################################## | 100% 0.02s
45

46
avrdude: Device signature = 0x1e910a
47
avrdude: safemode: Verify error - unable to read lfuse properly. Programmer may not be reliable.
48
avrdude: safemode: To protect your AVR the programming will be aborted
49

50
avrdude done.  Thank you.
51
stefan@exa:~/git/tiny-pong […] $ avrdude -p attiny2313 -c stk500v2 -P /dev/diamex
52

53
avrdude: AVR device initialized and ready to accept instructions
54

55
Reading | ################################################## | 100% 1.49s
56

57
avrdude: Device signature = 0x1e01ff
58
avrdude: Expected signature for ATtiny2313 is 1E 91 0A
59
         Double check chip, or use -F to override this check.
60

61
avrdude done.  Thank you.

Wie man sieht, ist das ganze nicht wirklich deterministisch. Und 
natürlich habe ich schon verschiedene Exemplare des 2313 durchprobiert, 
das ganze zieht sich systematisch durch, eine erfolgreiche 
Programmierung ist da eher Glückssache. Ab und zu gibt e dann noch den 
Fall, dass das initiale Auslesen des Chips keine 0.2s (wie oben) dauert, 
sondern eher 20 Sekunden - und dann meist trotzdem wegen irgendwas 
abgebrochen wird.

Hat jemand eine Idee, woran das liegen könnte? Der Programmer versorgt 
den Sockel mit 5V, die Spannung liegt laut Multimeter und testweise 
angebrachter LED auch an den Beinchen an.
OP #2163493
Lesenswert?

Arne Sachtler schrieb:
> Stell mal die ISP-Freqenz runter!

Danke, das war der entscheidende Tipp. Mit "-B 2" kann ich tatsächlich 
ganz normal mit dem Controller hantieren; nach weiteren Tests muss ich 
feststellen, dass etwa 50% meiner vorrätigen 2313er diese zusätzliche 
Angabe erfordern, die andere Hälfte arbeitet mit den 
Standardeinstellungen klaglos zusammen. Woran mag das liegen? 
Serienstreuung?

Blöderweise lässt sich der Bitclock-Wert "-B 2" nicht in der 
avrdude-Konfiguration fest verankern, evtl. muss ich da mal einen Patch 
einreichen ;-)
Gast #2163610
Lesenswert?

Hi

>die Programmierfrequenz sollte 1/4 der Taktfrequenz nicht übersteigen.

Die Programmierfrequenz muss kleiner als 1/4 der Taktfrequenz sein.

Der AVR ist beim Programmieren ein SPI-Slave. Und da gilt laut 
Datenblatt für den SPI-Takt:

Low periods: Longer than 2 CPU clock cycles.
High periods: Longer than 2 CPU clock cycles.

MfG Spess
#2163626
Lesenswert?

@  Thomas O. (kosmos)

>die Programmierfrequenz sollte 1/4 der Taktfrequenz nicht übersteigen.
>Da die niedrigste interne Frequenz 1 MHz ist stelle ich meinen
>Programmer auf max. 250 kHz ein.

Falsch, des MUSS KLEINER als 1/4 sein, und das SICHER!

http://www.mikrocontroller.net/articles/AVR_Fuses#Reaktivieren_bei_fehlerhaften_Taktquellen-Fuse-Einstellungen

"Die CKDIV8-Fuse ist im Auslieferungszustand "programmed"=0, hat also 
ein Häkchen in PonyProg. Das bedeutet, dass die Quarzfrequenz intern 
durch 8 geteilt wird. D.h. man kann einen neuen AVR mit theoretisch 
maximal 250 kHz ISP-Takt programmieren. Praktisch sollte man maximal 125 
kHz nutzen, denn durch Toleranzen kann der interne RC-Oszillator auch 
mal mit 900 kHz laufen, dann geht es mit 250 kHz nicht oder nur 
sporadisch. Ggf. mit noch niedrigeren Taktraten probieren, wenn das der 
Programmieradapter erlaubt."

MFG
Falk
OP #2166414
Lesenswert?

Danke an alle für die guten Hinweise, die mir eine handvoll bereits 
abgeschriebener Tiny2313er wieder zurück in die Bastelbox geführt haben.

Der Patch für avrdude ist auch soweit fertig, um die 
Standard-Einstellung für den Bitclock-Wert uf konservative Werte 
festzunageln, mal schauen, ob/wann der Einzug in deren Subversion hält:
https://github.com/wertarbyte/avrdude/compare/master...default_bitclock

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren