Forum: Mikrocontroller und Digitale Elektronik JTAG lässt sich nicht deaktivieren (ATMega32)


von Hack K. (hackerfleisch)


Lesenswert?

Hallo zusammen,

µC:A ATMega32 mit 16MHz Quarz. Geflasht wird mit ISP
VCC = 5V

Ich beobachte folgendes Problem:
Ich möchte den PORTC vom ATMega32 als I/O verwenden. Alternativ liegt ja 
darüber das JTAG Interface.
Im Code ist der PORTC als Ausgang deklariert, an diesem Port hängen 
jeweils 8 LEDs gegen Masse.

D.h. JTAG Fuse Bit muss "deaktiviert" werden (AVR Studio5 oder 
myAVR_ProgTool[vom mySmartUSBlight dongle]).

Egal über welches Tool ich die Fusebits ändere (beim auslesen sehe ich, 
dass JTAG auch deaktiviert ist) bleibt wohl JTAG aktiviert.
Das sehe ich, indem z.B. die LED am PORTC PC0[SCL] ganz leicht glimmt.
Mit dem Oszi messe ich dort auch einen Takt (~9,6KHz) mit einer 
Positiven Pulsbreite von ~440ns.

Ich habe auch schon versucht JTAG parallel per SW abzuschalten (
1
MCUSR &= ~(1 << JTD)
;), ohne erfolg.
Beim einschalten des µC sehe ich auch ganz kurz die 8 LED aufblitzen (da 
diese beim initialisieren auf High gesetzt werden sollen):
1
DDRC = 0xFF;
2
PORTC |= (1 << PC0) | (1<< PC1) | (1 << PC2) | (1 << PC3) | (1 << PC4) | (1 << PC5) | (1 << PC6) | (1 << PC7);

Auszug der Fuses von AVR Studio 5 (AVR Programming)
OCDEN []
JTAGEN []
SPIEN [X]
CKOPT []
EESAVE []
BOOTSZ 2048W_3800
BOOTRST []
BODLEVEL 2V7
BODEN []
SUT_CKSEL EXTHIFXTALRES_16KCK_64MS


Beim auslesen der Fusebits über myAVR ProgTool:
Low Fuse = 0xFF
High Fuse = 0xD9
Lockbits = oxFF


Ich weis, es gibt viele Beiträge darüber, jedoch wird überall gepostet, 
dass JTAG disabled werden soll, dies ist bei mir aber der Fall, trotzdem 
kann ich kein Bit vom PORTC setzen.

Habt Ihr einen Tipp für mich?

Ach ja, zudem würde mich noch folgendes interessieren:
Wenn ich das FuseBit SPIEN deaktiviere ist die SPI Schnittstelle ja 
ausgeschaltet. Somit wäre der µC nicht mehr über mein mySmartUSBlight 
dongle programmierbar, oder? Oder geht dieses Interface immer, da ja 
beim Flashen der Reset Pin auf low gezogen wird und dadurch der µC immer 
über die ISP Schnittstelle programmierbar ist?
Ich habe das zwar noch nciht probiert, aber würde mich interessieren. :)

Danke und Gruß
Thomas

von spess53 (Gast)


Lesenswert?

Hi

>Egal über welches Tool ich die Fusebits ändere (beim auslesen sehe ich,
>dass JTAG auch deaktiviert ist) bleibt wohl JTAG aktiviert.
>Das sehe ich, indem z.B. die LED am PORTC PC0[SCL] ganz leicht glimmt.
>Mit dem Oszi messe ich dort auch einen Takt (~9,6KHz) mit einer
>Positiven Pulsbreite von ~440ns.

Das JTAG-Interface betrifft nur die PINs PC2...5. PC0 hat nichts damit 
zu tun. Da hast du ein anderes Problem.

>Ach ja, zudem würde mich noch folgendes interessieren:
>Wenn ich das FuseBit SPIEN deaktiviere ist die SPI Schnittstelle ja
>ausgeschaltet.

Datenblatt:

'The SPIEN Fuse is not accessible in SPI Serial Programming mode.'

MfG Spess

von Hack K. (hackerfleisch)


Lesenswert?

Argh...
Du hast ja recht...
Hab meinen Fehler auch schon gefunden, lag am Code, dachte der is 
"clean" aber in Zeile ~550 war ein Fehler. Warum werden einige Programme 
immer so groß. ^^

Aber danke für Deinen Tipp, hab mich total an JTAG aufgehängt und alles 
andere ausgeblendet...

Zu der andrern Frag von mir.
D.h. es ist egal ob das Bit gesetzt ist oder nicht? Da es beim flashen 
von ISP nicht zugänglich ist? Oder wie?

Danke und Gruß
Thomas

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Thomas D. schrieb:
> Ich habe auch schon versucht JTAG parallel per SW abzuschalten
> (MCUSR &= ~(1 << JTD);),
> ohne erfolg.

Klar.  So kann das auch nicht funktionieren.

"JTD" heißt "JTAG disable".  Das heißt, man muss das Bit setzen,
damit JTAG abgeschaltet wird.  Zur Sicherheit muss man es zweimal
hintereinander innerhalb von 4 CPU-Takten setzen, was beim GCC nur
funktioniert, wenn man auch die Optimierung eingeschaltet hat.

Damit ist das JTD-Bit übrigens eine brauchbare Alternative zur Fuse,
wenn man die grundsätzliche Zugreifbarkeit über JTAG noch behalten
will, obwohl sie im laufenden Betrieb abgeschaltet werden soll.

von ali (Gast)


Lesenswert?

ganz einfach mit myavr tool; einfach bei high fuses den haken bei "JTAG 
interface enable" rausmachen. und die fuses brennen, stand vor dem 
selben Problem, wollte an die cports display dranhängen.
denke ich konnte dir helfen

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.