Freescale Kinetis KE - Schreiben auf Flash


12

Ich benutze seit vielen, vielen Jahren verschiedene Mikrocontroller und Mikroprozessoren, aber die Kinetis KE-Serie (speziell die S9KEAZN64AMLC) scheint mich zu behindern.

17. Januar 2015 TL; DR:

Freescale bestätigt, dass Version 2.0.0 der Kinetis Design Studio-Software nicht mit diesem Gerät funktioniert (einschließlich der eigenen TRK-KEA64-Evaluierungskarte). Sie empfehlen vorerst die Verwendung von CodeWarrior MCU V10.6.

Segger hat v4.96a veröffentlicht (das "a" ist wichtig, ich habe v4.96 verwendet), das das Problem behebt und es Ihnen ermöglicht, ein Segger J-Link Lite CortexM-Debugger-Board mit KDS zu verwenden und über vollständige Programm- / Debug-Funktionen zu verfügen.

Bevor Segger v4.96a veröffentlichte, gelang es mir, den Chip zu flashen, indem ich den OpenSDA-Debugger auf Freescales kostengünstigem (15 US-Dollar) FRDM-KL25Z-Evaluierungsboard neu programmierte, indem ich die OpenSDA-Firmware, die mit USBDM geliefert wurde, erneut flashte (unter Verwendung von v4.10.6.240). Ich habe dann USBDMs eigenständige "ARM Programmer" Software verwendet. Ich habe nicht viel Zeit damit verbracht, das Debuggen zum Laufen zu bringen, da ich das Debuggen von "oldschool" so gut beherrsche, dass ich es nicht brauche. Stellen Sie sicher, dass Sie ein "harmloses" Programm in das On-Board-Target KL25 flashen, da die Reset-Leitung des On-Board-Targets KL25 auch mit J11-Cut noch mit dem OpenSDA-Debugger verbunden ist (siehe Keith Wakehams Blogpost) , weiter unten verlinkt).

Ein großes Dankeschön an Erich Styger für die freundliche Unterstützung bei der Ermittlung des Problems und der Bestätigung meiner Ergebnisse per E-Mail.

Nun zurück zu unserer regulären Frage:

Ich habe ein dumm-einfaches 3.3V Breakout Board gebaut. Es hat einige LEDs auf PTA, eine UART-Verbindung auf PTC und die SWD-Leitungen sind auf ihren Standleitungen. Es gibt buchstäblich nichts Besonderes oder Lustiges an diesem Board.

