PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : N-Link ARM JTAG - Hopp oder top?



tobimc
01.11.2006, 08:28
Hi

Da ich ein bisschen in die ARM-Geschichte einsteigen will dachte ich mir; "Gut, legst dir mal nen JTAG für die Dinger zu".
Klar, der AT91SAM7S64, den ich jetzt zum spielen hier habe hat einen Bootloader über UART, aber ich wollte was gescheites zum Programmieren und auch zum Gebuggen.

Und wie der Himmel so will fand ich bei ebay den N-Link ARM JTAG von OLIMEX
(http://www.micro4you.com einfach nach N-Link suchen)

Frage: Taugt das Teil was? Ich meine mit $50 ist es ja nicht ganz billig.
UND, wenn nein, was würdet ihr empfehlen?

Viele Grüße,
Tobi

fluchtpunkt
28.11.2006, 04:31
falls es fuer den Anfang was billigeres sein soll, und du in der Lage bist LQFP-48 zu loeten; dann wuerde ich dir ein JTAG auf Basis des FT2232 (http://www.ftdichip.com/Documents/DataSheets/ds2232c_15.pdf) empfehlen.

Ist von der Schaltung supereinfach. Einfach die Jtag Pins (TCK, TMS...) von PortA des FT2232 ueber ein paar Widerstaende an nen Connector legen und den Rest laut Datenblatt aufbauen.
Kostet dich einen FT2232 (8.80E@reichelt) ein paar Widerstaende, ne Hand voll Kondensatoren, nen Quarz und ne selbstgemachte Platine.
Empfehlenswert ist auch noch nen 3 Pin Header, damit kann man dann gleich den Debugoutput der CPU an den Rechner uebertragen; der muss dann natuerlich an PortB.


Das Ding hat dann aber keine Levelkonvertierung. Aber falls dein Controller 5V kompatibel ist sollte das kein Problem sein. Die AT91SAM-Serie schafft das. Kannst auch die Levels auf 3.3V stellen, ist auch im Datenblatt erklaert.


Ist natuerlich die Frage welche Entwicklungsumgebung du benutzen willst. Hab das ganze bis jetzt nur in Zusammenarbeit mit OpenOCD getestet. Und das funktioniert natuerlich wunderbar.

Falls du oft mehrere Seriell-USB Wandler benutzt kannst du fuer die Luxusvariante auch noch ein kleines EEPROM auf die Platine packen. Damit der Rechner immer weiss welcher der Adapter nun das JTAG ist.


Fertigen Schaltplan kann ich jetzt zwar nicht liefern, der wird sich aber wahrscheinlich ueber google finden. Kann man mit n bisschen Denken auch aus dem FT2232 Datenblatt nehmen



Sorry fuer die wirre Schreibweise...

tobimc
08.12.2006, 17:46
Hi

Der FT2232 gefällt mir ja mal ausserordentlich gut!
Kann ich den einfach zum programmieren von ARMs benutzen (Also von solchen, die "5V-resistent" sind)?
Das wäre ja dann absolut supergenial, denn das wäre unabhängig von der Zielhardware und absolut universell...

"Und das geht wirklich?!"

Man wird wohl einen speziellen FTDI-Treiber brauchen, oder?

Ich habe ehrlichgesagt keinen blassen Schimmer von ARM Entwicklungsumgebungen.
Was muss die können um den FT2232 zu unterstützen?

VLG Tobi

fluchtpunkt
13.12.2006, 00:00
die Treiber sind die FTDI Standard Treiber, du brauchst zusaetzlich noch openOCD. Dann kannst du einfach mit ein paar Befehlen flashen, und via Telnet kannst du debuggen.
Das ganze kann man afaik zB in eclipse einbauen. Persoenlich nutze ich einfach nur die Kommandozeile getrennt von kdevelop, war bis jetz einfach zu faul das ganze da irgendwie zu integrieren.
Bei winarm (vgl. winavr) sollte eigentlich alles dabei sein was du brauchst.

Lies einfach mal hier weiter: http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/openocd_intro/index.html

tobimc
13.12.2006, 14:01
HI.

Das hört sich echt gut an. Der FT mit passender USB-Büchse ist schon auf der Bestellliste.

Unter welchem Punkt wurd denn JTAG im FT2232-Datasheet geführt?

VLG Tobi

fluchtpunkt
20.12.2006, 00:49
soooo, erstmal sorry das ich immer recht lange brauch mit einer Antwort; zumindest sollten die Antwortbenachrichtigungen nun wieder bei mir ankommen, hab nun nen aktiven Mailaccount eingetragen...

im Datenblatt steht jetzt nicht sooo viel zum Thema JTAG, halt nur die Pinzuordnungen von TCK TDI TDO und TMS. Mehr braucht man ja normal auch nicht; irgendwo in irgendwelchen Appnotes findet man sicher mehr zum Thema MPSSE (Multi-Protocol Synchronous Serial Engine). Irgendwo in der Diplomarbeit zu OpenOCD findet sich wahrscheinlich naeheres :) => http://openocd.berlios.de/thesis.pdf


http://www.fh-augsburg.de/~hhoegl/proj/usbjtag/usbjtag.html
Da gibt es 2 unterschiedliche Varianten, eine Luxusvariante mit allem Schnickschnack und die einfach Variante die ich gebaut hatte, nur das ich in die JTAG Verbindungen noch Strombegrenzungswiderstaende eingebaut habe.

Starchild
20.12.2006, 20:02
Ich habe mir ebenfalls einen JTAG Adapter mit einem FT2232C und 2 ADUM1401CRW gebastelt. Diese Levelconverter /Schutztreiber sind deutlich schneller als die auf http://www.fh-augsburg.de/~hhoegl/proj/usbjtag/usbjtag.html verwendete Variante.
Ich habe die dort und im Datenblatt des FT2232 verwendete Pinbelegunf für JTAG verwendet, die ja von der Pinbelegung des Amontec Teils abweicht.
Wie muss meine .ini File aussehen? Oder kann ich meinen Adapter als Amontec oder Olimex anmelden?
Muss man mit MProg von FTDI das EEPROM neu beschreiben?

fluchtpunkt
23.12.2006, 05:46
uuuh. Ich hab meine openocd.cfg mehr oder weniger per Try and error zusammengepfuscht.
Ist nicht sehr huebsch aber vielleicht hilft es ja ein wenig
fuer den adapter relevant duerften eigentlich nur die 2 Zeilen interface und ft22.... sein.


telnet_port 4444
gdb_port 3333

daemon_startup reset

interface ft2232
ft2232_vid_pid 0x0403 0x6010
#ft2232_layout "olimex-jtag"

jtag_speed 5

#reset_config trst_and_srst srst_pulls_trst
reset_config srst_only

jtag_device 4 0x1 0xf 0xe
#jtag_device 5 0x1 0x1F 0x1

target arm7tdmi little run_and_halt 0 arm7tdmi

run_and_halt_time 0 30
working_area 0 0x00200000 0x4000 nobackup
flash bank at91sam7 0 0 0 0 0

Starchild
23.12.2006, 15:58
Hast du das EEPROM irgendwie beschrieben?
Und welches Layout hast du verwendet?

fluchtpunkt
23.12.2006, 17:01
ich habe garkein eeprom auf meinem JTAG (meins entspricht ungefaehr dem Protype1 von der FH Augsburg Seite); das hat sich zwar mittlerweile als Fehler herausgestellt, aber benoetigen tut man das nicht zwingend.
Man hat mit eeprom nur den Vorteil das man das JTAG eindeutig als JTAG ausweisen kann, und openocd dann immer genau dieses verwendet. Wenn man mehrere FT2232 Boards verwendet um mehrere serielle Schnittstellen zu haben, kommt man frueher oder spaeter in die Situation das irgendwas am JTAG haengt; was man nur durch abklemmen vom USB loesen kann.
Und dann hat man das Problem das openocd nicht weiss auf welchen der Boards nun das JTAG ist. Dann heisst es alle Programme schliessen, alle Boards abziehen und in der richtigen Reihenfolge wieder anklemmen.

tobimc
23.12.2006, 20:44
Hi

Da ist immer die Rede von Debugging. Ich möchte damit aber ARMs von Atmel Programmieren.
Geht das mit WinARM und dem 2232?

VLG Tobi

Starchild
23.12.2006, 21:14
Ich verwende Yagarto.
Mittlerweile klappt die Kommunikation OpenOCD- Ft2232 auch.
Das Problem das bleibt ist der Parameter ft2232_layout.
Ich habe den 2. Prototypen von http://www.fh-augsburg.de/~hhoegl/proj/usbjtag/usbjtag.html
nachgebaut.
Wenn alles funktioniert werde ich meine Ergebnisse veröffentlichen.

fluchtpunkt
23.12.2006, 21:29
Mittlerweile klappt die Kommunikation OpenOCD- Ft2232 auch.
Das heisst? Kannst du via Telnet auf den ARM zugreifen?



Da ist immer die Rede von Debugging. Ich möchte damit aber ARMs von Atmel Programmieren.
Natuerlich kann man auch den Programmcode via JTAG auf den Controller transferieren. Dafuer kann man sich ein Script schreiben.

#!/usr/bin/expect
proc msleep {N} {
after [expr {int($N)}]
}
set timeout 20
spawn telnet localhost 4444
expect {
"Debugger" {}
timeout {exit}
}
expect {
">" {send "reset init\r"}
timeout {exit}
}
expect {
">" {send "sleep 100\r"}
timeout {exit}
}
expect {
">" {send "resume 0\r"}
timeout {exit}
}
expect {
">" {send "sleep 500\r"}
timeout {exit}
}
expect {
">" {send "halt\r"}
timeout {exit}
}
expect {
">" {send "sleep 500\r"}
timeout {exit}
}
expect {
">" {send "mww 0xFFFFFC30 0x07\r"}
timeout {exit}
}
expect {
">" {send "sleep 250\r"}
timeout {exit}
}
expect {
">" {send "flash probe 0\r"}
timeout {exit}
}
expect {
">" {send "flash write 0 /home/fluchtpunkt/projects/svn/blabla/blabla.bin 0x0\r"}
timeout {exit}
}
expect {
">" {send "reset init\r"}
timeout {exit}
}
expect {
">" {send "sleep 300\r"}
timeout {exit}
}
expect {
">" {send "resume 0\r"}
timeout {exit}
}
expect {
">" {send "exit\r"}
timeout {exit}
}
msleep 300

Dann kann man durch ./script_flash das Programm laden. Das Script erspart einen das connecten via telnet und dann das eingeben von den ganzen Befehlen. Verwende das unter Linux, sollte sich aber auch unter windows und cygwin zum funktionieren ueberreden lassen.

Starchild
24.12.2006, 10:04
Ich kann mit dem FT2232 kommunizieren, aber er scheint die falschen Pins zu schalten.
Wie kann ich mitteilen, wo welcher Pin hängt?

Ich bekomme immer folgende Fehlermeldung:
Error: jtag.c:1149 jtag_validate_chain(): Error validating JTAG scan chain, IR mismatch, scan returned 0x3f