usbprog Fans aufgepasst: JTAG USB (OpenOCD, ARM7)

OP (Firma: embedded projects GmbH) #550879
Hallo an alle Bastler und Entwickler da draussen!

Mit usbprog versuche ich einen freien Programmieradapter zu schaffen,
mit dem man alles, was das Bastelherz so begehrt programmieren kann.

Alle Quelltexte stehen unter der GNU/GPLv2

Homepage: http://www.embedded-projects.net/usbprog

Die Technik ist ganz einfach gehalten. Ohne viel Schnickschnack, so dass 
es schön billig und einfach zum Nachbauen ist. Über USB kann man bequem 
verschiedene "Firmwares" einspielen. Dafür gibt es ein grafisches Tool 
(Windows und Linux) mit dem man im "Online Pool" surfen kann und sich 
dann die gewünschte Firmware per klick einspielen kann.

Aktuell bastle hauptsächlich ich alleine an neuen Firmwares aber ich 
hoffe dass sich bald Leute finden, die eigene Versionen beisteuern.

Aktuelle Firmwares:

- AVRISP mk2 Klon
- JTAG USB Adapter (unteranderem für OpenOCD (ARM7,ARM9))
- USB zu Seriell Wandler (ohne Treiber, CDC)
- SimplePort (einfach die 6 IO Leitungen des Adapters nutzen)
- es entsteht gerade ein JTAGICE mk2 Klon
(stoppen und starten über den GDB funktioniert bereits, leider fehlt mir
gerade etwas die Zeit)
- es gibt ebenfalls Pläne für einen PIC Programmer


NEU NEU NEU USB JTAG ADAPTER mit OpenOCD Unterstützung:
http://www.embedded-projects.net/index.php?page_id=175
Gast
Interessantes Projekt! Für den Anfang würde mich die OpenOCD
Firmware interessieren. Allerdings nur zum Flashen, Debugger
habe ich mir schon vor Jahren abgewöhnt. Welche Übertragungsrate
erreicht das Gerät denn so ungefähr? Der LPC21xx Bootloader
ist mir etwas zu langsam.

 - Michael
OP (Firma: embedded projects GmbH)
Ich mess es heute mal. Wobei ich noch ein paar Schrauben kenne, an denen 
man drehen kann.

Der schnellste wird er nicht sein, aber will es so haben, dass das 
arbeiten mit Adapter ok ist.

Wie lange braucht denn dieser Bootloder?

Hast du da irgendwie zahlen? Also was braucht 1K oder so?


Gruss Bene
Gast
Nicht weit weg von der Bitrate der Seriellen die ihn bedient. Nur ist 
genau die das Problem. Denn während deren UARTs mittlerweile oft 
fraktionale Baudraten können, hat der Bootloader davon noch nichts 
mitgekriegt und besteht hartnäckig auf maximal 38400 - es sei denn der 
Quarz hat zufällig 14,7MHz, was sich aber schlecht mit den 12MHz eines 
USB-Interface oder den 1MHz eine CAN-Bus verträgt.
Gast
Bei mir läuft ein LPC2136/01 mit einem 20MHz Quarz. Bis zu
38.4 kBaud kann ich beim Flashen einstellen was ich will - also
zumindest im Philips Flash-Tool. Die 23xx können zumindest 115kBaud.

Gemessen habe ich mal etwa 100 Sekunden zum Lesen der gesamten
256k.

 - Michael
Gast
115k gehen bei meinem 2136 ja auch nicht mit dem Bootloader. Aber
4k8, 9k6, 19k2, 38k4.

In der Firma haben wir ein MCB2300 (LPC2368) mit einem 12MHz Quarz.
Den habe ich schon mit 115k geflashed.
Hab ein Problem beim kompilieren von OpenOCD für usbprog, hoffe es kann 
mir wer helfen.

