Hallo. Ich habe vor, statt eines PICs mal einen ARM zu benutzen. Es gibt
für wenig Geld ja von einigen Herstellern Eval-Boards, die einen JTAG
Programmer mit drauf haben. Doch da ich soetwas für unpraktisch halte
(vorallem, wenn man mal den Hersteller wechseln will), wollte ich
Fragen, obs da nicht einen Universalprogrammer gibt.
Inwiefern braucht man denn überhaupt einen? Ansich würde ich ja denken,
dass JTAG eben JTAG ist und man somit alle uCs (und ansich auch FPGAs)
damit beschreiben kann. Dem ist so wie ich das mitbekommen habe aber
nicht so. Doch warum nicht? Einen USB zu JTAG IC gibt es doch von z.B.
FTDI, der Rest sollte doch nur Software sein.
So wie ich das recherchiert habe, ist einer der universellsten
einsetzbaren Programmer der SEGGER J-LINK. Ich wunder mich, wieso es
sowas nicht als OpenSource gibt, so wie der Sprut-Brenner. Es gibt doch
so viele Hammer Projekte und Leute, die es drauf haben. Aber sowas gibt
es nicht? Oder habe ich es nur übersehen? Gut, die Zeit der Sprutbrenner
ist ansich vorbei, da es das PICKIT schon für 25$ gibt. Aber so ein
SEGGER kostet ja schon einiges. Mal abgesehen davon, dass man ein Gerät
für PIC32, ein paar Atmels, ARM (ST, NXP, TI, ...), einige DSPs und
FPGAs (XILINX, Altera, Microsemi, Lattice) hätte. Kein ständiges
wechseln "tausender" einzelnen Programmer. Zugegeben, bei FPGAs ist
diese Variation vielleicht nicht erforderlich, da es wirklich große
Unterschiede im Aufbau und IDE gibt (wobei auf der anderen Seite ja nur
ein simpler Programm-Flash beschrieben werden muss), aber bei der
Kompatibilität, mit der die ARM Technologie immer beworben wird, ist
soetwas denke ich Pflicht. Eine IDE, ein Compiler (da ja alle ARMs
gleich sein sollen) und ein Programmer. Hat ein STM32F4 Vorteile, dann
nehme ich den. Im nächsten Projekt könnte es dann ein EFM32 Gecko sein
oder ein LPC...
So ein Selbstbau-Universal Programmer muss für mich nichtmal Debugging
können. Ich würde aber gerne eine Software für irgendeinen ARM schreiben
können und dieses Programm dann auch auf den uC. Für mich macht dieser
Mangel an Programmer, die zumindest alle ARMs unterstützen, die ARMs
"uninteressant". Wenn ich Leistung brauche, habe ich noch den PIC32.
Doch ich wollte mich ja mit den ARMs beschäftigen, eben weil man da ja
die Wahl von verschiedenen Herstellern hat. Sollte es so sein, dass man
für jeden Hersteller nen eigenen Programmer, IDE und Compiler braucht,
dann verstehe ich den Sinn vom ARM und JTAG Standard nicht. Dann sind
das doch nichts anderes als verschiedene, untereinander komplett
unkompatible 32bit uCs.
ich schrieb:> der Rest sollte doch nur Software sein.Sollte. Aber die Schnittstellen unterschiedlicher Systeme zu den
JTAG-Adaptern ist sehr unterschiedlich, wie auch die über das reine
JTAG-Protokoll hinausgehende Datenübertragung sich von Prozessorfamilie
zu Prozessorfamilie unterscheidet.
Deswegen lassen sich AVRs auch nicht mit selbstgebauten JTAG-Adaptern à
la "Wiggler" (für den Frickelport) oder FT2232-basierten JTAG-Adaptern
programmieren/debuggen, und bei MSP430 sieht das nicht anders aus.
Eine "Universallösung" ist daher nicht ohne weiteres möglich.
ich schrieb:> Ansich würde ich ja denken,> dass JTAG eben JTAG ist
Im Prinzip ist es das.
Aber JTAG heißt nichts weiter als, es gehen 4 Leitungen zum Chip, auf
denen sowas wie SPI läuft.
Was für ein Protokoll auf diesen 4 Leitungen gesprochen wird, halten die
Chiphersteller geheim und ist für jeden Chip unterschiedlich.
Ich vermute mal, bei den selbstbau JTAGs muß mal jemand an einem
professionellen Gerät mitgelauscht und das Protokoll entschlüsselt
haben.
Rufus Τ. Firefly schrieb:> Aber die Schnittstellen unterschiedlicher Systeme zu den> JTAG-Adaptern ist sehr unterschiedlich
Die JTAG-Schnittstelle ist einheitlich, da gibt es keine Unterschiede,
da es nur die Signale TMS, TCK, TDI, TDO und optional TRST gibt. Das ist
bei allen Herstellern gleich, die Schnittstelle ist in IEEE1149.1
genormt.
Von CooCox gibt es das CoLinkEx als Selbstabauprojekt, das unterstützt
viele Cortex M Prozessoren (M0, M0+, M3, M4).
Kann man auch selbst bauen, als Prozessor ist der LPC1343 verbaut, der
lässt sich nämlich ohne JTAG-Adapter flashen (meldet sich als
USB-Massenspeicher beim Anstecken an den USB-Port, und die Firmware wird
einfach darauf kopiert).
Oliver warf:
>Ich werfe mal das hier in den Raum:>http://www.versaloon.com/
Aua! Guck das nächste Mal erst in den Raum, ob jemand im Wege steht....
;-)
JTagger schrieb:> Rufus Τ. Firefly schrieb:>> Aber die Schnittstellen unterschiedlicher Systeme zu den>> JTAG-Adaptern ist sehr unterschiedlich>> Die JTAG-Schnittstelle ist einheitlich
Du hast exakt nicht verstanden, was ich geschrieben habe. Es geht
nicht um die elektrische Schnittstelle, sondern um den "Rest"
drumherum.
Nur zwei kleine, aber nicht banale Beispiele:
a) Wie kommuniziert die Software unter Betriebssystem XY mit dem
jeweiligen JTAG-Adapter?
b) Wie wird über das JTAG-Interface z.B. das µC-interne FLASH
programmiert?
Wären diese Punkte standardisiert, könnte man AVRs auch mit anderen
JTAG-Interfaces als dem recht teuren JTAG-ICE von Atmel programmieren
und Debuggen, so auch mit einem Frickelport-"Wiggler" oder einem
FT2232-basierenden OpenOCD-Adapter ...
Kann man aber nicht, genausowenig wie man das mit MSP430 statt AVR
anstellen kann.
Ebensowenig kann man anstelle von µCs irgendwelche FPGAs damit
ansteuern.
Und das alles, obwohl die JTAG-Schnittstelle ja "einheitlich" ist.
Gerhard O. schrieb:> Hallo "ich">> irgendwie finde ich, daß sich der Selbstbau hier nicht sehr lohnt weil> alles (HW+SW) zusammen funktionieren muß. Sogar bei namhaften> Herstellern gibt es oft ärgerliche Probleme beim Betrieb. Aber> vielleicht wäre das von Interesse:>> für Hobby und Schulzwecke gibt es den JLINK schon ab $CDN77 bei uns. Das> ist doch schon sehr günstig. Man darf ihn nur nicht kommerziell> verwenden.>> http://www.digikey.ca/product-detail/en/8.08.90%20...>> Benutzungsbedingungen:>> http://media.digikey.com/pdf/Data%20Sheets/Segger%...>> mfg,> Gerhard
Ja. Die Edition habe ich auch gesehen, doch durch das kürzel Edu dachte
ich,, es gilt nur für Schulen/Unis und deren Besucher..
Rufus Τ. Firefly schrieb:> ich schrieb:>> der Rest sollte doch nur Software sein.>> Sollte. Aber die Schnittstellen unterschiedlicher Systeme zu den> JTAG-Adaptern ist sehr unterschiedlich, wie auch die über das reine> JTAG-Protokoll hinausgehende Datenübertragung sich von Prozessorfamilie> zu Prozessorfamilie unterscheidet.>> Deswegen lassen sich AVRs auch nicht mit selbstgebauten JTAG-Adaptern à> la "Wiggler" (für den Frickelport) oder FT2232-basierten JTAG-Adaptern> programmieren/debuggen, und bei MSP430 sieht das nicht anders aus.>> Eine "Universallösung" ist daher nicht ohne weiteres möglich.
Ich hatte mir das so vorgestellt: Ein Bauteil (FTxxxx oder nen uC)
bekommt von einer PC-Software via USB eine Anweisung (z.B.
programmieren), ein Device (z.B. STM32F4xxx) und die hex-file bzw dessen
Inhalt. Nun ist es an dem uC die Daten via JTag zum Device zu bekommen.
Je nach dem, was der Ziel-uC braucht, werden mehr oder weniger IOs
genutzt und auch die Übertragung ansich kann ja anhand der übermittelten
Device-Info umgestellt werden.
Peter Dannegger schrieb:> ich schrieb:>> Ansich würde ich ja denken,>> dass JTAG eben JTAG ist>> Im Prinzip ist es das.> Aber JTAG heißt nichts weiter als, es gehen 4 Leitungen zum Chip, auf> denen sowas wie SPI läuft.>> Was für ein Protokoll auf diesen 4 Leitungen gesprochen wird, halten die> Chiphersteller geheim und ist für jeden Chip unterschiedlich.>> Ich vermute mal, bei den selbstbau JTAGs muß mal jemand an einem> professionellen Gerät mitgelauscht und das Protokoll entschlüsselt> haben.
Ach ist das nicht offen? Aber mithören wäre eine Möglichkeit.
GB schrieb:> Von CooCox gibt es das CoLinkEx als Selbstabauprojekt, das> unterstützt> viele Cortex M Prozessoren (M0, M0+, M3, M4).> Kann man auch selbst bauen, als Prozessor ist der LPC1343 verbaut, der> lässt sich nämlich ohne JTAG-Adapter flashen (meldet sich als> USB-Massenspeicher beim Anstecken an den USB-Port, und die Firmware wird> einfach darauf kopiert).
Sieht nicht schlecht aus. Der LPC1341 scheint ja für sowas wie gemacht
zu sein. Anders als beim Sprut Brenner8. Mein Gedanke wäre also, diesen
uC zu holen (Mouser: 3,74€) ein bisschen Hühnerfutter und eine kleine
Platine (ggf selbst gemacht). Macht zusammen keine 5€. Ist gegenüber dem
(dafür ansich schon günstigen) J-LINK EDU ein 10tel so teuer, kann
natürlich auch weniger. Wenn man aber nur ein, zwei Projekte mit einem
(speziellen) ARM realisieren will, lohnen sich selbst die 50€ nicht.
Aber wieso unterstützt der nur die/ein paar LPC1xxx und keine LPC2xxx,
3xxx und 4xxx? Ich hätte gedacht, dass die Übertragung gleich aussieht.
Oliver Ju. schrieb:> Ich werfe mal das hier in den Raum:> http://www.versaloon.com/> Kingt interessant.>> Grüße Oliver
Sieht auch gut aus. Ist weniger drauf, unterstützt aber auch weniger
Bauteile.
Rufus Τ. Firefly schrieb:> Nur zwei kleine, aber nicht banale Beispiele:>> a) Wie kommuniziert die Software unter Betriebssystem XY mit dem> jeweiligen JTAG-Adapter?
Das sehe ich auch als Hauptproblem, dass die Kommunikation zwischen der
IDE und dem JTAG-Adapter herstellerspezifisch ist.
Also scheitert ein Universal-JTAG-Programmer wahrscheinlich an der
Integration, oder müsste irgndwelche Treiber-Software für jede IDE
mitbringen, um die JTAG-Adapter der Hersteller zu emulieren. Die
Alternative ist eine Stand-alone-Programmer-Lösung, die eine zuvor
ausgewählte Datei einfach in den Chip schreibt (am besten über ein
Mini-Fenster was immer im Vordergrund steht, so wie beim Win-PIC).
> b) Wie wird über das JTAG-Interface z.B. das µC-interne FLASH> programmiert?
Hm, weiß ich nicht so genau. Aber da JTAG prinzipiell das
In-Reihe-Schalten mehrerer Chips erlaubt, muss es zumindest ein paar
Grundregeln in der Kommunikation geben. Vielleicht weiß da jemand mehr?
Michael L. schrieb:> Das sehe ich auch als Hauptproblem, dass die Kommunikation zwischen der> IDE und dem JTAG-Adapter herstellerspezifisch ist.>> Also scheitert ein Universal-JTAG-Programmer wahrscheinlich an der> Integration, oder müsste irgndwelche Treiber-Software für jede IDE> mitbringen, um die JTAG-Adapter der Hersteller zu emulieren. Die> Alternative ist eine Stand-alone-Programmer-Lösung, die eine zuvor> ausgewählte Datei einfach in den Chip schreibt (am besten über ein> Mini-Fenster was immer im Vordergrund steht, so wie beim Win-PIC).
Der erwähnte CoLinkEx hat wohl für CooCox, Keil und IAR nen Plugin. Der
kann auch einige Prozessoren flashen. Ich verstehe nur nicht, wieso z.B.
ein paar EFM32 nicht unterstützt werden, oder aber auch nur ein paar
LPC1xxx aber keine 2xxx, 3xxx und 4xxx. Ich habe wie gesagt bisher nur
was mit PICs gemacht, aber da werden alle PICs, von PIC10 bis PIC32,
gleich via ICSP programmiert. So würde ich das bei NXPs ARMs auch
erwarten, nur wieso werden nur so wenig unterstützt?
So eine Stand-Alone-Lösung würde mich nicht stören. Aus meiner Sicht ist
so ein DIY Programmer für diejenigen, die kein/wenig Geld ausgeben
wollen. Und da finde ich persönlich eine umfangreichere Unterstützung
wichtiger, als eine Einpflegung in verschiedene IDEs. Es kann ja auch
sein, das jemand ein fertiges Projekt nachbauen will und sich für den uC
gleich die fertige hex läd. Dann ist eine IDE freie Möglichkeit
vielleicht sogar besser. Naja.. Es is besser als nichts. Wer mehr will,
muss wohl zahlen oder selbst ran.
> Hm, weiß ich nicht so genau. Aber da JTAG prinzipiell das> In-Reihe-Schalten mehrerer Chips erlaubt, muss es zumindest ein paar> Grundregeln in der Kommunikation geben. Vielleicht weiß da jemand mehr?
Ich kenne mich mit dem JTAG auch nicht wirklich aus, aber wenn es
ähnlich zu SPI ist, gibts es nur wenig unterschiedliche Art und Weisen,
Daten zu übertragen. Ich denke das Problem ist eher, welche Daten werden
wann und wie genau übertragen. Aber ich hab bisher auch gedacht, dass es
nicht sooo schwer sein kann, einen Universalprogrammer zu bauen.
Höchstens dass es noch keiner für nötig fehalten hat, sowas selbst zu
machen.
ich schrieb:> Der erwähnte CoLinkEx hat wohl für CooCox, Keil und IAR nen Plugin. Der> kann auch einige Prozessoren flashen. Ich verstehe nur nicht, wieso z.B.> ein paar EFM32 nicht unterstützt werden, oder aber auch nur ein paar> LPC1xxx aber keine 2xxx, 3xxx und 4xxx. Ich habe wie gesagt bisher nur> was mit PICs gemacht, aber da werden alle PICs, von PIC10 bis PIC32,> gleich via ICSP programmiert. So würde ich das bei NXPs ARMs auch> erwarten, nur wieso werden nur so wenig unterstützt?
Weil das Beschreiben des Flash bei jedem anders ist. Unter anderem.
Sieh es einfach so: Du hast eine Druckerschnittstelle, früher parallel,
jetzt USB. Elektrisch überall gleich. Du brauchst jetzt aber für jeden
Druckertyp einen extra Treiber, und das auch für jedes Betriebssystem.
Und früher bei DOS-Programmen auch für jedes Programm.
So ist das hier auch.
fchk
Es gibt schon genügend Schaltpläne für JTAG Adapter. Das Problem ist
aber das man mehr als nur die JTAG Hardware braucht. Der Hardware-Teil
ist genormt, so das es da auch offenen Lösungen gibt - leider halt
relativ viele verschiedenen.
Zur Hardware braucht es aber noch die Software, die dem µC sagt das man
etwa das Flash oder Register lesen oder beschreiben will. Dieser Teil
ist nicht zu 100% genormt und zum großen Teil auch ein "Geheimnis" der
Chiphersteller. Leider hat sich keine allgemeine Hardware Durchgesetzt,
so dass man halt zum µP eine passende Software von µC Hersteller
braucht, und dann eine zu der Software passende Hardware (oder eine
Hardware mit Treiber Software). Je nach µC ist man da halt leider oft
auf spezielle recht teure Produkte angewiesen.
Es gibt eine offene JTAG Software, die aber nur einige µC und da auch
teilweise auch nur mit eingeschränkter Funktion (z.B. nur Flash
schreiben/Lesen) unterstützt. Das Problem ist da halt die fehlende
Information der Hersteller.
http://openocd.sourceforge.net/
Für ARMs sieht es da noch relativ gut aus, bei PICs und AVRs aber eher
schlecht.
Wenn man also was neu entwickeln müsste dann eher Treibersoftware,
sodass man mit bekannter offener Hardware mehr Herstellersystem
unterstützen kann, etwa so dass AVRStudio dann mit FTxxxx Jtager oder
Wigglern klar kommt.
Frank K. schrieb:> Weil das Beschreiben des Flash bei jedem anders ist. Unter anderem.>> Sieh es einfach so: Du hast eine Druckerschnittstelle, früher parallel,> jetzt USB. Elektrisch überall gleich. Du brauchst jetzt aber für jeden> Druckertyp einen extra Treiber, und das auch für jedes Betriebssystem.> Und früher bei DOS-Programmen auch für jedes Programm.>> So ist das hier auch.>> fchk
Ich verstehe was du meinst, nur warum sollte das der Hersteller für
seine Produkte immer wieder neu machen? Wie gesagt, meines Wissens nach
ist das bei den PICs so. Zuerst meinetwegen die ConfigBytes (zwar
unterschiedlich viele aber das ist ja egal), danach der Flash und danach
ggf. EEPROM Inhalt. Vielleicht auch mit ein zwei Steuerbefehlen, sodass
bei nem kleinen Prog nicht der gesamte Flashbereich beschrieben werden
muss. Klar ist bei nem PIC10 ansich alles anders als bei einem PIC32,
doch beide haben Configbytes und nen Programm-Flash. Und nur darum geht
es ja beim programmieren.
Off-Topic:
Wie schreibt man eigentlich dieses "Ein zwei ..." korrekt? "Ein zwei
Steuerbefehle", "ein, zwei Steuerbefehle", "ein/zwei Steuerbefehle" oder
müsste man "ein bis zwei Steuerbefehle" schreiben, also dass das
weglassen des "bis" umgangssprachlich ist? ;)
Ulrich H. schrieb
> Für ARMs sieht es da noch relativ gut aus, bei PICs und AVRs aber eher> schlecht.> Wenn man also was neu entwickeln müsste dann eher Treibersoftware,> sodass man mit bekannter offener Hardware mehr Herstellersystem> unterstützen kann, etwa so dass AVRStudio dann mit FTxxxx Jtager oder> Wigglern klar kommt.
Echt? Woher hat dann der SprutBrenner Entwickler die Infos? Abgesehen
davon ist die Firmware zum PICKIT3 bei Microchip zu haben (ist ja auch
ein PIC drinne). Da sollte man doch relativ einfach an die Infos
rankommen (z.B. via disassembler)
ich schrieb:> (...) wollte ich> Fragen, obs da nicht einen Universalprogrammer gibt.
Sowas zum Beispiel: http://usbprog5.embedded-projects.net/index.html
Das Problem ist halt, auch wenn der Programmer universal ist, so ist
doch die Anbindung an die jeweilige Programmierumgebung höchst
proprietär. Du musst Dir immer den passenden Treiber und ggf die
passende Firmware schreiben (lassen).
ich schrieb:> Ich verstehe was du meinst, nur warum sollte das der Hersteller für> seine Produkte immer wieder neu machen?
Weil Du zu kurz denkst. Zuallererst ist JTAG keine
Programmierschnitstelle, sondern eine Schnittstelle für den Test des
Chips an sich und den elektrischen Test der Schaltung. Dass Du damit
auch die internen Speicher beschreiben und lesen kannst, ist ein
angenehmer Nebeneffekt, war aber nicht Ziel beim Entwurf von JTAG. Das T
in JTAG steht übrigens für Test. Deswegen ist JTAG an sich auch so
komplex im Vergleich zu zB der ISP-Schnittstelle der AVRs, die wirklich
nur zum Programmieren gedacht war und auch nichts anderes kann. Und so
ist zu erklären, dass JTAG extrem chipspezifisch sein muss.
Wenn es ans Debuggen geht, wird es nochmals eine Stufe komplexer. Dann
kommen nämlich die verschiedenen Prozessorkerne mit ihren Interna hinzu.
fchk