Ich verwende ein J-Link Lite für Cortex-M (J-Link LITE CortexM-9, siehe https://www.segger.com/jlink-lite-cortexm.html ) und unter OSX und Windows bekomme ich das Gleiches Ergebnis: Das Dienstprogramm J-Link Commander kann den Chip identifizieren, ich kann in SRAM lesen und schreiben und mit den Peripheriegeräten spielen, wobei manuelle Lese- und Schreibvorgänge an die richtige speicherabgebildete E / A-Adresse erfolgen. Wenn ich versuche, das Gerät zu flashen, schlägt dies jedoch fehl.

$ JLinkExe
SEGGER J-Link Commander V4.94c ('?' for help)
Compiled Oct 31 2014 20:08:55
DLL version V4.94c, compiled Oct 31 2014 20:08:48
Firmware: J-Link Lite-Cortex-M V8 compiled Jul 17 2014 11:40:12
Hardware: V8.00
S/N: 518107921
Feature(s): GDB
VTarget = 3.332V
Info: Could not measure total IR len. TDO is constant high.
Info: Could not measure total IR len. TDO is constant high.
No devices found on JTAG chain. Trying to find device on SWD.
Info: Found SWD-DP with ID 0x0BC11477
Info: Found Cortex-M0 r0p0, Little endian.
Info: FPUnit: 2 code (BP) slots and 0 literal slots
Cortex-M0 identified.
Target interface speed: 100 kHz

J-Link>device skeazn64xxx2
Info: Device "SKEAZN64XXX2" selected (64 KB flash, 4 KB RAM).
Reconnecting to target...
Info: Found SWD-DP with ID 0x0BC11477
Info: Found SWD-DP with ID 0x0BC11477
Info: Found Cortex-M0 r0p0, Little endian.
Info: FPUnit: 2 code (BP) slots and 0 literal slots

J-Link>r
Reset delay: 0 ms
Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit.

J-Link>erase
Erasing device (SKEAZN64xxx2)...

(...several second pause while it communicates with the MCU...)



****** Error: PC of target system has unexpected value after erasing sector. (PC = 0xFFFFFFFE)!
---------------------------------------------------------------------- Registers -------------------------------------------------------------------------------------
    PC   = FFFFFFFE
Current: R0   = 00F3E3BE, R1   = 00000001, R2   = 4004801C, R3   = 00000001
    R4   = 00000000, R5   = 00000000, R6   = 000000F4, R7   = 1FFFFD61
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Info: J-Link: Flash download: Total time needed: 2.174s (Prepare: 0.894s, Compare: 0.000s, Erase: 0.736s, Program: 0.000s, Verify: 0.000s, Restore: 0.542s)
ERROR: Erase returned with error code -5.

Das J-Link Lite ist vollkommen in Ordnung (ich kann mit dem nRF58122 SoC, einem anderen Cortex-M0-Prozessor, lesen und schreiben) und das Gerät scheint ansonsten zu funktionieren. Ich weiß, dass der Kinetis entsperrt ist, da er von DigiKey fabrikneu ist, aber selbst dann läuft der Befehl "kinetis unlock" in JLinkExe ohne Fehler oder nützliche Informationen ab.

Zu diesem Zeitpunkt bin ich sicher, dass ich etwas Dummes mache, aber ich bin ratlos, was es sein könnte.

Hat schon jemand mit diesen Geräten gearbeitet? Wie programmierst du sie?

Bearbeiten, um eine exemplarische Vorgehensweise hinzuzufügen:

Weitere Informationen:

Ich habe gelesen, dass der NMI # -Pin beim Zurücksetzen aktiviert ist (und dies durch Lesen von SIM_SOPT überprüft wurde), aber auch, dass er bei Aktivierung ein internes Pull-up aufweist. In diesem speziellen Teil befindet sich die PTB4 an Pin 10, der in meinem Design ein No-Connect ist. Das Deaktivieren des NMI-Pins macht keinen Unterschied. RST # ist ähnlich; Es ist mit einem Druckknopf verbunden, der den Stift erdet und auch an den J-Link Lite geht, aber es gibt kein externes Pullup. Dies sollte keine Rolle spielen, da der RST # -Pin wie NMI # über ein internes Pullup verfügt, das aktiviert wird, wenn PTA5 als Reset konfiguriert ist.

Mit Blick auf die Taktung jetzt ... Nach dem Zurücksetzen ist ICS die Taktquelle für die FLL und BDIV in ICS_C2 ist auf 001 eingestellt (die Standardeinstellung für das Zurücksetzen). Wenn ich das richtig verstehe, bedeutet dies, dass der interne 32-kHz-Oszillator mit 1024 multipliziert und dann durch 2 geteilt wird, was ICSOUTCLK zu 32 kHz * 1024/2 oder 16,8 MHz macht. Ich kann über die J-Link-CLI überprüfen, ob die FLL gesperrt ist, indem ich ICS_S lese:

J-Link>mem8 40064004 1
40064004 = 50

(LOCK und IREFST sind gesetzt, das ist richtig.)

Ich gehe dann weiter, um zu überprüfen, ob auf der SIM die Uhr für den Flash-Controller aktiviert ist, indem ich SIM_SCGC lese. Ich kann auch schnell überprüfen, ob BUSDIV in SIM_BUSDIV auf Null gesetzt ist, was bedeutet, dass BUSCLK dieselbe Frequenz hat wie ICSOUTCLK (dh es wird nicht heruntergeteilt):

J-Link>mem32 4004800c 1
4004800C = 00003000
J-Link>mem32 40048018 1
40048018 = 00000000

Bisher sieht alles gut aus. BUSCLK ist 16,8 MHz und der Takt des Flash-Controllers wird nicht gesteuert.

Gehen wir nun zum Flash-Controller über. Out of Reset FCLKDIV ist Null, und wir benötigen einen 1-MHz-Takt. Tabelle 18-2 in KEA64RM zeigt, dass FDIV auf 0x10 gesetzt werden sollte.

Out of Reset:

J-Link>mem8 40020000 1
40020000 = 00

Das Einrichten des Teilers und das Überprüfen von Dingen sind gut:

J-Link>w1 40020000 10
Writing 10 -> 40020000
J-Link>mem8 40020000 1
40020000 = 90

FDIVLD wird gesetzt und der korrekte Wert in FDIV angezeigt.

Bevor Sie zu weit gehen, stellen Sie sicher, dass der Blitz nicht geschützt ist:

J-Link>mem8 40020001 1
40020001 = FE

KEYEN = 11 (deaktiviert) und SEC = 10 (ungesichert). In Ordnung. Lassen Sie uns überprüfen, ob das Gerät leer ist:

J-Link>mem8 40020006 1
40020006 = 80
J-Link>w1 40020002 0
Writing 00 -> 40020002
J-Link>w1 4002000a 1
Writing 01 -> 4002000A
J-Link>mem8 40020006
J-Link>w1 40020006 80
Writing 80 -> 40020006
J-Link>mem8 40020006 1
40020006 = 83

Hier sehen wir, dass die MGSTAT-Bits in FSTAT anzeigen, dass die Leerprüfung fehlgeschlagen ist und dass auch nicht korrigierbare Fehler gefunden wurden. Seltsam. Versuchen wir es selbst zu löschen:

J-Link>w1 40020002 0
Writing 00 -> 40020002
J-Link>w1 4002000a 8
Writing 08 -> 4002000A
J-Link>w1 40020006 80
Writing 80 -> 40020006
J-Link>mem8 40020006 1
40020006 = 80

Der Befehl Alle löschen war erfolgreich. Versuchen wir jetzt einen Blankoscheck:

J-Link>w1 40020002 0
Writing 00 -> 40020002
J-Link>w1 4002000a 1
Writing 01 -> 4002000A
J-Link>w1 40020006 80
Writing 80 -> 40020006
J-Link>mem8 40020006 1
40020006 = 80

Jetzt ist der Blankoscheck in Ordnung?

An diesem Punkt bin ich bereit aufzugeben, den Verlust dieser Prototypen aufzuzehren und mit einem Prozessor von ST zu arbeiten, bei dem ich noch nie zuvor solche Probleme hatte. Die Kinetis-Dokumentation ist gründlich genug, aber sehr umfangreich und ich finde es sehr schwierig, damit anzufangen. Ich kann E / A durch Speicherlesevorgänge wackeln und auf andere Peripheriegeräte zugreifen, aber ich kann für mein ganzes Leben nicht herausfinden, was mit dem Flash-Controller nicht stimmt. Ich arbeite seit über 20 Jahren mit Mikros und diese Art von Schwierigkeiten habe ich noch nie erlebt.

20150102 bearbeiten:

Also immer noch nicht hingehen. Ich habe tatsächlich ein FRDM-KL25Z-Evaluierungsboard gekauft (15 USD von DigiKey) und es modifiziert, indem ich die generische CMSIS-DAP-Software in den OpenSDA-Debugger gestellt und J11 gemäß Keith Wakehams Blog geschnitten habe . Ich habe ein On-Board-Target (die KL25Z), das ein einfaches Programm ausführt, damit es die Reset-Leitung nicht stört, und ich kann mein SKEAZN64 mit OpenOCD sehen und damit spielen, aber leider kann es es auch nicht programmieren. Die Kinetis Design Studio (KDS) -Software lässt mein Kinetis nicht flashen, da sie als geschützt eingestuft wird und ich einen Massenlöschvorgang durchführen muss, aber OpenOCD (als Teil von KDS) scheint nicht zu wissen, wie das geht. Die Git-Master-Version von OpenOCD, die ich auf meinem Mac erstellt habe, versteht Kinetis, aber nicht die spezifische KEA-Serie.

Zurück zum J-Link ...

@AdamHaun hatte eine wirklich gute Ahnung, und wenn ich den J-Link-Reset-Typ (Befehl rsettype) auf '6' (Kinetis) setze, soll J-Link den Watchdog nach dem Zurücksetzen des Cores deaktivieren. Betrachtet man das WDOG_CS1-Register (0x40052000), so scheint dies der Fall zu sein, aber es gibt immer noch keine Würfel. Ein Löschvorgang scheint mit dem PC um 0xfffffffe und dem Fehlercode -5 nicht mehr möglich zu sein, und der Befehl "unlock kinetis" funktioniert nur, wenn ich den Reset-Pin mit SIM_SOPT deaktiviere (indem ich den 32-Bit-Wert 0x00000008 auf 0x40048004 schreibe). Wenn ich das tue, kann die CPU leider nie wieder angehalten werden, vermutlich weil die SWD-Schnittstelle die Rücksetzleitung nicht verwenden kann, um den SWD-DAP in einen bekannten Zustand zu zwingen.

20150103 bearbeiten:

Ich habe blinkende LED

WIEDERHOLEN

Ich habe blinkende LED

TL; DR-Version: Legen Sie das USBDM-Image auf die FRDM-KL25Z-Platine (eine Geschichte für sich), und senden Sie den Test mithilfe der eigenständigen ARM Programmer-App an die Platine. Power Cycle und Voilà.

Lange Version wird später kommen. Ich habe jetzt weniger als 48 Stunden Zeit, um Software für dieses KEAZN64-Board zu schreiben und zu debuggen, das Ändern / Testen anderer dazugehöriger Software abzuschließen und an einigen Dokumentationen für einen anderen Client zu arbeiten. Ich verspreche, dass ich diese Frage mit einer detaillierten Antwort aktualisieren werde . Ich wollte nur meinen Erfolg teilen. Vielen Dank für Ihre Hilfe. Möglicherweise muss ich mit den Mods sprechen, weil ich die Bounty besonders gerne einigen von euch geben würde.


Dumme Frage, aber bist du sicher, dass du das richtige J-Link Lite verwendest? Sie sind auf eine Plattform beschränkt. Ich habe selbst nicht das falsche verwendet, aber so würde ich erwarten, dass es scheitert.
Scott Seidman

Angesichts der Tatsache, dass die Tags j-link und kinetis hier praktisch keinen Inhalt haben (nur eine andere Frage), sollten Sie wahrscheinlich versuchen, das Support-Forum eines Herstellers oder E-Mail-, Telefon-Support- usw. zu finden. Forum.segger.com vielleicht?
Fizz

community.freescale.com/community/kinetis scheint ein weiterer Ort zu sein, an dem Sie möglicherweise Leute finden, die sich damit auskennen. community.freescale.com/thread/337779 scheint eine sehr ähnliche, wenn nicht genau Ihre Frage zu sein ...
Fizz

1
@RespawnedFluff Ich habe tatsächlich eine fast identische Frage in den Kinetis-Foren: community.freescale.com/message/466015 . e.se hat viel mehr Reichweite und ich bevorzuge diese Community / Site, daher habe ich mir gedacht, dass es nicht schaden würde, auch hier zu fragen.
Akohlsmith

1
@RespawnedFluff Die Frage wurde aktualisiert und enthält nun die spezifische J-Link-Version. Es ist nicht OEM-spezifisch und gibt direkt "Jeder unterstützte Cortex-M0 / M0 + / M1 / ​​M3 / M4 / M7-Kern" an.
Akohlsmith

Antworten:


3

Ich kann keine logischen Fehler in Ihrem Verfahren finden, aber hier sind einige Vorschläge:

  • Es gibt auch ein FTMRH_FERSTAT-Register (bei 4002_0007h). Es soll Ihnen sagen, was falsch gelaufen ist ... aber nur im Fall von Parität (oder Doppelparitätsfehlern). Ich bin nicht davon überzeugt, dass dies alles aufzeichnet, falls Fehler auftreten oder gelöscht werden, aber es lohnt sich wahrscheinlich, es zu überprüfen.

  • In der KEA-Dokumentation wird auch erwähnt, dass ein Interrupt durch Flash-Fehler ausgelöst werden kann (Abschnitt "18.3.5 Flash- und EEPROM-Interrupts"). Ich weiß nicht, ob dies der Fall ist, wenn der SEGGER ihn löscht, aber es ist eine plausible Erklärung, warum sich auch der PC ändert, da Sie Fehler im FSTAT-Register festgestellt haben. Leider zeigt der KEA-Dokumentationsabschnitt für den Interrupt-Controller ("3.3.2 NVIC-Konfiguration (Nested Vectored Interrupt Controller)") vage in Richtung der ARM-Website, um eine vollständige Dokumentation zu erhalten. Ich konnte nicht herausfinden, ob ein standardmäßiger Interrupt-Handler (beim Booten) für Flash-Fehler eingerichtet ist.

  • Sie haben nur Löschvorgänge auf Sektorebene manuell ausgeführt. Versuchen Sie daher, manuell (wie beim Schreiben des entsprechenden Registers) einen vollständigen Flash-Löschbefehl auszugeben. Die einzige Möglichkeit, dies in einem einzigen Befehl zu tun, scheint der in Abschnitt 18.3.9.10 (S. 246) des Handbuchs dokumentierte "Unsecure Flash" -Befehl zu sein. Dadurch wird sowohl das Gerät "entsichert" als auch ein vollständiger Flash- und EEPROM-Löschvorgang durchgeführt. Sie können ein FSTAT-Bit (CCIF) abfragen, um festzustellen, wann es voraussichtlich abgeschlossen ist, und anschließend die Fehlerflags erneut überprüfen. BEARBEITEN: Es gibt auch einen Abschnitt "18.3.9.7 Alle Blöcke löschen" im Handbuch, duh.

  • versuchen Sie es mit einer niedrigeren Bustaktfrequenz. Alles über 0,8 Mhz funktioniert gemäß der Dokumentation. Ich schlage dies vor, weil es einen Thread im Freescale-Forum gab, in dem ein externer Flash einwandfrei funktioniert hat, aber nicht über einer bestimmten Frequenz, die noch im ok-dokumentierten Bereich liegt. Es ist also möglich, dass der Flash-Controller im Chip ein Flakey ist und nicht mit dem gesamten angegebenen Frequenzbereich arbeiten kann.

  • Ebenso bist du ein anderer Chip. Es ist nicht unvorstellbar, dass Sie angesichts der Kosten (um die 3 US-Dollar) einen schlechten Preis haben. Ich erinnere mich, dass ich einen eingebetteten x86-Chip hatte, der in den meisten Fällen einwandfrei funktionierte, aber bei bestimmten Anweisungen im geschützten Modus seltsame Fehler aufwies. mein problem ging mit einem anderen gerät der gleichen marke weg. Mir ist nicht klar, ob Freescale (öffentlich bekannt gegebene) Steppings und Errata für diese Geräte hat oder nicht.

Dies ist alles, woran ich denken kann, wenn ich Vorschläge zum Debuggen mache, die von anderen auf dieser Seite nicht erwähnt wurden.

20150103 Bearbeitung (en):

(Verschobenes Material hier aus meinen Kommentaren & erweitert)

Es scheint, dass nicht alle Kinetis-Serien (zumindest offiziell) mit allen Blitzgeräten getestet wurden. Die relativ neue EA-Serie, die Sie tatsächlich verwenden, scheint offiziell nur vom Freescale-eigenen / OEM Cyclone MAX-Blinker unterstützt zu werden. Es ist das einzige, das auf Freescales Seite für die EA-Serien aufgeführt ist . Nun ist die Liste für ältere Kinetis wie KL0 viel länger, einschließlich eines SEGGER . Ich weiß nicht, ob dies einfach daran liegt, dass andere Blinker für die EA-Serie nicht getestet wurden, oder ob es sich tatsächlich um eine Programmiersprache handelt, die derzeit nur der Cyclone MAX kennt. Ich hatte gehofft, dass dies vielleicht nur darauf zurückzuführen ist, dass Freescale andere Blinker nur langsam auflistet, aber beim Überprüfen der J-Link-Handbuch gelesen habe (hoffentlich die richtige), es gibt dort auch keine getesteten Kinetis E- oder EA-Serien (S. 249), sondern nur Kinetis K10 bis K60-Geräte (und einige ältere MAC7).

Erwähnenswert ist, dass die PExDrv-Software / -Firmware für den Cyclone MAX ein Service Pack (Version 10.3) vom 20.03.2014 enthält, das "Unterstützung für MKE04Z64-, MKE04Z128-, MKE06Z64-, MKE06Z128-, SKEAZ64- und SKEAZ128-Derivate hinzufügt". Ein weiterer Hinweis ist die Open-Source- Bootloader / Flashloader-Software von Freescale für den KinetisObwohl es in letzter Zeit in 12/2014 noch aktualisiert wurde, werden keine Geräte der E- oder EA-Serie [sub] als unterstützt aufgeführt. Ich denke also, dass es einen Unterschied zwischen der E / EA-Serie und anderen Kinetis wie dem K10 gibt, obwohl ich keine Ahnung habe, was genau dieser Unterschied ist. Daher denke ich, dass die Erwartung, dass das EA-Flashen mit etwas anderem als dem Cyclone MAX automatisch funktioniert, an dieser Stelle wahrscheinlich unrealistisch ist. Möglicherweise können Sie anhand der Dokumentation der EA-Serie herausfinden, wie dies auf "Bare-Metal" -Ebene (Direktregisterbefehle) zu tun ist, aber ich stimme zu, dass die Dokumentation ziemlich stumpf ist. Es fehlt sicherlich jede Schritt-für-Schritt-Anleitung, die nur ein Referenzhandbuch ist. Hätte Freescales Open-Source-Bootloader / Flashloader die E / EA-Serie unterstützt, hätten Sie

Ihr Experiment mit dem FRDM-KL25Z (das mit einer Kinetis L-Serie geliefert wird) zeigt in die gleiche Richtung, dh Sie können eine L-Serie nicht mit einer EA-Serie tauschen und denselben Blinker verwenden (in diesem Fall OpenSDA).

Und wenn Sie wie Keith (der Blogger) sind, der "100 Dollar für einen Programmierer für lächerlich hält", werden Sie wahrscheinlich nicht mit der Perspektive zufrieden sein, über 900 Dollar für diesen Zyklon zu verlieren. Ich weiß nicht, ob Freescale dies absichtlich tut, um die Kunden in der Automobilbranche mit Vlies zu versorgen, oder was?

Beachten Sie auch, dass die Flashing-Funktion von OpenSDA anscheinend nur unter MS Windows funktioniert .

Wenn Sie mehr Boards ausprobieren (hacken) möchten, ist eines mit Kinetis der E-Serie möglicherweise eine bessere Idee, z. B. FRDM-KE02Z (13 US-Dollar bei Digi-Key). verwendet auch OpenSDA, so dass es möglicherweise hackbar ist. Sie machen / verkaufen keine Boards mit der EA-Serie, soweit ich das beurteilen kann. Es scheint jedoch, dass Sie nicht einen OpenSDA-Prozessor / eine OpenSDA-Karte verwenden können, um einen anderen Kinetis-Typ als den auf der eigenen Karte zu programmieren , selbst wenn beide Prozessoren der gleichen (z. B. L) Serie, aber mit unterschiedlichen Nummern sind. Leider bedeutet "Open" in OpenSDA nur, dass die SDA-Spezifikation offen ist, nicht, dass sie den Quellcode als Open Source ausgibt. Daher kann ich nicht einmal den Quellcode finden, mit dem ein Flash der E-Serie programmiert werden kann. Anscheinend habe ich da nur halb recht. OpenSDA v1 ist nicht Open Source, aber v2 ist es .

Also hier ist der Lowdown zu OpenSDAv2 . Es ist im Grunde nur ein CMSIS-DAP / mbed Bootloader & Flasher. Es kann also sein, dass es nicht die gleichen Funktionen hat oder die gleichen Chips wie v1 unterstützt ... und das stellt sich tatsächlich als der Fall heraus, da flash_features.h keine MKE (Kinetis E-Serie) auflistet, geschweige denn SKE (EA-Serie). Geräte. Zusammenfassend scheint Freescales Vorschlag für die EA-Serie zu lauten: Kaufen Sie unseren 900-Dollar-Cyclone-Flasher, oder wünschen Sie viel Glück beim Schreiben Ihrer eigenen, von uns veröffentlichten unvollständigen Open Source-Dateien.

Es stellt sich jedoch heraus, dass es ein Open-Source-Projekt gibt, das zumindest die Kinetis der E-Serie programmieren kann, nämlich USBDM . Das relevante Bit aus dem Changelog ist:

V4.1.6.140 (April 2014)

Zusätzliche Kinetis-Geräte (MKE04, MKE06, MK64F)

  • Korrekturen für MKE-Geräte (Programmieren fehlgeschlagen, außer nach Massenlöschung)

Und basierend auf diesem Protokolleintrag scheint es, dass die E-Serie skurril ist. Es gibt keine direkte Unterstützung für die EA-Serie (SKE), aber diese Codebasis ist wahrscheinlich die beste Wahl, wenn Sie Ihren eigenen Flasher hacken möchten. Oder Sie können den Autor von USBDM davon überzeugen, die EA-Serie (SKE) zu unterstützen. Als Hardware für USBDM hat sich herausgestellt, dass Sie den bereits erworbenen FRDM-KL25Z verwenden können. Sie müssen jedoch immer noch die USBDM-Software hacken, um die SKE-Chips zu unterstützen.

Die Master-Konfigurationsdatei für USBDM sieht ziemlich entmutigend aus. In USDBM werden verschiedene Blinker (Code-Basen) für verschiedene Geräte der MKE-Serie verwendet: "FTMRE" wird für MKE04 und MKE06 verwendet, "FTMRH" wird für MKE02 verwendet. Nach einem kurzen Blick auf die beiden Codebasen möchten Sie mit ziemlicher Sicherheit die FTRMH-Codebasis und nicht die FTRME-Codebasis. Letzteres hat eine andere FTMRH-Struktur als Ihr SKEA64-Gerät. Beispielsweise ist der Taktteiler nicht das erste, sondern das vierte Feld. FTRME setzt auch den Bus FIDV auf 0x17 = 24Mhz, was für Ihren Chip nicht in Reichweite zu sein scheint (S. 224 im KEA64-Handbuch schlägt max. 20Mhz vor). FTMRH setzt es auf 0x0F = 16Mhz (wie Sie), was in Ordnung zu sein scheint.

An diesem Punkt (es sei denn, Sie möchten den Cyclone MAX kaufen) wenden Sie sich am besten an Podonoghue, damit Ihr Chip mit seiner Codebasis funktioniert. Er scheint aktiv und sehr hilfsbereit zu sein (im Freescale-Forum) .

Auch aus diesem USDBM-Quellcode kann ich voraussagen, dass Ihr SEGGER Ihren SKEA auf keinen Fall selbst korrekt flashen kann, es sei denn, er erhält zuerst ein eigenes Firmware-Update. Warum sage ich das? Da die FTMRH-Codebasis von USDBM dort von genau einem Gerät verwendet wird, dem MKE02, von dem Ihr SEGGER scheinbar auch nichts weiß (basierend auf seinem Handbuch). Andere, gebräuchlichere Geräte wie die Kinetis L- und K-Serie verwenden einen anderen USDBM-Blinker, der auf einer FTFA-Codebasis basiert. Wenn Sie sich den FTFA-Code ansehen , unterscheidet sich die Flash-Controller-Register-Struktur (ebenfalls beginnend mit 0x40020000) für diese; Das erste Feld ist nicht einmal ein Taktteiler, sondern das Statistikregister usw. "Großartige" Möglichkeit für Freescale, inkompatible Geräte herzustellen ... aber zweifellos ein Segen für Blinkerhersteller.


1
FERSTAT zeigt nichts Nützliches an, wie Sie vermutet haben. Ich hatte es in diesem ganzen Debakel schon früh versucht. Alle Flash-Interrupts sind standardmäßig deaktiviert, aber ich habe geprüft, ob dies möglicherweise Teil des Problems ist. Auch dort keine Würfel. Ich habe zwei Boards und beide verhalten sich gleich, aber ich habe im Laufe der Jahre gelernt, dass es eine verschwindend kleine Menge an Zeit ist, an der Silizium schuld ist, weshalb ich mir hier die Haare ausreiße. :-)
akohlsmith