Ich versuche openocd mit cygwin unter Windows zu kompilieren und benutze 
dazu die fertig angepassten sourcen 
(http://www.ixbat.de//files/admin/embedded/usbprog/downloads/openocd4usbprog.tar.gz).

bootstrap - ok
./configure --enable-usbprog - ok
make - problem:

sobald das Makefile den "src/jtag"-Ordner erreicht, bricht das makefile 
mit fogender fehlermeldung ab:
1
maruchinu@nbi-mplaner /cygdrive/c/Downloads/USBprog/openocd4usbprog/src/jtag
2
$ make
3
gcc -DHAVE_CONFIG_H -I. -I../.. -I../../src/helper      -g -O2 -MT usbprog.o -MD -MP -MF .deps/usbprog.Tpo -c -o usbprog.o usbprog.c
4
usbprog.c: In function `usbprog_init':
5
usbprog.c:180: error: called object is not a function
6
make: *** [usbprog.o] Error 1

Zum fehler führt also folgender teil der usbprog.c:
1
int usbprog_init(void)
2
{
3
  usbprog_jtag_handle = usbprog_jtag_open();
4
        ...

meiner meinung nach bindet er zwar die header-datei ein und findet den 
prototyp der funktion, aber die funktion selbst in der library 
libusbprogjtag.a findet er nicht.

hab darauf hin nochmal die libusbprogjtag neu kompiliert und 
installiert, jedoch auch ohne erfolg. langsam bin ich echt am 
verzweifeln :( ^^

danke für jegliche Hilfe :)

MfG
Martin Planer
Gast
Hi,

Du solltest vieleicht erstmal zählen lernen. Oder wenigstens die 
Fehlermeldung auch richtig lesen!
Die Zeile, in der Du den Fehler vermutest ist 177 und nicht 180!
Außerdem stammt die Fehlermeldung vom Compiler und nicht vom Linker. Und 
der Compiler hat mit irgendwelchen Libraries erstmal überhaupt nichts am 
Hut.
Das Neukompilieren der libusbprogjtag war also ziemlich sinnlos.

CU Frank

PS: Hätte ich ja fast vergessen.
Der Grund für den Fehler ist, das sich die zu OpenOCD gehöhrende log.h 
(in src/helper) mit der von libusb-win32 (von cygwin) zur Verfügung 
gestellten usb.h (genauer gesagt mit der von dieser via windows.h 
eingebundenen wingdi.h) beißt.
Zur Behebung des Fehlers sollte es reichen Zeile 51 zu löschen (oder 
besser einen Kommentar draus zu machen).
Also aus:
1
#include <usb.h>
 sowas:
1
//#include <usb.h>

Also mal danke für deine Antwort!

Arbeite das erste mal richtig mit cygwin und bin nicht (mehr) so 
wirklich fit beim gcc :)

Das kompilieren läuft jetzt wirklich einwandfrei, doch meldet sich jetzt 
wirklich der Linker zu Wort und zwar mit ein paar Referenzproblemen:
1
make[3]: Entering directory `/cygdrive/c/Downloads/USBprog/openocd4usbprog/src'
2
gcc  -g -O2    -o openocd.exe openocd.o ../src/xsvf/libxsvf.a ../src/target/libtarget.a ../src/jtag/libjtag.a ../src/helper/libhelper.a ../src/server/libserver.a ../src/helper/libhelper.a ../src/flash/libflash.a ../src/target/libtarget.a ../src/pld/libpld.a    -lusb -lusbprogjtag
3
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libusbprogjtag.a(usbprogjtag.o):usbprogjtag.c:(.text+0x17): undefined reference to `_usb_init'
4
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libusbprogjtag.a(usbprogjtag.o):usbprogjtag.c:(.text+0x1c): undefined reference to `_usb_find_busses'
5
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libusbprogjtag.a(usbprogjtag.o):usbprogjtag.c:(.text+0x21): undefined reference to `_usb_find_devices'
6
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libusbprogjtag.a(usbprogjtag.o):usbprogjtag.c:(.text+0x26): undefined reference to `_usb_get_busses'
7
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libusbprogjtag.a(usbprogjtag.o):usbprogjtag.c:(.text+0x79): undefined reference to `_usb_open'
8
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libusbprogjtag.a(usbprogjtag.o):usbprogjtag.c:(.text+0x99): undefined reference to `_usb_set_configuration'
9
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libusbprogjtag.a(usbprogjtag.o):usbprogjtag.c:(.text+0xae): undefined reference to `_usb_claim_interface'
10
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libusbprogjtag.a(usbprogjtag.o):usbprogjtag.c:(.text+0xc3): undefined reference to `_usb_set_altinterface'
11
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libusbprogjtag.a(usbprogjtag.o):usbprogjtag.c:(.text+0x108): undefined reference to `_usb_close'
12
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libusbprogjtag.a(usbprogjtag.o):usbprogjtag.c:(.text+0x146): undefined reference to `_usb_bulk_write'
13
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libusbprogjtag.a(usbprogjtag.o):usbprogjtag.c:(.text+0x18e): undefined reference to `_usb_bulk_read'
14
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libusbprogjtag.a(usbprogjtag.o):usbprogjtag.c:(.text+0x2bb): undefined reference to `_usb_bulk_write'
15
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libusbprogjtag.a(usbprogjtag.o):usbprogjtag.c:(.text+0x2e7): undefined reference to `_usb_bulk_read'
16
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libusbprogjtag.a(usbprogjtag.o):usbprogjtag.c:(.text+0x3db): undefined reference to `_usb_bulk_write'
17
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libusbprogjtag.a(usbprogjtag.o):usbprogjtag.c:(.text+0x407): undefined reference to `_usb_bulk_read'
18
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libusbprogjtag.a(usbprogjtag.o):usbprogjtag.c:(.text+0x530): undefined reference to `_usb_bulk_write'
19
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libusbprogjtag.a(usbprogjtag.o):usbpr
20
ogjtag.c:(.text+0x57a): undefined reference to `_usb_bulk_write'
21
collect2: ld returned 1 exit status
22
make[3]: *** [openocd.exe] Error 1
23
make[3]: Leaving directory `/cygdrive/c/Downloads/USBprog/openocd4usbprog/src'
24
make[2]: *** [all-recursive] Error 1
25
make[2]: Leaving directory `/cygdrive/c/Downloads/USBprog/openocd4usbprog/src'
26
make[1]: *** [all-recursive] Error 1
27
make[1]: Leaving directory `/cygdrive/c/Downloads/USBprog/openocd4usbprog'
28
make: *** [all] Error 2

:(
Also das sollte alles installiert sein. Cygwin hat da libusb-win32, also 
im lib-Ordner befinden sich einige Dateien, die darauf schließen lassen, 
dass alles korrekt installiert wurde, wie z.B.:
1
/lib
2
   -> libusb.dll.a
3
   -> /libusb
4
      -> libusb0.sys
5
      -> inf-wizard.exe
6
      -> install-filter.exe
7
   ...
8
   -> libusbprogjtag.a

Also eigentlich alles da :)
OP (Firma: embedded projects GmbH)
Ja du hast ja jetzt den include zur usb.h entfernt?

Eigentlich brauch man im Linux den include schon, und dazu muss man noch
das libusb-dev paket installieren. Gibts sowas für Cygwin auch?
In dem Paket sind die benötigten Header Dateien drin.


Gruss Bene
Also ich finde bei Cygwin jetz nur ein Paket - libusb-win32 - und das 
ist schon installiert, also kein -dev Paket oder sonstiges. Weiß jetzt 
leider auch nicht ob die devel-sachen da schon integriert sind, weil ich 
sonst bei cygwin auch kaum extra -dev pakete finde.
OP (Firma: embedded projects GmbH)
ok dann muesstest du trotzem die header datei mal wieder einbinden.

du koenntest mal testen eine einfache .c datei

#include <stdio.h>
#include <usb.h>
int main()
{
  usb_init();
};


mit gcc main.c -lusb zu uebersetzen oder er die libusb findet.




Ok. Hab das Miniprogramm erfolgreich erstellen können. Also muss ich die 
usb.h warscheinlich doch einbinden.

Danke mal für die Hilfe, ich hab nun eine 2 Stündige Zugfahrt vor mir, 
wo ich wieder probieren kann. Werde dann am Abend/Nachmittag meine 
(Miss-)Erfolge posten ;)

