Forum: Compiler & IDEs JTAG zum programmieren und als I/0


von Tobias (Gast)


Lesenswert?

Hallo,

ich habe ein fertiges Board zum "spielen" bekommen. Ich möchte daran ein 
Display mit HD44780 anschließen. leider werden außer JTAG und CAN keine 
Ports/Pins nach außen durchgeführt. Idee:
JTAG abschalten per

MCUCSR = (1<<JTD);
MCUCSR = (1<<JTD);

und dann die verfügbaren Pins als zum Anschluss des Displays nutzen (mit 
Portexpander 74HC595). Ich benötige aber JTAG auch zum Programmieren des 
Chips. ICh habe gelesen, das sich der Programmer (JTAGIce mkII in meinem 
Falle) trotz per Register abgeschaltetem JTAG noch verbinden kann. Ist 
dies Richtig oder schließe ich mich durch die obigen zwei Zeilen vom 
Board aus? Danke für eure Hilfe.

von (prx) A. K. (prx)


Lesenswert?

Es könnte sein, dass man per JTAG programmieren kann, wenn zwischen 
Reset und Deaktivierung des JTAG genug Zeit bleibt. So dass der 
Programmer die Initialisierung und somit die Deaktivierung aufhalten 
kann.

von Tobias (Gast)


Lesenswert?

Vielen Dank für deine Antwort. Wie definiere ich denn diese Zeit, ein 
Delay einzubauen ist natürlich nicht erste Wahl. Laut einer Aussage hier 
im Forum muss der Programmer nSRST innerhalb von zwei Taktzyklen senden. 
Leider finde ich hierzu keine Quelle die dies belegt.

von Tobias (Gast)


Lesenswert?

Hier nocheinmal das Zitat:

To be able to use the JTAG interface, the JTAGEN Fuse must be 
programmed. The device is default shipped with the fuse programmed. In 
addition, the JTD bit in MCUCR must be cleared. Alternatively, if the 
JTD bit is set, the external reset can be forced low. Then, the JTD bit 
will be cleared after two chip clocks, and the JTAG pins are available 
for programming. This provides a means of using the JTAG pins as normal 
port pins in Running mode while still allowing In-System Programming via 
the JTAG interface. Note that this technique can not be used when
for Boundary-scan or On-chip Debug. In these cases the dedicated for 
this purpose.

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


Lesenswert?

Tobias schrieb:
> Note that this technique can not be used when
> for Boundary-scan or On-chip Debug.

On-chip debugging kann man trotzdem noch benutzen, außer dass die
Pins dann natürlich nicht ihre IO-Port-Funktion erfüllen können.
Das geht, indem man an die erste der Anweisungen, die das JTD-Bit
setzen, einen Breakpoint setzt und dann im single step über beide
diese Anweisungen geht.  Dadurch ist die zeitliche Bedingung (muss
zweimal innerhalb von 4 Takten gesetzt werden) nicht mehr erfüllt,
und das Setzen des JTD wird ignoriert.

von Tobias (Gast)


Lesenswert?

Danke, das klingt ja super. Das Display am JTAG soll während der 
Programmierung abnehmbar sein. das Display wird beim Programmieren vom 
JTAG getrennt und dann der JTAGIce dran. Danach ein Reset durchführen, 
JTD in MCUCSR auf 0 also JTAG wieder auf "enable" und Programmieren 
sowie durch setzen des Breakpoints auch Debuggen. Sollte in meinem 
Gedankengang etwas falsch sein bitte antworten, ansonsten Danke für die 
Hilfe!

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.