Ich werde versuchen, die Frequenz zu senken. Die Standardeinstellungen beim Zurücksetzen scheinen für einen 16,78-MHz-Bustakt (32 kHz * 1024/2) zu gelten, weshalb ich einen Flash-Takt-Teiler von 0x10 (32 kHz * 1024/2/16 ist 1,048 MHz, was aber vielleicht innerhalb der Spezifikation liegt kurz vor dem rand)
akohlsmith

1
Ihr anderer Vorschlag, über den Befehl zum Aufheben des Schutzes (0xb), anstatt alle zu löschen (0x8), ist erfolgreich, aber ich kann die CPU danach nicht anhalten und auch danach kann ich scheinbar nichts mehr in Flash programmieren.
Akohlsmith

Ich danke Ihnen vielmals für all Ihre Bemühungen, diesem Internet-Fremden zu helfen. Ich kämpfe darum zu verstehen, warum dieser Chip so schwer zu bedienen ist, selbst wenn unterstützte Programmierer (J-Link und CMSIS-DAP) und Freescales eigene Entwicklungsumgebung und Tools verwendet werden. Es weht mein Verstand.
Akohlsmith

Vielen Dank für Ihre detaillierte Recherche und Ihre weitere Hilfe. Genau das habe ich letztendlich getan: Den FRDM-KL25Z mit der USBDM-Firmware und dem eigenständigen ARM-Blinker zu verwenden. Dies hat meinen blinkenden LED-Test in das Gerät gebracht. Was merkwürdig ist, ist, dass die von Segger unterstützte CPU-Liste den SKEAZN64xxx2 ausdrücklich erwähnt, aber es funktioniert nicht.
Akohlsmith

