Forum: Mikrocontroller und Digitale Elektronik ARM91SAM7S via JTAG, Befehle werden nicht akzeptiert


von Frentzen (Gast)


Lesenswert?

Hallo!

Ich versuche gerade ein Software zu schreiben die einen ARM91SAM7S256, 
welcher auf einem ARM91SAM7S-EK Evaluation Board, sitzt via JTAG 
programmiert und auch andere Funktionen wie z.B. lock bits auslesen 
ausführt.

Dabei tritt jetzt folgendes Problem auf. Die Funktionen der ScanChains 0 
und 1 funktionieren alle, doch um obige Funktionen auszuführen wird 
ScanChain2 benötigt.
Die ScanChain 2 funktioniert prinzipiell, da ich das Debug Status 
Register (um core state zu bestimmen) auslesen kann. Dabei handelt es 
sich um einen reinen Lesebefehl.
Das Problem was ich noch habe ist, dass der ARM die Befehle welche ich 
ihm über die Scan Chain 2 geben nicht akzeptiert.
Das heißt genauer: Ich schreibe die Befehle von Tabelle 20-3 (S. 124) im 
doc6175.pdf 
(http://www.atmel.com/dyn/resources/prod_documents/doc6175.pdf) in das 
DCDR und gehen über den Run-Test-Idle-State wieder zurück in das ShiftDR 
um z.B. die Lock-Bits auszulesen. Ich lese aber immer nur NULLEN, obwohl 
das laut Olimex (Test mit einem Olimex ARM-USB-Tiny durchgeführt) nicht 
so sein dürfte.
Der Befehl wird jedoch richtig in das DCDR geschrieben, welches ich 
durch einen weiteren Test herausgefunden haben (Schreiben ins DCDR, eine 
Runde in der TAP-Machine ohen Run-Test-Idle und das Gleiche steht noch 
drinnen).

Dass er die Befehle nicht akzeptiert vermute ich weiters dadurch, dass 
ich schon probiert habe das DCCR auszulesen (laut Read/Write Handshake 
auf S.136 in doc6175.pdf).
Versuch:
Bevor ich ein ICE-register beschreibe ist das R bit 0, also kann ein 
Schreibvorgang durchgeführt werden.
Unmittelbar danach will ich lesen, doch das R bit ist auf 1 gesetzt und 
wird auch bei mehrfachen Auslesen nicht 0 (Timeout), was laut Datenblatt 
darauf hindeutet, dass die Daten(Befehl) noch nicht ausgelesen wurden. 
Das W bit ist in diesem Zeitpunkt auch nicht 1, um einen Lesevorgang zu 
ermöglichen.

Hätte vielleicht jemand eine Idee woran das liegen könnte? Dass ich zu 
schnell unterwegs sind glaube ich fast nicht, da ich schon einmal eine 
längere Verzögerungschleife eingebaut habe.

Grüße

von Frentzen (Gast)


Lesenswert?

Niemand eine Idee?

von Wladimir S. (wlad)


Lesenswert?

Hallo,
Sind Sie mit dieser Frage weiter gekommen? Ich habe das gleiche Problem, 
ich kann die 'ICEBreaker registers'-Registers beschreiben und auslesen. 
Zum Beispiel, ich schreibe zwei verschiedene Werte in 
Watchpoint_0_und_1_Address_Registers und kann diese Werte korrekt 
auslesen.
Allerdings, wenn ich den 'Debug Comms Data Register'-Register mit einer 
Kommando beschreibe, bleibt der Register für immer 0x100000001, so das 
es scheint für mich, dass der ICEBreaker gar nichts aktiv ist, und holt 
die Kommando nicht ab.

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.