Forum: Mikrocontroller und Digitale Elektronik @Ubertooth One Entwickler: Debugging über JTAG mit ARM-USB-OCD


von Bjoern J. (thenozzle)


Lesenswert?

Hallo,
ich hoffe auf den ein oder anderen, der schon mit dem Ubertooth One 
gearbeitet hat.

Ich versuche gerade auf Ubuntu mein toolchain zur Entwicklung mit dem 
Ubertooth One aufzubauen. Debugen will ich über JTAG und habe dafür auch 
einen Programmieradapter ARM-USB-OCD von Olimex. Leider klappt es 
irgendwie nicht wirklich mit dem Einrichten, obwohl Olimex einige 
Dokumente bereit stellt, die das erklären sollten. Habe auch schon auf 
der Mailin-List vom Ubertooth Project um Hilfe gefragt, aber leider 
bisher keine Antwort bekommen.

Ein Problem ist, dass ich es nicht schaffe OpenOCD richtig einzurichten 
oder ich verstehe es einfach nicht. Auch funktioniert das Einrichten mit 
Eclipse nicht so, wie es in den Dokumenten von Olimex angegeben ist. Ich 
habe gehofft, dass hier jemand ist, der vielleicht eine Art Tutorial 
kennt, was man auch als Einsteiger versteht.

Auch verstehe ich nicht ganz, wozu ich für die GCC toolchain "Sourcery 
CodeBench Lite 20xxxx for ARM EABI" brauche und ob ich es auch brauche, 
weil die Anleitung auch auf dein STM32F103 ausgelegt ist und ich leider 
nicht verstehen bzw. weiß, wie sich das auf die Einrichtung auswirkt.

Vielleicht hat ja jemanden einen Tipp, wo ich besser ansetzen sollte. 
Wenn genauere Informationen gewünscht sind, gebe ich die natürlich 
gerne.

Danke im Voraus für die Hilfe.

Gruß,
Björn

von Thorsten (Gast)


Lesenswert?

Welche Ausgabe erhälst du denn, wenn du versuchst mit openocd -f 
deinconfiggile.cfg den Server zu starten?

von Bjoern J. (thenozzle)


Lesenswert?

Hi,
also mit openocd -f openocd.cfg
bekomme ich folgende Meldung:

Open On-Chip Debugger 0.7.0 (2013-10-22-08:31)
Licensed under GNU GPL v2
For bug reports, read
  http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
none separate
adapter speed: 1000 kHz
adapter_nsrst_delay: 100
jtag_ntrst_delay: 100
cortex_m3 reset_config sysresetreq
Error: no device found
Error: unable to open ftdi device with vid 15ba, pid 0003, description 
'Olimex OpenOCD JTAG ARM-USB-OCD' and serial '*'
in procedure 'init'

mit lsusb bekomme ich dazu noch:
Bus 003 Device 078: ID 15ba:0003 Olimex Ltd. OpenOCD JTAG

Die Einstellungen in der cfg habe ich nach dem Olimex Dokument 
vorgenommen. Außer das dort 002b anstatt 0003 steht.

Zusätzlich ist der Adapter über einen USB-Hub an meinen Rechner 
angeschlossen. Keine Ahnung ob das ein Problem sein könnte.

Gruß,
Björn

von Jim M. (turboj)


Lesenswert?

Welches OS? Unter Linux braucht man Root-Rechte (oder man muss ein 
udev-Skript benutzen).

Unter Win muss der korrekte Treiber installiert sein, für "ftdi" ist das 
WinUSB.

Übrigens kann es auch sein, dass er sich an der "description" stört - 
die scheint nicht 100%ig übereinzustimmen. Den Eintrag könnte man mal 
probehalber aus dem Config File mit "#" auskommentieren.

von Bjoern J. (thenozzle)


Lesenswert?

Nutze das aktuelle Ubuntu und führe die Befehle auch eigentlich alle mit 
sudo aus oder geht das nur, wenn ich direkt als root im Terminal 
arbeite?

Ansonsten ist es halt leider sehr unklar in der Beschreibung von Olimex, 
wie die openocd.cfg aussehen muss bzw ist sie explizit für den 
ARM-USB-OCD-H und den STM32 eingestellt.
Aber ich prüfe nochmal meine ftdi Treibe bei Ubuntu und schaue was 
passiert, wenn ich die device_desc ändere.

Benutzen tue ich folgende Anleitung: 
http://www.downloads.seng.de/HowTo_ToolChain_STM32_Ubuntu.pdf

Die bezieht sich halt auf die Einrichtung des ARM-USB-OCD Adapters in 
Verbindung mit einem STM32 anstatt Ubertooth, aber das sollte ja nicht 
das Problem sein.