2

Haben Sie Folgendes versucht: FLASH mit Segger J-Link entsperren und löschen

Angeblich musst du:

Um die geschützten FLASH-Sektoren mit Segger J-Link neu zu programmieren, muss zuerst das Gerät entsperrt und massenweise gelöscht werden. Hierfür gibt es das Dienstprogramm J-Link Commander, das über eine Befehlszeilenschnittstelle verfügt, mit der der Schutz des Geräts aufgehoben und das Gerät gelöscht werden kann. Nur zum Löschen ist der J-Flash (und Lite) ein sehr nützliches Werkzeug, insbesondere um einen "sauberen" Gerätespeicher zu erhalten.

Was ich interessant fand, ist, dass Sie es entsperren und im nächsten Schritt löschen müssen, wenn das Entsperren dauerhaft sein soll:

Aber es scheint, dass ich ein Entsperren durchführen muss, gefolgt von einem Löschen, um es dauerhaft zu machen. Zum Löschen des Geräts kann ich dasselbe Befehlszeilenprogramm verwenden. Aber ich muss zuerst den Gerätenamen angeben und kann ihn dann löschen (Beispiel für die KL25Z):

EDIT1: falsche Daten hinzugefügt.

EDIT2: kannst du vielleicht das Flash Security (FSEC) Register lesen? Hast du versucht?

