Forum: Mikrocontroller und Digitale Elektronik Erfharungen mit UrJTAG und J-Link, bzw. Olimex Interface


von Olli Z. (z80freak)


Lesenswert?

Nachdem ich mit OpenOCD grad nicht so recht weiter komme habe ich mir 
auch mal UrJTAG (http://urjtag.org/) angesehen. Download und 
Installation sind im Vergleich zu OpenOCD schonmal um vieles einfacher 
;-)

Aber weder mit meinem Segger J-Link EDU, noch mit einem Olimex 
ARM-USB-OCD-H will sich die Software verbinden. Egal was ich versuche, 
ich erhalte immer folgenden Fehler:
1
Couldn't connect to suitable USB device.
2
Error: Cable connection failed

Der Segger J-Link EDU kommt mit einem eigenen Treiber (VID 1366, PID 
0101) und wird laut Urjtag-Doku direkt unterstützt. Eigentlich sollte 
der Befehl:
1
cable jlink
ausreichen. Aber selbst unter Angabe der PID/VID:
1
cable jlink vid=1366 pid=0101
klappt es nicht.

Gleiches mit dem Olimex, wobei direkt nur der "ARM-USB-OCD" unterstützt 
wird und nicht der "-H".
1
cable arm-usb-ocd

Auch hier keine Änderung durch Angabe der PID/VID:
1
cable arm-usb-ocd vid=15ba pid=002a

Der Olimex hat keine eigenen Treiber sondern verwendet die von FTDI. Ich 
nutze den universellen Treiber von ZADIG ("libwdi").

Irgendwie ist das alles schwierig... oder ich stelle mich einfach nur zu 
blöd an für das Zeugs.

von Jim M. (turboj)


Lesenswert?

Ich lese in der Doku Kapitel 2.4.3:

> All other USB JTAG adapters can be supported only if libusb is installed. There 
is a libusb-win32

Mit anderen Worten: Das Ganze funktioniert nur wenn man mit zadig die 
LibUSB-Win32 (Filter-)Treiber für den entsprechenden Adapter installiert 
hat. Per default werden sowohl beim JLink als auch beim ARM-USB-OCD 
andere Treiber installiert.

Das dürfte übrigens auch Dein Problem bei OpenOCD sein, das ähnliche 
Limitation hat. IIRC ging da auch Zadig WinUSB, aber YMMV.

von Olli Z. (z80freak)


Lesenswert?

Leider sind die libusb-win32 Treiber nicht signiert, was die 
Installation und den Betrieb unter Win10 echt schwierig macht.

von Olli Z. (z80freak)


Lesenswert?

Jim M. schrieb:
> Ich lese in der Doku Kapitel 2.4.3:
>
>> All other USB JTAG adapters can be supported only if libusb is installed. There 
is a libusb-win32
>
> Mit anderen Worten: Das Ganze funktioniert nur wenn man mit zadig die
> LibUSB-Win32 (Filter-)Treiber für den entsprechenden Adapter installiert
> hat. Per default werden sowohl beim JLink als auch beim ARM-USB-OCD
> andere Treiber installiert.
>
> Das dürfte übrigens auch Dein Problem bei OpenOCD sein, das ähnliche
> Limitation hat. IIRC ging da auch Zadig WinUSB, aber YMMV.

Ok, vermutlich stehe ich mit dem USB-Treiberzeugs noch auf Kriegsfuß...

Durch die Installation der Segger J-Link-Software wurde ein eigener 
Treiber installiert. Das Gerät findet sich im Gerätemanager unter 
"USB-Controller -> J-Link driver". Über die "Treiberdetails" erkenne ich 
das er "JLinkx64.sys" verwendet. Die Hardware-ID lautet 
USB\VID_1366&PID_0101. Damit läuft J-Link.exe und JFlash.exe 
einwandfrei.

Der URJtag (jtag.exe) erkennt das Gerät also nicht weil es diesen 
Treiber nicht verwenden kann. Nach langem suchen habe ich auch die von 
Dir zitierte Stelle gefunden. Besagte libusb-win32 gibt es hier: 
https://sourceforge.net/projects/libusb-win32/

Als Features dieses Treibers ist angegeben:
 * 32bit/64bit Windows support
=> Sehr gut!
 * KMCS digital signed kernel driver libusb0.sys