Vielen, vielen Dank auf jedenfall schonmal für die nette Hilfe :)

MfG
Martin Planer
So, Problem gelöst! Hab das Programm nun endlich erfolgreich erstellen 
können. Der Fehler ist meiner Meinung nach ziemlich komisch:

Ich hab nur im Makefile im Hauptverzeichnis (/src) die Linkerparameter 
vertauschen müssen, also einfach
1
USBPROGLIB = -lusb -lusbprogjtag
in Zeile 199 auf
1
USBPROGLIB = -lusbprogjtag -lusb
ändern müssen. Danach funktioniert das Makefile einwandfrei. Hab nicht 
gewusst, dass die Stellung der Parameter irgendeinen Unterschied macht. 
Auf jeden Fall bin ich nun glücklich, dass alles funktioniert und ich 
kann mich endlich an die ersten Schritte mit OpenOCD wagen. :)

Für alle die es nun selbst unter Cygwin kompilieren wollen nochmal eine 
Zusammenfassung:

1
1)  Cygwin installieren
2
    mit allen benötigten Paketen: gcc, libc, make, automake, autoconf, libusb-win32, etc. (weiß auch nicht mehr genau was alles ;)
3
2)  alles irgendwohin extrahieren
4
3)  libusbprogjtag erstellen und installieren   
5
    - cd libusbprogjtag/lib