Verstehe halt auch nicht wirklich, was es mit dem Sourcery
CodeBench auf sich hat, was zur GCC Toolchain gehört. Will ja eigentlich 
Eclipse verwenden und für mich sieht Sourcery CodeBench aus wie eine 
Entwicklungsumgebung.

Alternativ habe ich gelesen, kann man sich über den USB Port des 
Ubertooth auch Ausgaben schicken lassen, die man in den Code der 
Firmware einbaut. Allerdings habe ich bisher nichtmal hinbekommen, 
Ubertooth in den DFU-Modus zu versetzen. Lieber wäre mir natürlich die 
Arbeit mit dem Adapter, da ich dann richtige Breakpoints setzen könnte 
und auch die Register eventuell betrachten könnte.

Ich schreibe nochmal, wenn ich etwas mehr rumprobiert hab.
Danke erstmal für die Mühe.

von Thorsten (Gast)


Lesenswert?

Hast du denn die udev-Regeln für den Adapter erstellt?
Nach der Anleitung habe ich meinen ARM-USB-OCD-H unter archlinux auch 
eingerichtet und es funktioniert alles wunderbar.

Wenn du das Sourcery CodeBench nicht verwenden möchtest, dann bietet dir 
http://ubertooth.sourceforge.net/firmware/develop/ doch immer noch die 
gcc-arm-embedded Toolchain an.

von Bjoern J. (thenozzle)


Lesenswert?

Also ich habe jetztnochmal etwas angepasst und bekomme mit openocd -f 
openocd.cfg folgende Ausgabe:


Open On-Chip Debugger 0.7.0 (2013-10-22-08:31)
Licensed under GNU GPL v2
For bug reports, read
  http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
none separate
adapter_nsrst_delay: 200
jtag_ntrst_delay: 200
adapter speed: 10 kHz
cortex_m3 reset_config vectreset
Info : clock speed 10 kHz
Error: JTAG scan chain interrogation failed: all zeroes
Error: Check JTAG interface, timings, target power, etc.
Error: Trying to use configured scan chain anyway...
Error: lpc1756.cpu: IR capture error; saw 0x00 not 0x01
Warn : Bypassing JTAG setup events due to errors
Warn : Invalid ACK 0 in JTAG-DP transaction
Polling target lpc1756.cpu failed, GDB will be halted. Polling again in 
100ms
Polling target lpc1756.cpu failed, GDB will be halted. Polling again in 
300ms
Polling target lpc1756.cpu failed, GDB will be halted. Polling again in 
700ms
Polling target lpc1756.cpu failed, GDB will be halted. Polling again in 
1500ms
Polling target lpc1756.cpu failed, GDB will be halted. Polling again in 
3100ms
Polling target lpc1756.cpu failed, GDB will be halted. Polling again in 
6300ms


Da der Uberooth eine LPC1756 µC besitzt, habe ich in der openocd.cfg 
Datei für interface und target auf die entsprechende mitgelieferte 
lpc1756.cfg Dateien in den entsprechenden Ordnern verwiesen. Das 
Ergebnis ist leider nur die obere Eingabe.

Was ich leider nicht zu 100%sagen kann ist, ob ich den ARM-USB-OCD 
richtig mit dem 10-pin Cortex Debug Connector verbunden habe.
Ausgehend vom ARM-JTAG-Layout 
(https://saturn.ffzg.hr/rot13/index.cgi/arm-jtag-layout.gif?action=attachments_download;page_name=android_g1;id=20100924164502-0-17314) 
und dem Layout des Cortex Debug Connectors sieht die Verbindung wie 
folgt aus:
      ARM_JTAG                       Cortex DConnector
      4->GND                          3->GND
      5->TDI                          8->NC/TDI
      6->GND                          5->GND
      7->SWDIO                        2->SWDIO/TMS
      9->SWDCLK                       4->SWDCLK/TCLK
      13->SWO                         6->SWO/TDO
      15->Reset                       10->nRESET

Nun weiß ich nicht, ob ich auch noch VCC mit VCC, also 1 mit 1 verbinden 
soll. Weil Ubertooth bekommt ja seinen Strom über USB und daher 
befürchte ich etwas zu beschädigen, wenn ich diese beiden verbinde. 
Außerdem bin ich mir nicht sicher ob 15->Rest auf 10->nRESET richtig 
ist.
Zusätzlich ist die Frage, ob Pin 9 des Cortex (GNDDetect) auch auf einen 
der GND-Pins des ARM-JTAG gesteckt werden muss. Ich habe nämlich keine 
Ahnung was GNDDetect bedeutet und leider bisher auch nix hilfreiches bei 
Google dazu gefunden.

Vielleicht hat ja jemande das mit Ubertooth schonmal gemacht und kann 
dazu was sagen.

Gruß,
Björn

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.