EDIT3: Aus der Verwendung der Kinetis-Sicherheits- und Flash-Schutzfunktionen, Rev. 1, 6/2012

Massenlöschung über Debugger / JTAG Debugger und JTAG-Tools haben nur sehr eingeschränkten Zugriff auf das Gerät, wenn ein Prozessor gesichert ist. Die einzigen Register, auf die über den JTAG zugegriffen werden kann, sind die MDM-AP-Status- und Steuerregister. Damit Debug-Tools Teile entsichern können, kann Bit 0 des MDM-AP-Steuerregisters gesetzt werden, um ein Massenlöschen des Prozessors anzufordern. Um diese Methode zum Deaktivieren der Sicherheit zu verwenden, muss FSEC [MEEN] auf einen anderen Wert als 10 festgelegt werden, um die Möglichkeit zum Massenlöschen zu ermöglichen. Wenn die Massenlöschung deaktiviert ist (FSEC [MEEN] = 10), wird die Massenlöschanforderung vom Flash ignoriert und das Gerät kann mit dieser Methode nicht ungesichert werden. Viele Debugger verwenden automatisch Bit 2 des MDM-AP-Statusregisters, um festzustellen, ob ein Gerät beim Versuch, eine Verbindung herzustellen, gesichert ist. Ein Debugger-Popup-Fenster kann verwendet werden, um darauf hinzuweisen, dass das Gerät gesichert ist, und um zu fragen, ob ein Massenlöschvorgang gewünscht wird, um das Gerät zu entsichern. Sobald die Massenlöschung abgeschlossen und verifiziert ist, wird die Sicherheit deaktiviert. Einige Debugger programmieren das Flash-Konfigurationsfeld möglicherweise automatisch so, dass der Flash nach Abschluss des Massenlöschvorgangs in einen ungesicherten Zustand versetzt wird, FSEC = 0xFE.