=> Signierter Treiber. Ebenfalls wichtig, damit Windows 7/10 nicht 
meckert bei der Installation!
 * User space library libusb0.dll
=> Wenn ichs richtig verstanden hab kann ein von einem User ohne lokale 
Adminrechte gestartetes Programm nicht ohne weiteres direkt auf einen 
USB-Port zugreifen. Damit das doch geht und man diese Software nicht als 
Admin starten muss, gibt es diese "Wrapper" oder "Middleware" DLL. Die 
wird geladen und bietet Funktionsaufrufe an um auf den USB-Treiber und 
damit den Port zuzugreifen.
 * libusb-win32 device driver and filter driver
=> Hier verstehe ich noch Bahnhof. Was ist der Unterschied zwischen 
"device driver" (das kenne ich) und "filter driver" (noch nie von 
gehört). In den Docus von libusb-win32 meine ich herausgelesen zu haben 
das man den "device filter" nicht nutzen sollte.

Jedenfalls habe ich mir diesen Treiber heruntergeladen. Im 
/bin-Verzeichnis finde ich für meine CPU (AMD 64Bit) den "amd64" Ordner. 
Dort liegt einmal der Kernel-Treiber:
  amd64\libusb0.sys: x64 64-bit driver.
    Installs to Windows\system32\drivers\libusb0.sys

und einmal das User-Space-DLL:
  amd64\libusb0.dll: x64 64-bit library.
    Installs to Windows\system32\libusb0.dll

sowie eine "install-filter.exe" für die Kommandozeile und eine 
"install-filter-win.exe" als GUI-Applikation.

Ich gehe mal davon aus das jtag.exe von URjtag die DLL braucht um auf 
den Segger J-Link zugreifen zu können?!

Nach dem Start der "install-filter-win.exe" wird man gefragt für welches 
Gerät man den Treiber installieren möchte. Ich verstehe das so, das 
grundsätzlich die Treiberdateien (*.sys und *.dll) ins Betriebssystem 
kopiert werden und zusätzlich der Treiber dann diesem Gerät zugewiesen 
wird.

Die Installation selbst klappte schnell und problemlos. Anschließend 
finde ich in den Treiberdetails neben dem "JLinkx64.sys" auch noch den 
"libusb0.sys", zusätzlich. jlink.exe und jflash.exe funktionieren 
weiterhin.

Nach dem Start von jtag.exe (URjtag) und der Eingabe von "cable jlink" 
bekomme ich diese Ausgabe:
1
jtag> cable jlink
2
J-Link initial read failed, don't worry (result=-116)
3
Vref = 0.0 TCK=1 TDI=1 TDO=1 TMS=1 TRES=1 TRST=1
4
Vref too low. Eventually the target isn't powered or disconnected?
5
Resetting J-Link. Please retry the cable command.
6
Error: Cable initialization failed!
7
jtag>

Soweit, so gut! :-) Zumindest wird der Adapter nun gefunden. Es fehlte 
also scheinbar wirklich dieser Teil. Dafür erstmal VIELEN DANK für den 
Tipp!

Die obige Ausgabe war ohne angeschlossenes JTAG-Gerät. Mit 
angeschlossenem bekomme ich das:
1
jtag> cable jlink
2
J-Link initial read failed, don't worry (result=-116)
3
Vref = 3.371 TCK=1 TDI=1 TDO=0 TMS=1 TRES=1 TRST=0
4
J-Link JTAG Interface ready
5
jtag>

Bis auf diesen "initial read failed" sieht das gut aus. Was auch immer 
der Fehler "-116" ist...

Nun würde ich laut Doku einen "detect" Befehl absetzen und der sollte 
mir eigentlich die JTAG-IDs der einzelnen TAPs auflisten können. 
Stattdessen kommt aber:
1
jtag> detect
2
Warning: TDO seems to be stuck at 0
3
jtag>

Kurz zuvor habe ich aber in derselben Betriebsbedingung den Jlink.exe 
laufen lassen und der konnte problemlos zugriefen.

Was stimmt denn nun wieder nicht?