6
    - make
7
    - make install
8
5)  in der openocd4usbprog/src/jtag/usbprog.c folgende Änderungen durchführen
9
    - Zeile 51 auskommentieren (//#include <usb.h>)
10
    - Ich hab noch in Zeile 29 <sys/io.h> in <io.h> ändern müssen (kann vielleicht auch weggelassen werden)
11
6)  cd openocd4usbprog
12
7)  ./bootstrap
13
8)  ./configure --enable-usbprog
14
9)  im Makefile in /src folgendes ändern
15
    - Zeile 199: USBPROGLIB = -lusb -lusbprogjtag in USBPROGLIB = -lusbprogjtag -lusb ändern
16
10) make
17
11) make install

Für alle, die sich das nicht antun wollen, hab ich die binary angehängt. 
Zum ausführen benötigt ihr noch 2 dll Dateien von Cygwin: cygwin1.dll 
(erstellt mit version 1005.24.0.0) und cygusb0.dll (version 0.1.12.1)

Danke nochmal für die freundliche Unterstützung Benedikt Sauter!

Schönen Tag noch.

MfG
Martin Planer
Angehängte Dateien:
OP (Firma: embedded projects GmbH)
Hallo Martin,

bist du mit JTAG und AVR programmierung etwas vertraut?
Das Modul ist jetzt etwas lahm, aber es gibt ne Möglichkeit das zu 
beschleunigen, nur hab ich gerade kaum Zeit da ich an meiner 
Diplomarbeit gerade hänge.

Gemeinsam könnte man das vielleicht mal in Angriff nehmen?


Gruss Bene
Argh! Dass, das auch nie so funktioniert, wie ich das haben will! ^^

Hab shcon wieder ein Problem :(

Wenn ich openocd starte (mit openocd.exe -f usbprog.cfg), dann schaut 
auch alles fürn anfang ganz gut aus:
1
C:\Dokumente und Einstellungen\maruchinu\Desktop\openocd>openocd -f usbprog.cfg
2

3
Info:    openocd.c:86 main(): Open On-Chip Debugger (2007-04-11 16:20 CEST)
4
Info:    usbprog.c:184 usbprog_init(): USB JTAG Interface ready!

Aber danach geht nichts mehr weiter und ich kann mich auch nicht per 
telnet auf Port 4444 verbinden :(

Hat wer nen Vorschlag? ^^

thx
Martin
Also das Board ist wie auf dem Bild im Anhang angeschlossen.

Bei dir auf der Homepage steht ja dabei Vref unbedingt auf Vcc vom 
USBprog hängen, was ich aber nicht machen kann, da:

1) Vref auf meinem Board nicht zugänglich ist und auf dem Board rumlöten 
werd ich sicher nicht ;) - dafür wars mir zu teuer :P