Außerdem bin ich auf Beiträge gestoßen, in denen erwähnt wurde, dass verschiedene Kinetis-Familien unterschiedliche RESET-Signalmanipulationen erfordern, wenn versucht wird, das MDM-AP-Register zu lesen / schreiben.

EDIT4: Haben Sie versucht, SWD_DIO mit einem starken Pull-up zu versehen? Es ist ein Schuss im Dunkeln, aber Freescale empfiehlt es.


Vielen Dank, dass Sie sich die Zeit genommen haben, dies zu überprüfen und Vorschläge zu machen. FTMRH_FSEC (0x40020001) gibt den Wert 0xfe zurück, der so entsperrt / unsicher wie möglich ist. Wenn ich Flash bei 0x0000400c lese, kann ich auch sehen, dass die Sicherheitsbits denselben Wert anzeigen (wobei FSEC die Werte beim Zurücksetzen beim Einschalten erhält): J-Link> mem8 400 10 00000400 = FF FF FF FF FF FF FF FF FF FF FF FF FF FF FE FF
Akohlsmith

J-Link verfügt über einen Befehl "rsettype" mit einem bestimmten Kinetis-Wert (6), der den Watchdog-Timer beim Zurücksetzen deaktiviert. Es hält den Prozessor nicht an, aber ich kann das mit dem "h" -Befehl tun. Ich kann auch sehen, dass, wenn ich Rsettype 6 nicht verwende, die Watchdog-Register melden, dass der Watchdog aktiviert ist, was mit der Dokumentation übereinstimmt.
Akohlsmith

