Forum: Mikrocontroller und Digitale Elektronik "JTAG lockout recovery sequence" beim MAC7116 durchführen


von Olli Z. (z80freak)


Angehängte Dateien:

Lesenswert?

Hat hier vielleicht jemand Erfahrung wie man einen gelockten MAC7116 
(MAC7100er Familie) entsperrt?
Laut Datenblatt gibt es eine "JTAG lockout recovery sequence" mit der 
interne der Program- und Daten-Flash des MAC gelöscht wird und man ihn 
danach neu programmieren kann.

Die Prozedur ist in Kapitel "15.4.2.3 JTAG Lockout Recovery" 
folgendermaßen beschrieben: "
In a manner similar to ARM CPU instruction execution flows described in 
Section 15.4.1.5 "Program, Erase, and Verify Operations" a sequence of 
JTAG commands can be used to:
 1. Execute a mass erase command,
 2. execute a blank check,
 3. program the Flash Security Word (offset 0x0414) bits corresponding 
to the CFMSEC[SEC] field to 0b10 (see Section 15.3.1.3), and
 4. RESET the device into expanded mode to execute boot code from 
external memory.
Refer to Section B.4.4.3 "Memory Mapped Register Access via JTAG" on 
page B-612 for more

Dort steht z.B. das das CFM-Kommando "Mass Erase" 0x41 ist. Dieses soll 
das gesamte Flash löschen (also auf 0xFF setzen).

Nun ist schon die Frage wie ich dieses Kommando übermittele? Ich muss ja 
eine bestimmte JTAG-Instruction verwenden (IR-Register) und dann 
vermutlich über geeignete DR-Register Bytes erstmal den MAC so 
einstellen das er weiss das nun CFM-Kommandos folgen und irgendwann dann 
auch das 0x41 dort absetzen.

Aber selbst das allein reicht nicht, wie man aus dem Ablaufplan in der 
Grafik erkennen kann. Es müssen irgendwelche Bits entsprechend gesetzt 
sein (werden?) damit das ganze klappt.

Ich habe einen Segger J-Link zur Verfügung und könnte mir vorstellen das 
man die entsprechenden Sequenzen mittels eines J-Link Scriptfiles 
(https://wiki.segger.com/J-Link_script_files) programmieren kann, nur 
habe ich damit noch keine Erfahrung und könnte etwas Unterstützung 
gebrauchen :-)

Dankeschön!

von Olli Z. (z80freak)


Angehängte Dateien:

Lesenswert?

Auch wenn das Interesse, naja zumindest das Echo auf meine Anfrage eher 
dürftig war will ich doch auch der Community was zurückgeben und die von 
mir gefundene Lösung zum Problem präsentieren. Evtl. hat mal jemand das 
gleiche Problem und findet dann auch eine Antwort dazu :-)

Die Kernproblematik war, das ich durch einen unbedachten Ausleseversuch 
mittels JTAG einen Selbstschutzmechanismus des MAC7116 ausgelöst habe. 
In der Folge hat dieser ein LOCK-Bit im Flash des Security-Words (ab 
0x414) geändert. Diese Daten liest der Chip nach dem RESET ein und geht, 
sobald das Flag erkannt wurde in einen gesperrten Zustand.

In diesem Zustand ("Chip Secured Mode") wird kein Programmcode 
ausgeführt und auch sonst keine weitere Initianisierung der MCU 
durchgeführt. Es wird wohl auch nur noch ein limitierter Satz von 
JTAG-Befehlen ausgeführt.

In diesem Zustand habe ich den MODA-Pin auf Vcc (1) gelegt. Das sorgt 
dafür das die Programmausführungsbasis von 0x0000 0000 auf 0xFE00 0000 
verlagert wird. Hier befindet sich das DATA-Flash. Dieses ist 32kb groß.

Über J-Flash konnte die CPU-ID ermittelt werden. Um aber dann irgendwas 
machen zu können muss die CPU angehalten werden. Hierzu habe ich den 
obligatorischen "HALT" der INIT-Sequenz hinzugefügt. Normalerweise habe 
ich hier auch immer noch einen RESET davor, aber genau der verhindert 
dann den Halt des Prozessors. Anschließend konnte der Connect die CPU 
anhalten, aber nichts weiter tun weil der beim versuch Code ins RAM zu 
laden Probleme hatte.

Die Lösung war die CPU-Taktfrequenz über die Memory-Mapped-IO Register 
richtig einzustellen (50 MHz, basierend auf dem externen 8 MHz Quarz) 
und schon konnte ich vollständig connecten!

Anschließend list sich das DATA-Flash problemlos löschen und nach ziehen 
des MODA Pins (0) auch das PROGRAM-Flash. Hier habe ich anschließend 
darauf geachtet das an 0x414 ein gültiges Security-Word stand welches 
den Chip "offen" zurücklässt.

Das entsprechende J-Flash Projekt habe ich mal beigefügt.

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.