Hallo! Ich versuche schon seit längerem einen ATmega16 mit eine selbst entwickelte Software für Keil ULink und über JTAG zu programmieren. Ich konnte die Software bereits so weit testen, dass ich sicher bin, dass beim auführen einse Befehl das richtige gemacht wird. Das heißt die JTAG-State-Machine wird richtig durchlaufen und z.B. wenn ich Daten aus dem DR schiebe diese am PC richtig ankommen, weiters werden auch immer die richtigen Daten in das DR geschoben. Jetzt zu meinem Problem: Wenn ich z.B. die Signature Bytes auslesen möchte führe ich alle Schritte wie im Datenblatt beschrieben aus (S.290 http://www.atmel.com/dyn/resources/prod_documents/doc2466.pdf). Die Signature Bytes die ich bekomme sind jedoch alle auf NULL, das kann laut Datenblatt nicht sein. Nach einigen Test bin ich jetzt darauf gekommen das ich die Befehle, die ich in das DR (in diesem Fall 15 bit PCR Register) schiebe, beim nächsten Durchlauf (nach einer Runde in der State-Machine) wieder aus dem Register schiebe, jedoch das 2.Byte, in welchem die Signature bytes eingetragen sein sollten immer auf NULL gesetzt wird. Somit kann man sagen das der µC meine Befehle ignoriert bzw. die Rückgabedaten immer auf Null setzt. Hat vielleicht irgendjemand eine Idee woran das liegen kann? Grüße Manuel
Du hast wohl eher ignoriert das es mehrere JTAG Instructions gibt. Und du die Daten mit einer anderen Instruction ausliest als du den Befehl reinschiebst. Die Controller funktionieren mit JTAG einwandfrei bisauf das Atmega16 und 32 nicht im Daisy Chain Betrieb funktionieren.
Datenblatt S. 282: The Programming Command Register is a 15-bit register. This register is used to serially shift in programming commands, and to serially shift out the result of the previous command, if any. Über die Instruction PROG_COMMANDS habe ich dieses Register ausgewählt, was laut meinen Test auch funktioniert haben sollte, da ich immer 15-Bit auslese bzw. schreibe und keine Bitverschiebungen erhalte und es das einzige 15-Bit Register ist. Laut der Erklärung auf S.284 die Signature bytes auszulesen sollte alles also über diese Register laufen, oder verstehe ich da etwas falsch?
ne sollte dann schon passen, normalerweise liest oder schreibt man daten nur über ein anderes register, aber wenn atmel das tatsächlich so unglücklich umgestezt hat ... habs jetzt nicht mehr im kopf
ich verwende dabei ein OLIMEX AVR-P40-USB evaluation board. Ich bin nicht sicher ob der ATmega der darauf sitzt schon einmal verwendet wurde und ob die fuses vielleicht falsch gesetzt sind. Könnte das ein Grund sein?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.