2) Vref auf dem Board von fix mit einer 3.3V Referenzspannung verbunden 
ist. (zu sehen auf http://www.olimex.com/dev/images/LPC2378-STK-sch.gif 
, am linken Rand bei ca. 2/3 von oben ist der JTAG Stecker)
Angehängte Dateien:
Ja, da kommt eindeutig mehr :)

1
C:\Dokumente und Einstellungen\maruchinu\Desktop\openocd>openocd -d 3 -f usbprog.cfg
2
Info:    openocd.c:86 main(): Open On-Chip Debugger (2007-04-11 16:20 CEST)
3
Debug:   jtag.c:1342 jtag_init(): -
4
Info:    usbprog.c:184 usbprog_init(): USB JTAG Interface ready!
5
Debug:   usbprog.c:152 usbprog_reset(): trst: 0, srst: 0
6
Debug:   jtag.c:285 jtag_call_event_callbacks(): jtag event: TRST asserted
7
Debug:   jtag.c:1133 jtag_reset_callback(): -
8
Debug:   bitbang.c:246 bitbang_execute_queue(): statemove end in 0
9
Debug:   jtag.c:285 jtag_call_event_callbacks(): jtag event: TRST asserted
10
Debug:   jtag.c:1133 jtag_reset_callback(): -
11
Debug:   bitbang.c:260 bitbang_execute_queue(): scan end in 0
12
Debug:   jtag.c:1003 jtag_build_buffer(): fields[0].out_value: 0x7fea0000000000ff
13
Debug:   usbprog.c:111 usbprog_write_and_read(): write and read 640


Danach hängts wie gewohnt ;)
Ok, das mit den Leitungen probier ich morgen aus (hab heute keine Zeit 
mehr dafür).

Hab heute einige Zeit das Programm debuggt und hab den Fehler eingrenzen 
können. Er tritt in usbprogjtag.c auf und zwar ziemlich am ende, in der 
Zeile 125. Das ist folgende:
1
while(usb_bulk_read(usbprog_jtag->usb_handle,2, tmp, 64, 1000) < 1);

Bis dort hin läuft alles wie geschmiert und ab dort hängt dann plötzlich 
alles und ich muss es abwürgen. Wer morgen da mal weitersehen ;)
Ja, hab auch sicherheitshalber nochmal gemacht... trotzdem nix :(

Ich glaub ich überprüf nochmal die Hardware... vielleicht funktioniert 
dort was nicht ganz richtig :-/ (muss aber erst warten bis ich wieder 
Zugang zu einem Oszi habe ;)
Gast
Ok, also ich kenne jetzt drei Installationen unter Linux mit denen das 
so funktioniert.

Ich kann heute abend mal deine Windows Version ausprobieren. Muss da nur 
mal meine alte Windowshobel anschmeissen.

Gruss Bene
Gast
Tag zusammen,

ich hänge aktuell an exakt der selben Stelle. Gibt es dazu mittlerweile 
eine Lösung?
Unter Linux klappt es leider auch nicht :(

Gruß
Mathias
Gast
Windows hängt genau, wie hier im Thread beschrieben, unter Linux wurde 
kurz das USBPROG gefunden, aber der JTAG Scan scheiterte. Das kann an 
einen zu niedrigen ARM Clock liegen, dann habe ich diese hochgedreht, 
allerdings ohne Erfolg. Einen Tag später wurde in identischer Konfig 
nicht mal mehr der USBPROG gefunden :(

Gruß
Mathias
Hallo Bene ;)

Sollte eigentlich noch alles so daheimliegen, wie ich es damals aus 
Verzweiflung in die Ecke geschmissen habe ^^

Nur so auf die schnelle komm ich da jetz nicht hin - komm frühestens am 
Wochenende wieder mal nach hause (wohn nämlich wegen Ausbildung etc 
weiter weg)

PS: Hab nur jetz irgendwie auch ein Problem mit dem USBprog - er wird 
nicht mehr richtig erkannt von Windows (vl. mal die Firmware neu 
aufspielen...) - trotzdem komisch, hab doch noch letztes Wochenende 
damit AVRs programmiert :(

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.