Auch ist mir noch unklar wie ich die JTAG-Geschwindigkeit einstellen 
sollte. Zwar hat der TAP auf dem Board ein RCLK aber woher soll urjtag 
das wissen? Habe daher mal mit "frequency 4000" einen 4khz Takt 
eingestellt. Aber das änderte auch nichts. Detect zeigt nichts an.

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Olli Z. schrieb:
> Leider sind die libusb-win32 Treiber nicht signiert, was die
> Installation und den Betrieb unter Win10 echt schwierig macht.

Genau das erledigt ja zadig (https://zadig.akeo.ie/) für Dich. Damit 
läuft bei mir eigene Hardware und der JtagKey2 mit OpenOCD unter Win10.

Olli Z. schrieb:
> Was ist der Unterschied zwischen
> "device driver" (das kenne ich) und "filter driver"

Doku lesen. Dr Filter Treiber hängt "unter" dem eigentlichen Treiber, 
damit kann man das Gerät unter LibUSB ansprechen kann. Bräuchte man wenn 
man einmal OpenOCD und ein andreres Mal die Segger Software verwenden 
will ohne Treiberfummelei zwischendurch.

Ich verwende OpenOCD aber nur noch mit den FTDI-basierten Adaptern hier, 
die Segger laufen "nativ" also mit der Segger Software - macht weniger 
Stress. Da gibt es auch mögliche Hindernisse in sowas wie Firmware 
Versionen.

von Olli Z. (z80freak)


Lesenswert?

Jim M. schrieb:
> Olli Z. schrieb:
>> Leider sind die libusb-win32 Treiber nicht signiert, was die
>> Installation und den Betrieb unter Win10 echt schwierig macht.
>
> Genau das erledigt ja zadig (https://zadig.akeo.ie/) für Dich. Damit
> läuft bei mir eigene Hardware und der JtagKey2 mit OpenOCD unter Win10.
Sorry, da war ich zu schnell und konnte den Beitrag nicht mehr löschen. 
Es geht mit libusb-win32, man muss nur den richtigen Treiber nehmen. 
Mein Fehler! Also Zadig braucht man dafür nicht. Siehe auch meinen 
letzten, Post.

> Olli Z. schrieb:
>> Was ist der Unterschied zwischen
>> "device driver" (das kenne ich) und "filter driver"
>
> Doku lesen. Dr Filter Treiber hängt "unter" dem eigentlichen Treiber,
> damit kann man das Gerät unter LibUSB ansprechen kann. Bräuchte man wenn
> man einmal OpenOCD und ein andreres Mal die Segger Software verwenden
> will ohne Treiberfummelei zwischendurch.
Genau so habe ich es jetzt ja gerade. Habe aus meiner Sicht zwei Treiber 
drin, einmal den Segger JLinkx64.sys und einmal den libusb0.sys von 
libusb-win32. Und dann ist der letztere nur ein "filter driver" und der 
erstere ein "device driver". Und ja, ich kann beide Programme damit 
benutzen.

> Ich verwende OpenOCD aber nur noch mit den FTDI-basierten Adaptern hier,
> die Segger laufen "nativ" also mit der Segger Software - macht weniger
> Stress. Da gibt es auch mögliche Hindernisse in sowas wie Firmware
> Versionen.

Ich verzweifle langsam. Alles was ich ausprobiere endet in einer 
Sackgasse :-( OpenOCD will weder mit dem Segger noch mit dem Olimex, 
auch wenn es das Interface ansicht findet. UrJTAG will momentan nur den 
Segger erkennen, aber das Target nicht. Jetzt bleibt mir noch ein 
USB-Blaster.

Ich muss wohl auch nochmal ein anderes Target testen, nicht das dieses 
irgendwie besonders zickig ist. Aber so einfache Dinge wie ein IR-Scan 
und ID-Code sollte mit jedem Adapter, jeder Software und jedem Target 
gehen... meine ich.

von Olli Z. (z80freak)


Lesenswert?

Ich kriegt die Motten... jetzt habe ich versucht nach dieser Anleitung 
den USB-Blaster (Clone) mit UrJTAG zum laufen zu bekommen: 
http://dangerousprototypes.com/docs/Bus_Blaster_urJTAG_guide

Aber nix, garnix geht, nichtmal der Selbsttest:
1
jtag> cable ft2232 pid=0x6010 vid=0x0403 interface=1
2
Connected to libftd2xx driver.
3
jtag> detect
4
usbconn_ftd2xx_flush(): Error from FT_Read(): 4

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.