Ich würde das Pull-Up ausprobieren, beide Boards die du ausprobiert hast haben es nicht und wenn das nicht funktioniert, dann ist der Jlink NOK.
iggy

Ich habe das Pullup ausprobiert (4.7k, nicht sicher, wie "stark" stark sein soll), aber es hat keinen Unterschied gemacht.
Akohlsmith

4k7 ist in Ordnung. Du hast alles getan, was du konntest. Überprüfen Sie ab diesem Zeitpunkt das Verhalten mit FRDM-KL25Z und senden Sie dann 1 Million Tickets an die Jlink-Mitarbeiter.
iggy

1

Sie müssen zuerst den Prozessor anhalten. Es ist offensichtlich, dass Sie ein Symptom für einen laufenden Prozessor bekommen. Ich benutze openocd; Vor dem Flashen des Geräts verwende ich den Befehl "Halt zurücksetzen". Dieses "Anhalten" ist ein Unterbefehl von "Zurücksetzen", um unmittelbar nach dem Zurücksetzen anzuhalten, während es auch einen eigenständigen Anhalten-Befehl gibt.

Suchen Sie also nach einem "reset halt" -Befehl. Nur ein Halt wird nicht ausreichen, da Sie den Zustand der Vorinitialisierung von Vektoren erreichen müssen, denke ich.


