Freescale Kinetis KE - Schreiben in Flash

Ich benutze seit vielen, vielen Jahren verschiedene Mikrocontroller und Mikroprozessoren, aber ich scheine von der Kinetis KE-Serie (insbesondere dem S9KEAZN64AMLC) behindert zu werden.

17. Januar 2015 TL;DR:

Freescale bestätigt , dass v2.0.0 ihrer Kinetis Design Studio-Software nicht mit diesem Gerät funktioniert (einschließlich ihres eigenen TRK-KEA64-Evaluierungsboards). 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 volle Programm-/Debug-Fähigkeit zu haben.

Bevor Segger v4.96a veröffentlichte, gelang es mir, den Chip zu flashen, indem ich den OpenSDA-Debugger auf Freescales kostengünstigem ($ 15) FRDM-KL25Z-Evaluierungsboard neu programmierte, indem ich die OpenSDA-Firmware, die mit USBDM geliefert wurde (mit v4.10.6.240), neu flashte. Ich habe dann die eigenständige "ARM Programmer" -Software von USBDM verwendet. Ich habe nicht viel Zeit damit verbracht, das Debuggen zum Laufen zu bringen, da ich mich mit dem Debuggen der "alten Schule" gut genug auskenne, um es nicht zu benötigen. Bitte stellen Sie sicher, dass Sie ein "gutartiges" Programm in das On-Board-Target KL25 flashen, da es sonst die Programmierung stören kann, da die Reset-Leitung des On-Board-Target KL25 auch mit J11-Schnitt noch mit dem OpenSDA-Debugger verbunden ist (siehe Keith Wakehams Blogbeitrag , unten verlinkt).

Ein großes Dankeschön an Erich Styger , der mir sehr, sehr freundlich geholfen hat, das Problem zu ermitteln und meine Ergebnisse per E-Mail zu bestätigen.

Nun zurück zu unserer regelmäßig geplanten Frage:

Ich habe ein dummes, einfaches 3,3-V-Breakout-Board gebaut. Es hat einige LEDs auf PTA, einen UART-Anschluss auf PTC und die SWD-Leitungen sind auf ihren dedizierten Leitungen. Es gibt buchstäblich nichts Besonderes oder Lustiges an diesem Board.

