Hallo
Ich habe ein kleines Tutorial für ADUC7000 ARM7 Mikrocontroller
geschrieben. Es soll an einem Beispiel zeigen, wie Code mit Eclipse
entwickelt und über JTAG debuggt werden kann. Es ist als Ergänzung zu
dem Tutorial von J. Lynch gedacht.
Es hat eine Weile gedauert, bis die Skripte liefen, vor allem die für
OpenOCD.
Ich würde mich freuen, wenn sich Interessierte das Tutorial ansehen.
Konstruktive Kritik ist erwünscht!
Das Tutorial und die Skripte können unter
http://www.stud.uni-karlsruhe.de/~usjp/aduc/ heruntergeladen werden.
Gruß, Tilo
Ich habe einige Tipfehler korrigiert und einen neuen Abschnitt angefügt,
in dem die einzelnen Codeteile kurz angesprochen werden. viel Spaß
damit.
Auch wenn das Tutorial von einem Windows System ausgeht, kann fast alles
auf Linux oder OSX übernommen werden.
Ein neues Update ist draussen.
Neu ist die Unterstützung von newlib für STDIN und STDOUT. Ausserm habe
ich einige Kleinigkeiten in den Header Files und Linker Skript
durchgeführt.
Hi Tilo,
ich bin grad dabei dein Tutorial auszuprobieren! Ich find es tatsächlich
besser als das von James Lynch, da ich exakt die Hardware vewende, auf
die du dich beziehst. Allerdings wären ein paar mehr Screenshots schön,
und eine Anleitung, wie ich mein Projekt konfiguriere, wenn mein
makefile schon vorhanden ist. Das habe ich aber selbst jetzt schon
hinbekommen.
Mein eigentliches Problem ist das OpenOCD. Ich habe es exakt so gemacht,
wie du beschrieben hast. Allerdings bringt er mir nach dem starten von
OpenOCD eine Fehlermeldung, das er vom JTAGDevice nicht lesen und
demzufolge auch nicht schreiben kann.
Woran liegt das???
Es ist alles richtig installiert. Bei den USB Komponenten im Hardware
Manager sind die Keys ebenfalls eingetragen.
Gruß Eric
Hallo Eric
Danke für den Hinweis. Ich habe mir schon überlegt, ob ich tiefer darauf
eingehen soll, wie man ein Projekt anlegt etc. Bisher habe ich mich
davor ein wenig gedrückt, da ich im Moment viel anders zu tun habe. In
Lynchs Tutorial sind die meisten Dinge gut beschrieben. Er benutzt
allerdings eine Makefile statt des gnuarm Plugin.
Muss mal schaun wie ich dazu komme. Seine Bilder etc. darf ich
verwenden. Dann kann ich mir Zeit sparen.
Aber nun zu deinem Problem.
Was für ein JTAG Dongle verwendest du?
Benutzt du ein fertiges Board von Analog/Olimex/... ?
Hast du den uC schon einmal geflasht?
Eventuell hilft ein "Mass Erase" mit dem Loader von ADI
Ich hatte ab und zu das Problem, dass man den uC über JTAG nicht mehr
ansprechen kann, wenn ein "ungünstiges" Programm in Flash liegt.
Danke für die schnelle Antwort.
Bei mir sieht es folgendermaßen aus: Ich habe ein Eval Board von
Embedded Artists mit einem LPC2468 drauf. Das ist der einzige
Unterschied. Ist aber auch ein ARM7TDMI. Daher habe ich mir gedacht, das
es genauso gehen muss. Flashen tue ich das mit FlashMagic. Und das
funktioniert auch einwandfrei. Auf einem anderen Rechner hatte ich auch
schon mal OpenOCD r247 unter einer anderen Eclipse Version mit diesem
Board zum laufen bekommen. Allerdings konnte der Debugger da nicht
starten. Aber auf meinem aktuellen funktioniert das nicht.
Mittlerweile gibt mir das OpenOCD auch andere Fehlermeldungen aus. Allem
Anschein nach erkennt er jetzt das Device sagt aber:
Error: jtag.c:1444 jtag_validate_chain(): Error validating JTAG scan
chain, IR mismatch, scan returned 0x3f
Und das kommt so ca. 30 mal
Was will der mir damit sagen???
Eric
Hallo
;) Klar, mein Tutorial ist für einen ADUC7000. Da sind einige Dinge
unterschiedlich. Vor allem die OpenOCD Skripte in Yagarto werden nicht
funktionieren. Da kannst du dich an anderen Tutorials orientieren.
0x3f hatte ich immer dann, wenn die Verkabelung nicht OK war, die
Resetleitungen falsch eingestellt waren etc.
Wird bei deinem Board TRST, SRST oder beide verwendet? Bei mir wird nur
SRST verwendet.
Bei mir wird beides verwendet.
Ich muss sicherlich dazu sagen, dass ich mich erst seit zwei Wochen mit
diesem Thema beschäftige, und noch keine anderweitigen Erfahrungen mit
JTAG habe.
Das ich die Scripts anpassen muss, ist mir schon klar. aber das hat doch
nichts mit der Konfiguration von OpenOCD zu tun. Oder? Die Konfiguration
hat doch nix mit meinem µC zu tun?
Abgesehen von den Reset-Leitungen sind die Einstellungen für ARM7TDMI
identisch.
Wenn die Reset-Leitung auf Low liegt, hat der uC einen Dauerreset.
Eventuell kannst du mit einem Volt-Meter bzw. Logicanalizer überprüfen,
was los ist. Ausserdem solltest du dir die Beispiele von OpenOCD
ansehen. Da sind die unterschiedlichen Konfiguraitonsmöglichkeiten von
TRST und SRST erklärt. Wie gesagt, bei mir wird nur SRST verwendet.
Ich habe das Tutorial ein wenig aktualisiert.
Es werden nun alle aktuellen ADUC7000 Modelle unterstützt. Auch die
Modelle, bei denen die MMRs an neuen Adressen liegen.
In der PDF wird die Newlib kurz erwähnt, vor allem wie man die system
calls aktiviert.
Ich habe ausserdem ein wenig mehr Beispielcode hinzugefügt. Kommentare
in den Beispielen sind noch in deutsch. Ich habe mir überlegt, sie
ebenfalls ins englische zu übersetzen, allerdings habe ich dafür im
Moment keine Zeit.
Sorry für's Ausgraben des alten Threads. Aber die Site ist down...
Gibt's die Sachen noch irgendwo anders oder ist die Site umgezogen?
(Ich schätze mal Beendigung des Studiums ist die Ursache)
Ich glaub die ist schon seit 4Jahren down. Hat bisher keien
interessiert. Ich muss mal schaun, ob ich die Sachen noch finde,
allerdings habe ich seit dem nichts mehr dran gemacht.
Ich glaube nicht, das da noch viel zu einem aktuellem Eclipse passt.
Ok... Wäre aber trotzdem nett wenn du mir das Tutorial schicken könntest
wenn du es findest (gerne auch per Mail - hab dir eine PM geschickt).
Ich suche vor allem eine Einführung in die ADUC7XXX.
Also als Einführung nützt dir das nicht viel.
Ich hab damals zusammengestellt, wie man eine lauffähige Toolchain
hinbekommt, auf dem Stand von 2008. Zu den Eigenschaften des ADUCs steht
da nichts drin. Ich kann dir dafür höchstens ein Demo Blink-Programm
anbieten.
Der Kern ist auch recht einfach, DMA, NVIC etc gibt es alles nicht.
Wegen dem 16Bit breitem Flash lässt sich der ARM-Mode nur begrenzt
nutzen. Man sollte den Chip eher als ADC verstehen, der einen uC
enthält.