Vielen Dank für Ihren Kommentar, aber der Segger stoppt die CPU zuerst. Ich habe auch versucht, die CPU manuell anzuhalten, bevor diese Befehle unverändert ausgegeben wurden. Das hätte ich in meiner Frage deutlich machen sollen.
Akohlsmith

Ich habe nicht bemerkt, dass Sie sagten, dass ein Anhalten vor der Initialisierung der Vektoren notwendig sein könnte. Wenn ich es mir anschaue, habe ich Probleme zu verstehen, warum das notwendig wäre. Vielen Dank für den Hinweis, jedes bisschen hilft
Akohlsmith

1

Ich habe es noch nicht erwähnt gesehen, also gehe ich voran und spekuliere, dass das Problem darin besteht, dass dieser Teil einen Cache hat, der beim Zurücksetzen aktiviert wird. Dies steht im Einklang mit dem "seltsamen" Verhalten, das Sie beim Blankoscheck beobachtet haben. Das zugrunde liegende Flash wurde aktualisiert, der Cache jedoch nicht. Um dies zu beheben, deaktivieren Sie sowohl den Daten- als auch den Anweisungscache, indem Sie in schreibenMCM_PLACR atF000_300Ch und leeren Sie dabei auch den Cache. Dasselbe seltsame Verhalten dürfte auch den Segger verwirrt haben.


Dies war ein sehr guter Vorschlag. Beim Zurücksetzen lautet MCM_PLACR 0x00000850, was etwas ungerade ist (Datencache deaktiviert, die Bits 6 und 4 sind jedoch in der Dokumentation reserviert). Ich habe versucht, alles zu deaktivieren (Spekulation, Controller-Cache, Befehls-Caching) und dann den Cache zu löschen, indem ich 0x0000bc00 geschrieben habe. Es wurde 0x0000b850 zurückgelesen, aber keine Verhaltensänderung.
Akohlsmith

Ich bin sehr daran interessiert zu hören, wann Sie dieses Problem endlich lösen können. Inzwischen ist dieser Chip sicherlich nicht sein würde in keinem meiner Entwürfe in absehbarer Zeit. Entschuldigen Sie die Schmerzen, aber danke, dass Sie die interessante Frage geteilt haben.
Edward

0

Da es sich bei der Fehlermeldung um den PC-Wert handelt, hört sich an, als würde die CPU irgendwo aus dem Ruder laufen. Dies ist ein langer Versuch, aber haben Sie versucht, den Watchdog-Timer zu deaktivieren?


Das war ein ausgezeichneter Vorschlag; Nachdem ich Ihre Antwort gelesen hatte, verbrachte ich einige Zeit damit, diese Theorie zu testen. Es scheint jedoch, dass der J-Link beim Ausführen von "device skeazn64xxx2" dies bereits berücksichtigt und den Watchdog nach dem Zurücksetzen deaktiviert. Ich habe dies überprüft, indem ich das Register WDOG_CS1 mit und ohne Angabe des Geräts zwischen den Ein- und Ausschaltungen überprüft habe. :-(
akohlsmith

Hmm… okay, das andere, was mir aufgefallen ist, ist, dass Sie während des Blankoschecks korrigierbare Fehler bekommen. Deaktiviert Ihr J-Link Flash ECC? Wenn nicht, kann dies zu Problemen bei der Überprüfung des Rücklesens und möglicherweise sogar zu unerwarteten Interrupts führen. (Ich kenne Freescale-MCUs nicht genau, aber ich denke, diese Art von Verhalten ist ziemlich verbreitet.)
Adam Haun
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.