Ich verwende einen J-Link Lite für Cortex-M (J-Link LITE CortexM-9, siehe https://www.segger.com/jlink-lite-cortexm.html ) und sowohl unter OSX als auch unter Windows bekomme ich die gleiches Ergebnis: Das Dienstprogramm J-Link Commander kann den Chip identifizieren, ich kann in SRAM lesen und schreiben und mit den Peripheriegeräten mit manuellen Lese- und Schreibvorgängen an der richtigen speicherabgebildeten E / A-Adresse herumspielen. Wenn ich versuche, das Gerät zu flashen, schlägt es 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.

Der J-Link Lite ist vollkommen in Ordnung (ich kann damit den nRF58122 SoC, einen anderen Cortex-M0-Prozessor, lesen und schreiben) und das Gerät scheint ansonsten zu funktionieren. Ich weiß, dass die Kinetis entsperrt sind, da sie fabrikneu von DigiKey sind, aber selbst dann läuft der Befehl „kinetis unlock“ in JLinkExe ohne Fehler oder nützliche Informationen ab.

Zu diesem Zeitpunkt bin ich mir sicher, dass ich etwas Dummes mache, aber ich weiß nicht, was es sein könnte.

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

bearbeiten, um eine exemplarische Vorgehensweise hinzuzufügen:

Einige weitere Informationen:

Ich habe gelesen, dass der NMI # -Pin außerhalb des Resets aktiviert ist (und dies durch Lesen von SIM_SOPT verifiziert), aber auch, dass er einen internen Pull-up hat, wenn er aktiviert ist. Auf diesem speziellen Teil befindet sich PTB4 auf Pin 10, was in meinem Design ein No-Connect ist. Das Deaktivieren des NMI-Pins macht keinen Unterschied. RST# ist ähnlich; Es ist mit einem Taster verbunden, der den Pin erdet und auch zum J-Link Lite geht, aber es gibt keinen externen Pullup. Dies sollte keine Rolle spielen, da der RST#-Pin wie NMI# einen internen Pullup hat, der aktiviert wird, wenn PTA5 als Reset konfiguriert ist.

Sehen Sie sich jetzt die Taktung an ... Außerhalb des Resets ist ICS die Taktquelle für die FLL und BDIV in ICS_C2 ist auf 001 gesetzt (die Reset-Standardeinstellung). Wenn ich das richtig verstehe, bedeutet dies, dass der interne 32-kHz-Oszillator von der FLL mit 1024 multipliziert und dann durch 2 geteilt wird, wodurch ICSOUTCLK 32 kHz * 1024 / 2 oder 16,8 MHz ergibt. Ich kann über die J-Link-CLI überprüfen, ob die FLL gesperrt ist, indem ich ICS_S auslese:

J-Link>mem8 40064004 1
40064004 = 50

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

Ich gehe dann weiter, um zu überprüfen, ob die SIM die Uhr für den Flash-Controller aktiviert hat, 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 wie ICSOUTCLK hat (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 beträgt 16,8 MHz und die Flash-Controller-Uhr ist nicht torgesteuert.

Kommen wir nun zum Flash-Controller. Außerhalb des Resets ist FCLKDIV Null, und wir benötigen einen 1-MHz-Takt. Tabelle 18-2 in KEA64RM zeigt, dass FDIV auf 0x10 gesetzt werden sollte.

Nicht zurückgesetzt:

J-Link>mem8 40020000 1
40020000 = 00

Den Teiler einrichten und überprüfen, ob alles in Ordnung ist:

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

FDIVLD wird gesetzt und der korrekte Wert in FDIV wird angezeigt.

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

J-Link>mem8 40020001 1
40020001 = FE

KEYEN = 11 (deaktiviert) und SEC=10 (ungesichert). Ok. Versuchen wir zu ü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 „Alles löschen“ war erfolgreich. Versuchen wir es nun mit einem 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 kurz davor, aufzugeben, den Verlust dieser Prototypen zu schlucken und mich für einen Prozessor von ST zu entscheiden, wo ich diese Art von Problemen noch nie zuvor hatte. Die Kinetis-Dokumentation ist gründlich genug, aber sie ist sehr dicht und ich finde es sehr schwierig, loszulegen. Ich kann I/O durch Speicherlesevorgänge wackeln und auf andere Peripheriegeräte zugreifen, aber ich kann mein Leben lang nicht herausfinden, was mit dem Flash-Controller nicht stimmt. Ich arbeite seit über 20 Jahren mit Mikros und diese Art von Schwierigkeiten ist mir noch nie zuvor begegnet.

20150102 bearbeiten:

Hier geht es also immer noch nicht. Ich habe tatsächlich ein FRDM-KL25Z-Evaluierungsboard (15 US-Dollar von DigiKey) gekauft und es modifiziert, indem ich die generische CMSIS-DAP-Software auf den OpenSDA-Debugger gesetzt und J11 gemäß Keith Wakehams Blog geschnitten habe . Ich habe das On-Board-Target (das KL25Z) mit einem einfachen Programm laufen lassen, damit es die Reset-Leitung nicht stört, und ich kann meinen SKEAZN64 mit OpenOCD sehen und damit spielen, aber leider kann es es auch nicht programmieren. Die Kinetis Design Studio (KDS)-Software flasht meine Kinetis nicht, weil sie sagt, dass sie geschützt ist und ich eine Massenlöschung 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, also bin ich wieder am Anfang.

Zurück zum J-Link...

@AdamHaun hatte eine wirklich gute Ahnung, und wenn ich den J-Link-Reset-Typ (rsettype-Befehl) auf den Typ '6' (Kinetis) setze, soll J-Link den Watchdog nach dem Zurücksetzen des Kerns deaktivieren. Wenn man sich das WDOG_CS1-Register (0x40052000) ansieht, scheint dies der Fall zu sein, aber immer noch keine Würfel. Ein Löschvorgang scheint mit PC bei 0xfffffffe und Fehlercode -5 aus den Fugen zu geraten, und ein Befehl "unlock kinetis" funktioniert nur, wenn ich den Reset-Pin mit SIM_SOPT deaktiviere (indem ich den 32-Bit-Wert 0x00000008 bis 0x40048004 schreibe). Wenn ich das tue, kann die CPU leider nie wieder angehalten werden, vermutlich weil die SWD-Schnittstelle die Reset-Leitung 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 das FRDM-KL25Z-Board (eine Geschichte für sich), verwenden Sie die eigenständige ARM-Programmierer-App, um die Test-.elf-Datei an das Board zu senden. Power Cycle und voilà.

Langversion kommt später. Ich habe jetzt weniger als 48 Stunden Zeit, um Software für dieses KEAZN64-Board zu schreiben und zu debuggen, andere zugehörige Software zu modifizieren/testen und an Dokumentation für einen anderen Kunden zu arbeiten. Ich verspreche, dass ich diese Frage mit einer detaillierten Antwort aktualisieren werde . Ich wollte nur meinen Erfolg teilen. Vielen Dank an ALLE für Ihre Hilfe. Ich muss vielleicht mit den Mods sprechen, weil ich das Kopfgeld wirklich gerne besonders an ein paar von euch geben würde.

Dumme Frage, aber bist du sicher, dass du den richtigen 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 fehlschlägt.
Angesichts der Tatsache, dass die j-link- und kinetis-Tags hier praktisch keinen Inhalt haben (nur eine andere Frage), sollten Sie wahrscheinlich versuchen, ein Support-Forum oder E-Mail-, Telefon-Support usw. des Herstellers zu finden. Vielleicht forum.segger.com ?
community.freescale.com/community/kinetis ist ein weiterer Ort, an dem Sie möglicherweise Leute finden, die sich damit auskennen. community.freescale.com/thread/337779 scheint eine sehr ähnliche, wenn nicht sogar Ihre Frage zu sein ...
Zugegeben, Sie haben Probleme bei nur 100 kHz, also wer weiß, vielleicht liegt es an etwas anderem.
Auch aus dem anderen Forum scheint der SEGGER Probleme mit einiger, aber nicht aller Kinetis-Hardware zu haben: forum.segger.com/index.php?page=Thread&threadID=1986
@ScottSeidman ja; J-Link Lite, spezifisch für die Cortex-M0-Serie. Dieser spezielle Prozessor wird ebenfalls unterstützt
@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, also dachte ich, es würde nicht schaden, auch hier zu fragen.
@RespawnedFluff Ich habe eine E-Mail an Segger bekommen, aber leider glaube ich, dass wegen der Feiertage noch niemand für ein paar Tage da ist.
J-Link Lites sind mit bestimmten HERSTELLERN verknüpft, nicht mit bestimmten Architekturen. Etwas, das mit Nordic funktioniert, funktioniert NICHT mit Kinetis!! Sie benötigen einen Kinetis-spezifischen Programmierer oder den vollständigen J-Link
Ich bin mir jetzt nicht ganz sicher, aber ich vermute, dass es der Fall ist.
Die OEM -Versionen von J-Link Lite scheinen diese Einschränkung zu haben, zB segger.com/jlink-oem-versions.html#freescale_jlink_lite funktioniert nur mit Freescale. Aber es gibt Nicht-OEM-Versionen von Lite, die keine derartigen Einschränkungen haben. Vergleichen Sie den vorherigen Link mit segger.com/jlink-lite-cortexm.html , der mit jedem Cortex-M0 funktionieren sollte. Es würde natürlich helfen, wenn das OP genau angeben würde, welchen J-Link Lite er verwendet ...
@RespawnedFluff Die Frage wurde aktualisiert, um die spezifische J-Link-Version aufzunehmen. Es ist kein OEM-spezifischer und besagt direkt "Jeder Cortex-M0/M0+/M1/M3/M4/M7-Kern wird unterstützt".
Hmm, ich habe mir die Kinetics-Dokumentation angesehen und kann keine logischen Fehler in dem von Ihnen befolgten Verfahren finden. Aber wie viele KEA-Chips haben Sie schon ausprobiert? Für 3,xx $ pro Stück ist es nicht unvorstellbar, dass Sie einen Penner mit schlechtem Blitz haben ...
@RespawnedFluff ja, ich habe zwei Boards aufgebaut, beide weisen das gleiche Problem auf. Ich habe jetzt einen FRDM_KL25Z als alternative Programmierschnittstelle mit dem gleichen Ergebnis eingebracht (siehe Bearbeiten)

Antworten (5)

Ich kann eigentlich keine logischen Fehler in Ihrer Vorgehensweise finden, aber hier sind einige Vorschläge:

  • es gibt auch ein FTMRH_FERSTAT-Register (bei 4002_0007h). Es soll Ihnen sagen, was schief gelaufen ist ... aber nur im Fall von Paritätsfehlern (oder doppelten Paritätsfehlern). Ich bin nicht davon überzeugt, dass dies im Falle von Fehlern etwas aufzeichnen oder löschen wird, aber es ist wahrscheinlich einen Besuch wert.

  • die KEA-Dokumentation erwähnt auch, dass ein Interrupt durch Flash-Fehler ausgelöst werden kann (Abschnitt „18.3.5 Flash- und EEPROM-Interrupts“). Ich weiß nicht, ob das passiert, wenn der SEGGER es löscht, aber es ist eine plausible Erklärung dafür, warum sich der PC auch ändert, da Sie im FSTAT-Register Fehler angezeigt haben. Leider weist der KEA-Dokumentationsabschnitt für den Interrupt-Controller ("3.3.2 Nested Vectored Interrupt Controller (NVIC) configuration") ziemlich vage in die Richtung der ARM-Website für eine vollständige Dokumentation. Ich konnte nicht herausfinden, ob ein Standard-Interrupt-Handler (beim Booten) für Flash-Fehler eingerichtet ist.

  • Sie haben Löschvorgänge nur manuell auf Sektorebene durchgeführt, versuchen Sie also, manuell (indem Sie das entsprechende Register selbst schreiben) einen vollständigen Flash-Löschbefehl auszugeben. Die einzige Möglichkeit, dies in einem einzigen Befehl zu tun, scheint der "Unsecure flash command" zu sein, der in Abschnitt 18.3.9.10 (S. 246) des Handbuchs dokumentiert ist. Dadurch wird sowohl das Gerät "ungesichert" als auch ein vollständiger Flash- und EEPROM-Löschvorgang durchgeführt. Sie können ein FSTAT-Bit (CCIF) abfragen, um zu sehen, wann es angeblich abgeschlossen ist, und die Fehlerflags danach erneut überprüfen. BEARBEITEN: Es gibt auch einen Abschnitt "18.3.9.7 Befehl "Alle Blöcke löschen"" im Handbuch, duh.

  • Versuchen Sie es mit einer niedrigeren Bustaktfrequenz. Alles über 0,8 MHz funktioniert laut Dokumentation. Ich schlage dies vor, weil es einen Thread im Freescale-Forum gab, wo ein externer Blitz gut funktionierte, aber nicht über einer bestimmten Frequenz, die immer noch im ok-dokumentierten Bereich lag. Es ist also möglich, dass der Flash-Controller im Chip fehlerhaft ist und nicht im gesamten Bereich der angegebenen Frequenzen arbeiten kann.

  • Ebenso hast du einen anderen Chip. Es ist nicht unvorstellbar, dass Sie angesichts dessen, wie viel diese kosten (ungefähr 3 US-Dollar), ein schlechtes haben. Ich erinnere mich, dass ich einen eingebetteten x86-Chip hatte, der in den meisten Fällen gut funktionierte, aber seltsame Fehler bei bestimmten Anweisungen im geschützten Modus aufwies. Mein Problem hat sich mit einem anderen Gerät des gleichen Herstellers erledigt. Es ist mir nicht klar, ob Freescale (öffentlich erklärte) Steppings und Errata für diese Geräte hat oder nicht.

Dies ist alles, was mir in Bezug auf Debugging-Vorschläge einfällt, die von anderen auf dieser Seite nicht gesagt wurden.

20150103 Bearbeitung(en):

(Material von meinen Kommentaren hierher verschoben & erweitert)

Es scheint, dass nicht alle Kinetis-Serien (zumindest offiziell) mit allen Flashern getestet wurden. Die ziemlich neue EA-Serie, die Sie tatsächlich verwenden, scheint offiziell nur von Freescales eigenem/OEM Cyclone MAX-Flasher unterstützt zu werden; Es ist das einzige, das auf der Seite von Freescale für die EA-Serien aufgeführt ist . Nun zugegeben, für ältere Kinetis wie KL0 ist die Liste viel länger, einschließlich eines SEGGER . Ich weiß nicht, ob das einfach daran liegt, dass andere Flasher für die EA-Serie nicht getestet wurden, oder ob es tatsächlich eine Programmiermasche gibt, von der derzeit nur ihr Cyclone MAX weiß. Ich hatte gehofft, dass dies vielleicht nur daran liegt, dass Freescale andere Flasher nur langsam auflistet, aber nachdem ich das J-Link-Handbuch überprüft habe(hoffentlich die richtige), dort ist auch keine Kinetis E oder EA Serie als getestet aufgeführt (S. 249), sondern nur Kinetis K10 bis K60 Geräte (und einige ältere MAC7's).

Erwähnenswert ist, dass die PExDrv-Software/Firmware für den Cyclone MAX ein Service Pack (v10.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 Kinetis, obwohl es in 12/2014 noch vor kurzem aktualisiert wurde, listet keine Geräte der E- oder EA-[Unter-]Serien als unterstützt auf. Ich denke also, dass es beim Flashen zwischen der E/EA-Serie und anderen Kinetis wie dem K10 einen ausreichenden Unterschied gibt, obwohl ich keine Ahnung habe, was genau dieser Unterschied ist. Daher denke ich, dass es zu diesem Zeitpunkt wahrscheinlich unrealistisch ist, zu erwarten, dass EA-Flashing automatisch mit irgendetwas anderem als dem Cyclone MAX funktioniert. Möglicherweise können Sie anhand der Dokumentation der EA-Serie herausfinden, wie dies auf "Bare-Metal" -Ebene (direkte Registerbefehle) geht, aber ich stimme zu, dass die Dokumentation ziemlich stumpf ist. Es fehlen sicherlich Schritt-für-Schritt-Anleitungen, da es sich nur um ein Referenzhandbuch handelt. Hätte der Open-Source-Bootloader/Flashloader von Freescale die E/EA-Serie unterstützt, hätten Sie

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

Und wenn Sie wie Keith (der Blogger) sind, der „100 Dollar für einen Programmierer für lächerlich hält“, wird Ihnen die Aussicht, mehr als 900 Dollar für diesen Cyclone zu verlieren, wahrscheinlich nicht gefallen. Ich weiß nicht, ob Freescale dies absichtlich tut, um seine Kunden aus der Automobilbranche zu trösten oder was... Es sieht sicherlich seltsam aus, dass die Werkzeuge für die meisten Kinetis-Serien nicht mit dem E/EA funktionieren.

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

Wenn Sie bereit sind, mehr Boards auszuprobieren (zu hacken), ist eines mit einem Kinetis der E-Serie möglicherweise eine bessere Idee, z. B. FRDM-KE02Z ($ 13 bei Digi-Key); verwendet auch OpenSDA, so dass es möglicherweise gehackt werden kann. 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 seiner eigenen Karte zu programmieren , selbst wenn beide Prozessoren zur gleichen (z. B. L) Serie gehören, aber unterschiedliche Nummern haben. Leider bedeutet "Offen" in OpenSDA nur, dass die SDA-Spezifikation offen ist, nicht, dass sie den Quellcode als Open Source herausgeben; Daher kann ich nicht einmal den Quellcode finden, um einen Blitz der E-Serie zu programmieren. Anscheinend liege ich damit nur halb richtig. OpenSDA v1 ist nicht Open Source, aber v2 ist .

Hier also die Fakten zu OpenSDAv2 . Es ist im Grunde nur ein CMSIS-DAP/mbed Bootloader & Flasher. Es hat also möglicherweise nicht die gleichen Funktionen oder unterstützt nicht die gleichen Chips wie v1 ... und das stellt sich tatsächlich heraus, weil flash_features.h kein MKE (Kinetis E-Serie) auflistet, geschweige denn SKE (EA-Serie) Geräte. Zusammenfassend scheint Freescales Vorschlag für die EA-Serie zu sein: Kaufen Sie unseren 900-Dollar-Cyclone-Flasher oder viel Glück beim Schreiben Ihres eigenen aus allen unvollständigen Teilen von Open Source, die wir veröffentlicht haben.

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 seinem Changelog ist:

V4.1.6.140 (April 2014)

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

  • Fehlerbehebungen für MKE-Geräte (Programmierung fehlgeschlagen, außer nach Mass Erase)

Und basierend auf diesem Protokolleintrag scheint es sicherlich, dass die E-Serie schrullig 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 vielleicht können Sie den Autor von USBDM davon überzeugen, Unterstützung für die EA-Serie (SKE) hinzuzufügen. Als Hardware für USBDM stellt sich heraus , dass Sie das bereits erworbene FRDM-KL25Z verwenden können; aber Sie müssen immer noch die USBDM-Software hacken, um die SKE-Chips zu unterstützen.

Die Master-Konfigurationsdatei für USBDM sieht ziemlich abschreckend aus. In USDBM werden verschiedene Flasher (Codebasen) für verschiedene Geräte der MKE-Serie verwendet: etwas namens "FTMRE" wird für MKE04 und MKE06 verwendet, aber "FTMRH" wird für MKE02 verwendet. Nachdem ich mir kurz die beiden Codebasen angesehen habe, 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, zum Beispiel ist der Taktteiler nicht das erste, sondern das 4. Feld. FTRME setzt auch den Bus-FIDV auf 0x17 = 24 MHz, was für Ihren Chip außerhalb des Bereichs zu liegen scheint (S. 224 im KEA64-Handbuch schlägt maximal 20 MHz vor). FTMRH setzt es auf 0x0F = 16 MHz (wie Sie es tun), 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 bereit zu sein, bei neuen Geräten zu helfen (im Freescale-Forum) .

Auch aus diesem USDBM-Quellcode kann ich prophezeien, dass Ihr SEGGER Ihren SKEA auf keinen Fall selbst korrekt flashen kann, es sei denn, es 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 anscheinend auch nichts weiß (basierend auf seinem Handbuch). Andere, gängigere Geräte wie die Kinetis L- und K-Serie verwenden einen anderen USDBM-Flasher, der auf einer „FTFA“-Codebasis basiert. Wenn Sie sich den Code von FTFA ansehen , ist die Registerstruktur des Flash-Controllers (ebenfalls beginnend bei 0x40020000) für diese unterschiedlich; Das erste Feld ist nicht einmal ein Taktteiler, sondern das Statistikregister usw. Eine "großartige" Möglichkeit für Freescale, inkompatible Geräte herzustellen ... aber ohne Zweifel ein Segen für Flasher-Hersteller.

FERSTAT zeigt nichts Nützliches an, wie Sie vermutet haben; Ich hatte es früh in diesem ganzen Debakel versucht. Alle Flash-Interrupts sind standardmäßig deaktiviert, aber ich habe überprüft, ob dies möglicherweise Teil des Problems ist. Da gibt es auch keine Würfel. Ich habe zwar zwei Boards und beide verhalten sich gleich, aber ich habe im Laufe der Jahre gelernt, dass es eine verschwindend kurze Zeit ist, dass Silizium tatsächlich schuld ist, weshalb ich mir hier die Haare ausreiße. :-)
Ich werde versuchen, die Frequenz zu senken; Die Standardwerte außerhalb des Resets scheinen für einen 16,78-MHz-Bustakt (32 kHz * 1024 / 2) zu gelten, weshalb ich einen Flash-Taktteiler von 0x10 ausgewählt habe (32 kHz * 1024 / 2 / 16 ist 1,048 MHz, was innerhalb der Spezifikation liegt, aber vielleicht etwas nah am Rand)
Ihr anderer Vorschlag, über den Befehl zum Aufheben des Schutzes (0xb) anstatt alles zu löschen (0x8) ... es ist erfolgreich, aber ich kann die CPU danach nicht stoppen und ich kann anscheinend auch danach nichts in Flash programmieren.
Ich danke Ihnen vielmals für all Ihre Bemühungen, diesem Internet-Fremden zu helfen. Ich habe Schwierigkeiten zu verstehen, warum dieser Chip so schwer zu verwenden ist, selbst wenn unterstützte Programmierer (J-Link und CMSIS-DAP) und Freescales eigene Entwicklungsumgebung und -tools verwendet werden. Es haut mich um.
Vielen Dank für Ihre ausführliche Recherche und fortwährende Hilfe. Tatsächlich habe ich genau das getan: den FRDM-KL25Z mit der USBDM-Firmware und dem eigenständigen ARM-Flasher zu verwenden. Das hat meinen blinkenden LED-Test in das Gerät gebracht. Merkwürdig ist, dass die von Segger unterstützte CPU-Liste explizit den SKEAZN64xxx2 erwähnt, aber es funktioniert nicht.

Haben Sie dies versucht: Entsperren und Löschen von FLASH mit Segger J-Link

Angeblich muss man:

Um die geschützten FLASH-Sektoren mit Segger J-Link neu zu programmieren, muss ich das Gerät zuerst entsperren und massenweise löschen. Dafür gibt es das Dienstprogramm J-Link Commander, das über eine Befehlszeilenschnittstelle verfügt, um den Schutz aufzuheben und das Gerät zu löschen. Nur zum Löschen ist 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 Sie möchten, dass die Entsperrung dauerhaft ist:

Aber es scheint, dass ich ein Unlock machen muss, gefolgt von einem Löschen, um es dauerhaft zu machen. Um das Gerät zu löschen, kann ich dasselbe Befehlszeilenprogramm verwenden. Aber ich muss zuerst den Gerätenamen angeben, und dann kann ich ihn 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 Using the Kinetis Security and Flash Protection Features, 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 unsicher machen können, kann Bit 0 des MDM-AP-Steuerregisters gesetzt werden, um eine Massenlöschung des Prozessors anzufordern. Um diese Methode zum Deaktivieren der Sicherheit zu verwenden, muss FSEC[MEEN] auf einen anderen Wert als 10 gesetzt werden, um die Fähigkeit 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 entsichert werden. Viele Debugger verwenden automatisch Bit 2 des MDM-AP-Statusregisters, um festzustellen, ob ein Gerät gesichert ist, wenn sie versuchen, eine Verbindung herzustellen. Ein Debugger-Popup-Fenster kann verwendet werden, um darauf hinzuweisen, dass das Gerät gesichert ist, und zu fragen, ob eine Massenlöschung erwünscht ist, um das Gerät zu entsichern. Sobald die Massenlöschung abgeschlossen und verifiziert ist, wird die Sicherheit deaktiviert. Einige Debugger programmieren möglicherweise automatisch das Flash-Konfigurationsfeld, um den Flash nach Abschluss der Massenlöschung in einen ungesicherten Zustand zu versetzen, FSEC = 0xFE.

Außerdem bin ich über einen Beitrag gestolpert, in dem erwähnt wird, dass verschiedene Kinetis-Familien unterschiedliche RESET-Signalmanipulationen erfordern, wenn versucht wird, das MDM-AP-Register zu lesen/schreiben.

EDIT4: Haben Sie versucht, SWD_DIO einen starken Pull-up hinzuzufügen? Es ist ein Schuss ins Blaue, aber Freescale empfiehlt es.

Vielen Dank, dass Sie sich die Zeit genommen haben, bei der Überprüfung zu helfen und Vorschläge zu machen. FTMRH_FSEC (0x40020001) gibt einen Wert von 0xfe zurück, was so freigeschaltet/unsicher wie möglich ist. Wenn ich Flash bei 0x0000400c lese, kann ich auch sehen, dass die Sicherheitsbits denselben Wert zeigen (wo 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
J-Link hat einen „rsettype“-Befehl 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 Befehl "h" 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.
Ich würde den Pull-up versuchen, beide Boards, die Sie ausprobiert haben, haben es nicht und wenn dies nicht funktioniert, ist der Jlink NOK.
Ich habe den Klimmzug ausprobiert (4,7k, nicht sicher, wie "stark" stark sein sollte), aber es hat keinen Unterschied gemacht.
4k7 ist in Ordnung. Du hast alles getan, was du konntest. Ab diesem Zeitpunkt verifizieren Sie das Verhalten mit FRDM-KL25Z und senden Sie dann 1 Million Tickets an die Jlink-Jungs.

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

Suchen Sie also nach einem Befehl zum Zurücksetzen des Halts. Nur ein Halt reicht nicht aus, da Sie den Zustand der Vorinitialisierung von Vektoren erreichen müssen, denke ich.

Vielen Dank für Ihren Kommentar, aber der Segger hält zuerst die CPU an. Ich habe auch versucht, die CPU manuell anzuhalten, bevor ich diese Befehle ohne Änderung ausgebe. Das hätte ich in meiner Frage deutlich machen sollen.
Ich habe nicht bemerkt, dass Sie sagten, dass ein Stopp vor der Initialisierung der Vektoren erforderlich sein könnte. Ich schaue es mir an, aber ich habe Probleme zu verstehen, warum das notwendig wäre. Danke für den Hinweis, jedes bisschen hilft

Ich habe es noch nicht erwähnt gesehen, also gehe ich weiter und spekuliere, dass das Problem darin besteht, dass dieser Teil einen Cache hat, der beim Zurücksetzen aktiviert ist. Dies stimmt mit dem "seltsamen" Verhalten überein, das Sie beim Blankoscheck beobachtet haben. Der zugrunde liegende Flash wurde aktualisiert, der Cache jedoch nicht. Um dies zu beheben, schalten Sie sowohl den Daten- als auch den Anweisungscache aus, indem Sie in MCM_PLACRat schreiben, F000_300Chund leeren Sie dabei auch den Cache. Dieses seltsame Verhalten dürfte auch den Segger verwirrt haben.

Das war ein sehr guter Vorschlag. Beim Zurücksetzen wird MCM_PLACR als 0x00000850 gelesen, was etwas seltsam ist (Datencache deaktiviert, aber Bits 6 und 4 sind in der Dokumentation reserviert). Ich habe versucht, alles zu deaktivieren (Spekulation, Controller-Cache, Anweisungs-Caching) und dann den Cache zu löschen, indem ich 0x0000bc00 geschrieben habe; es las 0x0000b850 zurück, aber keine Verhaltensänderung.
Ich bin sehr gespannt, wann Sie dieses Problem endlich lösen. In der Zwischenzeit wird dieser Chip sicherlich in absehbarer Zeit in keinem meiner Designs zu finden sein. Entschuldigen Sie Ihren Schmerz, aber danke, dass Sie die interessante Frage geteilt haben.

Da es in der Fehlermeldung um den PC-Wert geht, hört es sich so an, als würde die CPU irgendwo aus den Fugen geraten. Das ist ein langer Schuss, 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 beim Ausführen von "device skeazn64xxx2" der J-Link dies bereits berücksichtigt und den Watchdog nach dem Zurücksetzen deaktiviert. Ich habe dies überprüft, indem ich das WDOG_CS1-Register sowohl mit als auch ohne Angabe des Geräts zwischen Einschaltzyklen überprüft habe. :-(
Hmm … okay, das andere, was mir aufgefallen ist, ist, dass Sie während des Blankoschecks korrigierbare Fehler machen. Deaktiviert Ihr J-Link Flash ECC? Wenn nicht, könnte dies zu Problemen bei der Rückleseverifizierung führen und möglicherweise sogar unerwartete Interrupts auslösen. (Ich bin nicht speziell mit Freescale-MCUs vertraut, aber ich denke, dass diese Art von Verhalten ziemlich häufig ist.)