moin,
ich habe hier an meinem ATmega32 ein paar Steuerausgänge an die Pins
TCK, TMS, TDO und TDI gehängt.
Programmieren tue ich Mit dem STK500 über die 6-ISP-Buchse.
Am Anfang hat es mit meiner Pinbelegung nicht so geklappt wie es sollte.
Habe dann im STK-Interface beim Programmieren den Haken bei JTAGEN
gelöscht.
Damit hat dann zumindest der Pin TCK das getan, was er tun sollte...
Nur wie kriege Ich die Pins TMS, TDO und TDI dazu ihre normale
Portfunktionalität wahrzunehmen?
Den Haken bei SPIEN kann ich irgendwie nicht löschen...
mfg
Hi
>Nur wie kriege Ich die Pins TMS, TDO und TDI dazu ihre normale>Portfunktionalität wahrzunehmen?
Da hast du wohl noch eien anderen Fehler. Mit dem Löschen der JTAG-Fuse
werden alle vier Pins freigescaltet.
MfG spess
...derzeit wird meine Schaltung noch über die ISP-Buchse des STK mit
Energie versorgt.
Bevor ich eine Strippe ziehe:
Kann es sein, dass dies der Grund ist, warum die Portfunktionalität von
TMS, TDO und TDI derzeit nicht wahrgenommen wird, obwohl der Haken bei
JTAGEN gelöscht ist?
mfg
>>Den Haken bei SPIEN kann ich irgendwie nicht löschen...>>Der sollte auch besser so bleiben, wenn du den Controller weiterhin>programmieren willst.
Ich dachte bisher, dass über das STK immer eine Verbindung zum
Controller möglich wäre, man sich damit also garnicht aussperren
könnte...
@Atmega32 (Gast)
>Ich dachte bisher, dass über das STK immer eine Verbindung zum>Controller möglich wäre, man sich damit also garnicht aussperren>könnte...
Mann kann ihn per STK500 und dessen HV-Programmierung wiederbeleben.
Aber das ist kein Grund, SPIEN vorsätzlich zu deaktivieren.
ja, dass das Problem bei den SPIEN liegt, war ein Schuss in den Ofen...
Die ISP-Programmierung findet aschließlich über MOSI, MISO etc. statt...
Also ich habe den Haken JTAGEN auf disable gesetzt.
Die Pins C3, C4 und C5 (TMS, TDO, TDI) machen Schwierigkeiten.
Mein Programm sieht wie folgt aus:
...also das Problem ist noch aktuell...
Ich habe mittlerweile drei Wege versucht.
Erstens:
Nur über das JTAGEN Flag wie bereits oben beschrieben. Dort war das
Resultat, dass ich den TAP-Pin TCK als normalen Portpin nutzen konnte,
jedoch die Pins TMS, TDO, TDI nicht so geschaltet haben, wie ich es laut
Programm erwartet hätte.
Zweitens:
Dann habe ich das ganze auch rein über Software versucht auszuschalten
und das JTD-Bit im MCUCSR gesetzt.
Der Code dafür:
uint8_t mcucsr = MCUCSR;
mcucsr |= (1 << JTD);
MCUCSR = mcucsr;
MCUCSR = mcucsr;
Bei abgeschalteter Optimierung tat sich auf allen vier JTAG-Pins nichts.
Bei optimaler Optimierung (-0s) hatte ich das gleiche Resultat wie bei
der ersten Variante, nämlich dass der TCK-Pin funktioniert hat, die
übrigen drei nicht.
Drittens:
Kombinationen aus Variante 1 und Variante 2 haben dieselben Ergebnisse
geliefert, allerdings unabhängig vom Grad der Compileroptimierung... war
ja irgendwie zu erwarten...
Nun gehen mir die Ideen langsam aus, woran es noch liegen kann, dass ich
die JTAG-Pins nicht alle nutzen kann...
Die Beschaltung ist übrigens bei allen vier Pins identisch über einen
PMOS-Transistor. Das Messergebnis liegt bei konstant 0V:
1
+5V +5V
2
| |
3
100k |
4
| |
5
| ||---
6
Pin---10Ohm---|
7
||>--
8
|
9
|
10
Messung(Leerlauf)
...ich halte es für unwahrscheinlich, dass die drei Pins zerschossen
wurden... woran also kann es liegen, dass TMS, TDI und TDO nicht
funktionieren?
ATmega32 schrieb:> Bei abgeschalteter Optimierung tat sich auf allen vier JTAG-Pins nichts.
Das ist nicht verwunderlich, weil dann die zeitlichen Randbedingungen
für JTD nicht eingehalten werden.
> Bei optimaler Optimierung (-0s) hatte ich das gleiche Resultat wie bei> der ersten Variante, nämlich dass der TCK-Pin funktioniert hat, die> übrigen drei nicht.
Dann hast du noch eine andere Gurke in deiner Hardware. JTAG ist,
egal ob man es mit JTD oder mit Abklemmen von JTAGEN abschaltet,
ganz sicher nicht mehr aktiv.
@ ATmega32 (Gast)
>Nun gehen mir die Ideen langsam aus, woran es noch liegen kann, dass ich>die JTAG-Pins nicht alle nutzen kann...
Wie wäre es, mal DIREKT am Pin zu messen?
>Die Beschaltung ist übrigens bei allen vier Pins identisch über einen>PMOS-Transistor. Das Messergebnis liegt bei konstant 0V:
Was soll das? Miss erstmal DIREKT am AVR!
Siehe Fehlersuche.
damit hast du jetzt erst mal ein Testprogramm, bei dem man nicht 800
#define nach Tippfehlern absuchen muss.
JTAGEN ist disabled? Dann müssen die Portpins auch toggeln. Wenn nicht,
dann häng mal deine externe Hardware von den Pins ab.
Erst dann wenns dann immer noch nicht toggelt, würde ich ins Auge fassem
dass du irgendwie die Outputtreiber geschossen hast. Persönlich würde
ich das allerdings als eher unwahrscheinlich ansehen, die halten schon
was aus.
PS: Und schalt das JTAG per FUSE ab!