Freescale Kinetis KE - フラッシュへの書き込み

私はこれまで何年もの間さまざまなマイクロコントローラやマイクロプロセッサを使用してきましたが、私はKinetis KEシリーズ(特にS9KEAZN64AMLC)にこだわっているようです。

2015年1月17日TL; DR:

Freescale v2.0.0のKinetis Design Studioソフトウェアがこのデバイスでは動作しないことを確認します(独自のTRK-KEA64評価ボードを含む)。当分の間はCodeWarrior MCU V10.6を使用することを推奨します。

Seggerはv4.96aをリリースしました( "a"は重要です。私はv4.96を使用していました)。これにより問題が修正され、Segger J-Link Lite CortexMデバッガボードをKDSと共に使用し、完全なプログラム/デバッグ機能を持つことができます。

Seggerがv4.96aをリリースする前は、フリースケールの安価な(15ドル)FRDM-KL25Z評価ボード上でOpenSDAデバッガを再プログラミングすることでチップをフラッシュすることができました。 .sourceforge.net/"rel =" nofollow "> USBDM (v4.10.6.240を使用)。それから私はUSBDMのスタンドアロンの「ARM Programmer」ソフトウェアを使いました。私は「オールドスクール」デバッグに不慣れなので十分に熟練しているので、デバッグを機能させるのにそれほど時間をかけませんでした。 J11カットでもオンボードターゲットKL25のリセットラインがまだOpenSDAデバッガに接続されているため、オンボードターゲットKL25に「良性」プログラムをフラッシュするか、プログラミングを妨げる可能性があります(Keith Wakehamのブログ投稿を参照)。 、下にリンクされています。

非常に丁寧に問題の特定と電子メールでの発見の確認にご協力いただきありがとうございました。 。

さて、定期的に予定されている質問に戻ります。

私は愚かで単純な3.3Vブレイクアウトボードを作りました。 PTA上にいくつかのLEDがあり、PTC上にUART接続があり、SWDラインは専用ラインにあります。このボードについて文字通り空想や面白いことは何もありません。

私はCortex-M用のJ-Link Lite(J-Link LITE CortexM-9、 https://www.segger.com/jlink-lite-cortexm.html )そしてOSXとWindowsの両方で同じ結果が得られます。J-Link Commanderユーティリティでチップを識別できます。そしてSRAMに書き込み、正しいメモリマップされたI/Oアドレスに手動で読み書きすることで周辺機器と遊んでください。私はデバイスをフラッシュしようとすると、しかし、それは失敗します。

$ 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.

J-Link Liteは完全に問題なく(他のCortex-M0プロセッサのnRF58122 SoCとの読み書きができます)、それ以外のデバイスは動作するようです。 KinetisはDigiKeyからの工場出荷時の在庫であるためロック解除されていますが、それでもJLinkExeの "kinetis unlock"コマンドはエラーや有用な情報なしでタイムアウトします。

現時点で私は愚かなことをしていると確信していますが、私はそれが何であり得るのか迷っています。

誰かがこれらの機器を使ったことがありますか?あなたはそれらをどのようにプログラミングしていますか?

チュートリアルを追加するための編集:

もう少し情報:

NMI#ピンがリセットされて有効になっていること(およびSIM_SOPTを読み取ってこれを確認していること)を確認しましたが、有効にすると内部プルアップがあることも確認しました。この特定の部分でPTB4はピン10にあります。これは私のデザインでは接続されていません。 NMIピンを無効にしても違いはありません。 RST#は似ています。ピンを接地してJ-Link Liteにも接続する押しボタンに接続されていますが、外部プルアップはありません。 NMI#と同様に、RST#ピンには内部プルアップがあり、PTA5がリセットに設定されているときに有効になるので、これは問題になりません。

クロックを今見ています...リセットから、ICSはFLLへのクロックソースであり、ICS_C2のBDIVは001(リセットデフォルト)に設定されています。私が正しく理解しているならば、これは32kHzの内部発振器がFLLによって1024倍され、そして次に2で割られて、ICSOUTCLKを32kHz * 1024/2すなわち16.8MHzにすることを意味します。 ICS_Sを読み取ることで、J-Link CLIを介してFLLがロックされていることを確認できます。

J-Link>mem8 40064004 1
40064004 = 50

(LOCKとIREFSTが設定されています。これは正しいです。)

次に、SIM_SCGCを読み取って、SIMでフラッシュコントローラのクロックが有効になっていることを確認します。 SIM_BUSDIVのBUSDIVがゼロに設定されていることを確認することもできます。これは、BUSCLKがICSOUTCLKと同じ周波数であることを意味します(つまり、分割されていません)。

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

これまでのところ、すべてうまくいっています。 BUSCLKは16.8MHzで、フラッシュコントローラのクロックはゲートされていません。

それではフラッシュコントローラに移りましょう。リセットからのFCLKDIVはゼロであり、1MHzのクロックが必要です。 KEA64RMの表18-2は、FDIVを0x10に設定する必要があることを示しています。

リセット解除:

J-Link>mem8 40020000 1
40020000 = 00

デバイダを設定して物事を検証するのは良いことです。

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

FDIVLDが設定され、FDIVの正しい値が表示されます。

行き過ぎる前に、フラッシュが保護されていないことを確認しましょう。

J-Link>mem8 40020001 1
40020001 = FE

KEYEN = 11(無効)およびSEC = 10(保護されていない) OK。デバイスが空白であることを確認してみましょう。

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

ここでは、FSTATのMGSTATビットが、空白チェックが失敗したこと、および訂正不可能なエラーが見つかったことを示しています。奇数自分でそれを消してみましょう。

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

全消去コマンドが成功しました。それでは、空のチェックを試してみましょう。

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

今度は空白のチェックは大丈夫ですか?

この時点で私はあきらめて、これらのプロトタイプの損失を食べて、私が前にこれらの種類の問題を抱えたことがなかったSTのプロセッサと一緒に行く準備ができています。 Kinetisのドキュメンテーションは十分に徹底的ですが、非常に緻密であり、私は始めるのが非常に難しいと思っています。メモリの読み取りや他の周辺機器へのアクセスを介してI/Oを細かくすることはできますが、フラッシュコントローラの何が問題になっているのかを知ることはできません。私は20年以上にわたりマイクロの仕事をしてきましたが、このような困難は私が今まで経験したことのないものです。

20150102編集:

だからまだここに行きません。私は実際にFRDM-KL25Z評価ボード(DigiKeyから15ドル)を買って、そして一般的なCMSIS-DAPソフトウェアをOpenSDAデバッガに置いて、キースウェイクハムのブログ。私は、オンボードターゲット(KL25Z)がリセットラインを妨害しないように簡単なプログラムを実行しています、そして、私は私のSKEAZN64をOpenOCDで見てそれで遊ぶことができます、しかし残念ながらそれもプログラムできません。 Kinetis Design Studio(KDS)ソフトウェアは私のKinetisをフラッシュしません。なぜならそれは保護されていて大量の消去をする必要があるからです。しかしOpenOCD(KDSの一部として)はこれを行う方法を知らないようです。私が私のMac上に構築したOpenOCDのgitマスターバージョンはKinetisを理解しますが、特定のKEAシリーズではないので、私は正直なところに戻ります。

J-Linkに戻る

@AdamHaunは本当に良い手がかりを持っていました、そして私がJ-Linkリセットタイプ(rsettypeコマンド)をタイプ '6'(Kinetis)に設定した場合、J-Linkはコアをリセットした後にウォッチドッグを無効にすることになっています。 WDOG_CS1レジスタ(0x40052000)を見ると、そうであるように見えますが、それでもダイスはありません。消去操作は0xfffffffeとエラーコード-5でPCとの関係から外れているようで、SIM_SOPTを使用してリセットピンを無効にした場合(32ビット値0x00000008から0x40048004を書き込むことによって)、 "unlock kinetis"コマンドは有効です。残念ながら、CPUを二度と停止させることはできません。SWDインターフェイスでリセットラインを使用してSWD DAPを既知の状態にすることはできないためです。

20150103編集:

点滅LEDがあります

繰り返す

点滅LEDがあります

TL; DRバージョン:FRDM-KL25ZボードにUSBDMイメージを置き(ストーリーはすべて独自に)、テスト用.elfをボードに送信するにはARM Programmerスタンドアロンアプリケーションを使用します。パワーサイクルと出来上がり

長いバージョンは後で来るでしょう。私はこのKEAZN64ボード用のソフトウェアを書いてデバッグするのに48時間もかからず、それに付随する他のソフトウェアの修正/テストを終え、そして他のクライアントのためにいくつかのドキュメンテーションを処理します。この質問を詳細な回答で更新 することを約束します。私はちょうど私の成功を共有したいと思いました。ご協力ありがとうございました。私は本当にあなたのカップルに恩恵を与えたいと思うので私は改造者と話さなければならないかもしれません。

11
@RespawnedFluff yep 2枚のボードを作りましたが、どちらも同じ問題を抱えています。私はFRDM_KL25Zを代わりのプログラミングインタフェースとして持ってきましたが、同じ結果になりました(編集を参照)。
追加された 著者 akohlsmith,
@RespawnedFluff特定のJ-Linkバージョンを含むように質問を更新しました。 OEM固有のものではなく、「Any Cortex-M0/M0 +/M1/M3/M4/M7コアがサポートされている」と直接述べています。
追加された 著者 akohlsmith,
@RespawnedFluff Seggerに電子メールを受信しましたが、残念なことに休日のため数日中にだれも周りにいないと思います。
追加された 著者 akohlsmith,
@RespawnedFluff私は実際にはKinetisフォーラムでほぼ同一の質問をしています。 e.seははるかにリーチがあり、私はこのコミュニティ/サイトを好むので、ここでも質問しても問題ないと考えました。
追加された 著者 akohlsmith,
@ScottSeidmanはい。 Cortex-M0シリーズ専用のJ-Link Lite。この特定のプロセッサも同様にサポートされています
追加された 著者 akohlsmith,
今見て、これについてはよくわからないが、私はそれが事実であると思われる。
追加された 著者 wannabecapablanca,
J-linkライトは、特定のアーキテクチャではなく、特定の製造元にリンクされています。 Nordicで動作するものはKinetisでは動作しません。 Kinetisに特化したプログラマー、または完全なJ-Linkが必要です
追加された 著者 wannabecapablanca,
愚かな質問ですが、あなたは正しいj-link liteを使っていますか?それらは1つのプラットフォームに限定されています。自分で間違ったものを使ったことはありませんが、これが失敗すると私は思っています。
追加された 著者 wannabecapablanca,
ここのj-linkタグとkinetisタグには実質的に内容がない(もう1つ質問がある)ことを考えると、おそらくいくつかの製造元のサポートフォーラムまたはEメール、電話サポートなどを見つけるべきです。 segger.com/ "rel =" nofollow noreferrer "> forum.segger.com かもしれません。
追加された 著者 Fizz,
うーん、私はKineticsのドキュメントを見ましたが、あなたが従った手順で論理的なエラーを見つけることができません。しかし、いくつのKEAチップを試したことがありますか?それぞれ$ 3.xxで、それはあなたが悪いフラッシュでお尻のものを手に入れたことを考えられないことではありません...
追加された 著者 Fizz,
J-link liteの OEM バージョンにはそのような制限があるようです。 segger.com/jlink-oem-versions.html#freescale_jlink_lite のみFreescaleで動作します。しかし、そのような記載されている制限がないLiteのOEM以外のバージョンがあります。前のリンクと segger.com/jlink-lite-cortexm.html を比較してください。どのCortex-M0でも動作するはずです。もちろん、OPが彼が使用しているJ-link Liteを正確に 指定しているなら、それは助けになるでしょう...
追加された 著者 Fizz,
また、他のフォーラムによると、SEGGERはすべてではないが一部のKinetisハードウェアに問題があるようだ。 noreferrer "> forum.segger.com/index.php?page=Thread&threadID=1986
追加された 著者 Fizz,
確かに、あなたはたった100 kHzで問題を抱えているので、誰が知っているか、それは他の何かかもしれません。
追加された 著者 Fizz,
community.freescale.com/community/kinetis は、これについて知識があると思われる場所です。 。 community.freescale.com/thread/337779 は、あなたの質問とまったく同じではないにしても非常によく似ています。 ...
追加された 著者 Fizz,

5 答え

手順の中で実際に論理的なエラーを見つけることはできませんが、いくつかの提案があります。

  • FTMRH_FERSTATレジスタもあります(4002_0007h)。何が間違っていたのかをあなたに言うことになっています...しかし、パリティ(または二重パリティエラー)の場​​合だけです。万が一これが万が一に備えて何かを記録したりエラーを消したりするとは確信していませんが、おそらくチェックする価値があります。

  • KEAのドキュメントには、フラッシュエラーによって割り込みが引き起こされる可能性があることも記載されています(「18.3.5フラッシュとEEPROMの割り込み」を参照)。それがSEGGERによって消去されたときどうなるかはわかりませんが、FSTATレジスタにエラーが表示されたためにPCが変更された理由についてのもっともらしい説明です。残念ながら、割り込みコントローラに関するKEAのドキュメントセクション(「3.3.2ネスト型ベクトル割り込みコントローラ(NVIC)の設定」)では、ARMのWebサイトで完全なドキュメントを読むことがかなり漠然としています。フラッシュエラー用に(起動時に)デフォルトの割り込みハンドラが設定されているかどうかを判断できませんでした。

  • 消去は手動でセクタレベルでしか行われていないので、手動で(適切なレジスタを自分で書いて)、フルフラッシュの消去コマンドを発行します。 1つのコマンドでこれを実行する唯一の方法は、マニュアルのセクション18.3.9.10(p。246)に記載されている「安全でないフラッシュコマンド」のようです。これはデバイスの "保護を解除する"と同時にフラッシュ メモリとEEPROMの全消去を行います。 FSTATビット(CCIF)をポーリングして、それがいつ完了したのかを確認し、その後でエラーフラグをもう一度確認することができます。編集:このマニュアルの「18.3.9.7全ブロック消去コマンド」の章もあります。

  • もっと低いバスクロック周波数を試してください。 0.8 Mhzを超えるものはすべてドキュメントに従って動作します。 Freescaleフォーラムには、外部フラッシュが問題なく動作するスレッドが1つあったが、それでもまだドキュメントに記載されている範囲内であった特定の頻度を超えていなかったので、これを提案します。そのため、チップ内のフラッシュコントローラが不安定で、指定された周波数の全範囲で動作できない可能性があります。

  • 同様に、あなたの別のチップ。これらのコスト(約3ドル)がどれだけ悪いものになったかを考えると、考えられないことではありません。私は、ほとんどの方法でうまく動作したが、特定のプロテクトモードの命令で奇妙なエラーがあった組み込みx86チップを持っていたのを覚えています。私の問題は同じ製造元の別のデバイスで解決しました。 Freescaleがこれらのデバイスのステッピングとエラッタを(公に述べた)持っているかどうかは私には明らかではありません。

このページで他の人からは言われていなかったデバッグ提案に関して私が考えることができるのはこれだけです。

20150103編集:

(Moved material here from my comments & expanded)

It seems that not all Kinetis Series are (officially, at least) tested with all flashers. The fairly new EA series that you're actually using appears to be officially supported only by Freescale's own/OEM Cyclone MAX flasher; it's the only one listed on Freescale's page for the EA serires. Now granted, for older Kinetis like KL0 the list is much longer, including a SEGGER. I don't know if that's simply because of a lack of testing of other flashers for the EA series or if there's actually some programming quirk involved that only their Cyclone MAX currently knows about. I was hoping that maybe this is just Freescale being slow on listing other flashers, but upon checking the J-link manual (hopefully the right one), there's no Kinetis E or EA series listed there (p. 249) as tested either, but only Kinetis K10 to K60 devices (and some older MAC7's).

注目に値するのは、Cyclone MAX用のPExDrvソフトウェア/ファームウェアに2014年3月20日付けのサービスパック(v10.3)があることです。これは、「MKE04Z64、MKE04Z128、MKE06Z64、MKE06Z128、 SKEAZ64 のサポートを追加します。とSKEAZ 128誘導体。」もう1つの手がかりは、Freescaleのブートローダ/フラッシュローダソフトウェアKinetis は、2014年12月12日に更新されたにもかかわらず、サポートされているEまたはEA [sub]シリーズのデバイスを一覧にしていません。だから私はE/EAシリーズとK10のような他のKinetisの間で点滅に関して十分に異なる何かがあると思うが、私はまさにその違いが何かわからない。そのため、Cyclone MAX以外のものでEAフラッシュが自動的に機能することを期待するのは、現時点ではおそらく非現実的です。 EAシリーズのドキュメントから「ベアメタル」レベル(ダイレクトレジスタコマンド)でそれを行う方法を最終的に理解できるかもしれませんが、ドキュメントはかなり曖昧であることに同意します。それは確かに参照マニュアルにすぎないステップバイステップの説明を欠いています。 Freescaleのオープンソースのブートローダー/フラッシュローダーがE/EAシリーズをサポートしていれば、あなたはそのソースコードを覗いてそのステップを再現することができたでしょう…しかし残念ながらオプションではありません。

FRDM-KL25Z(Kinetis Lシリーズに付属)を使った実験は同じ方向を向いています。つまり、LシリーズをEAシリーズと交換して同じフラッシャー(この場合はOpenSDA)を使うことはできません。

そしてもしあなたがKeith(ブロガー)のように "プログラマーに100ドルを払うのはばかげていると思う"のであれば、おそらくそのCycloneに$ 900を落とすという見方には満足できないでしょう。 Freescaleが自動車の顧客から逃れるためにこれを意図的に行っているのかどうかはわかりません…ほとんどのKinetisシリーズのツールがE/EAで機能しないのは確かに奇妙に思えます。

OpenSDAの点滅機能はMS Windowsでのみ機能することにも注意してください/ a>、どうやら。

もっとボードを試してみる(ハッキングする)なら、EシリーズのKinetisを使っているほうが良いでしょう。 FRDM-KE02Z(Digi-Keyでは$ 13); OpenSDAも使っているので、ハッキングされる可能性があります。私が言うことができる限り、彼らはEA-シリーズでボードを作ったり/売りません。ただし、 1つのOpenSDAプロセッサを使用することはできません。両方のプロセッサが同じシリーズ(Lシリーズなど)で、番号が異なる場合でも、/ boardを使用して、独自のボードとは異なるKinetisタイプをプログラムする残念ながらOpenSDAの "Open"はSDAの仕様が公開されていることを意味するだけで、オープンソースとしてソースコードを公開するものではありません。だから私はEシリーズフラッシュをプログラムするためのソースコードさえ見つけることができません。どうやら、私はそれについてちょうど半分正しいです。 OpenSDA v1はオープンソースではありませんが、v2はです。

So here's the lowdown on OpenSDAv2. It's basically just a CMSIS-DAP/mbed bootloader & flasher. So it may not have the same features or support the same chips as v1... and that actually turns out to be the case because flash_features.h does not list any MKE (Kinetis E-series) let alone SKE (EA-series) devices. In summary, Freescale's proposition for the EA series seem to be: buy our $900 Cyclone flasher or good luck writing your own from whatever incomplete bits of open source we have released.

しかし、少なくともEシリーズのKinetis、つまり USBDM をプログラムできるオープンソースプロジェクトがあることがわかりました。 変更履歴からの関連性の高い部分は次のとおりです。

V4.1.6.140(2014年4月)

     

追加のKinetisデバイス(MKE04、MKE06、MK64F)

     
      
  • MKEデバイスの修正(一括消去後を除いてプログラムに失敗した場合)
  •   

そしてそのログエントリに基づいて、それは確かにEシリーズが風変わりであるように見えます。 EAシリーズ(SKE)は直接サポートされていませんが、あなた自身のフラッシャーをハックしたいのであれば、おそらくそのコードベースがあなたの最善の策です。 USBDMの作者にEAシリーズ(SKE)のサポートを追加するよう説得することもできます。 USBDM用のハードウェアとしては、あなたはFRDMを使うことができます。 KL25Zはすでに習得しています。しかし、SKEチップをサポートするためには、まだUSBDMソフトウェアをハックする必要があります。

The master config file for USBDM looks rather daunting. In USDBM different flashers (code bases) are used for different MKE series devices: something called "FTMRE" is used for MKE04 & MKE06, but "FTMRH" is used for MKE02. After looking myself briefly at the two code bases, you almost surely want the FTRMH code base not the FTRME one. The latter has a different FTMRH structure than your SKEA64 device, for example, the clock divider is not the first but the 4th field. FTRME also sets the bus FIDV to 0x17 = 24Mhz, which seems out of range for your chip (p. 224 in the KEA64 manual suggests max 20Mhz). FTMRH sets it to 0x0F = 16Mhz (like you do), which seems okay.

この時点で、(あなたがCyclone MAXを買いたくないのであれば)あなたの最善の策はあなたのチップが彼のコードベースで動くようにするためにPodonoghueに連絡することです。彼は積極的で新しいデバイスのサポートを喜んで(フリースケールフォーラムで)しています。

また、そのUSDBMソースコードから、SEGGERが自分のファームウェアアップデートを最初に取得しない限り、SEGGERが自分で自分のSKEAを正しくフラッシュすることはできないと予言することができます。なぜ私はそれを言うのですか? USDBMのFTMRHコードベースは、そこにある1つのデバイスMEG02で使用されているため、SEGGERはどちらも(マニュアルに基づいて)何も知らないようです。 Kinetis LおよびKシリーズのような他の、より一般的な装置は「FTFA」コードベースに基づく異なるUSDBMフラッシャーを使用します。 FTFAのコードでは、フラッシュコントローラのレジスタ構造(これも0x40020000から始まります)が異なります。最初のフィールドはクロック分周器でもスタットレジスタなどでもありません。Freescaleが互換性のないデバイスを作成するための「素晴らしい」方法...しかしフラッシャーメーカーにとっては朗報です。

3
追加された
あなたの他の提案、すべてを消去(0x8)する代わりにunprotectコマンド(0xb)について...それは成功します、しかし私はその後CPUを止めることはできず、その後フラッシュに何かをプログラムすることもできません。
追加された 著者 akohlsmith,
周波数を落としてみます。リセットされたデフォルトは16.78MHzのバスクロック(32kHz * 1024/2)用であるように思われるので、私は0x10(32kHz * 1024/2/16)のフラッシュクロック分周器を選択した端に少し近い)
追加された 著者 akohlsmith,
FERSTATはあなたが疑ったような有用なものは何も表示しません。私はこの全体の大失敗の中で早いうちにそれを試してみました。すべてのフラッシュ割り込みはデフォルトで無効になっていますが、これがおそらく問題の一部であるかどうかを確認しました。サイコロもありません。私は2枚のボードを持っています、そしてそれらは両方とも同じように振る舞いますが、長年の間にシリコンが実際に責任を負うのはごくわずかな時間であることを学びました。 :-)
追加された 著者 akohlsmith,
私はこのインターネットの見知らぬ人を助けようとするあなたの努力の全てに深く感謝しています。サポートされているプログラマ(J-LinkとCMSIS-DAP)やFreescale自身の開発環境とツールを使っても、なぜこのチップが非常に使いにくいのか理解するのに苦労します。それは私の心を吹いています。
追加された 著者 akohlsmith,
詳細な調査と継続的な支援に感謝します。実際にこれは私がやってしまったまさにそのとおりです:USBDMファームウェアとスタンドアロンのARMフラッシャーとFRDM - KL25Zを使用する。これが私の点滅しているLEDテストがデバイスに入ったことです。興味深いのは、SeggerがサポートしているCPUのリストが明示的にSKEAZN64xxx2に言及していることですが、うまくいきません。
追加された 著者 akohlsmith,

あなたは最初にプロセッサを停止する必要があります。実行中のプロセッサの症状が出るのは明らかです。私はopenocdを使います。デバイスをフラッシュする前に、私は "reset halt"コマンドを使います。その "halt"は "reset"のサブコマンドで、リセット直後に停止しますが、スタンドアロンのhaltコマンドもあります。

それでは、 "reset halt"コマンドを探してください。停止するだけでは十分ではありません。ベクトルの事前初期化の状態にたどり着く必要があるからです。

1
追加された
私はあなたがベクトルの初期化の前に停止が必要であるかもしれないと言っていたのに気づきませんでした。それを調べてみると、なぜそれが必要になるのか理解できないのです。ヒントをありがとう、すべてのビットが役立ちます
追加された 著者 akohlsmith,
ご意見ありがとうございますが、Seggerは最初にCPUを停止します。これらのコマンドを変更することなく発行する前に、CPUを手動で停止することも試みました。私は私の質問でそれを明白にすべきでした。
追加された 著者 akohlsmith,

まだ言及していないので、この部分にはリセット時に有効になるキャッシュがあることが問題であると推測します。これは、空白のチェックで観察した「奇妙な」動作と一致しています。基礎となるFlashは更新されましたが、キャッシュは更新されませんでした。これを修正するには、 F000_300Ch MCM_PLACR に書き込んでデータと命令の両方のキャッシュをオフにし、キャッシュをクリアします。これと同じ奇妙な振る舞いはSeggerも混乱させたようです。

1
追加された
これはとても良い提案でした。リセット時には、MCM_PLACRは0x00000850と読み取られますが、これは少し変わっています(データキャッシュは無効ですが、ビット6と4は資料で予約されています)。私はすべて(投機、コントローラキャッシュ、命令キャッシュ)を無効にしてから、0x0000bc00を書き込んでキャッシュをクリアしようとしました。 0x0000b850を読み戻しますが、動作に変化はありません。
追加された 著者 akohlsmith,
あなたがようやくこの問題を解決したとき、私は公聴会に非常に興味があるでしょう。その一方で、このチップは近いうちに私のデザインに組み込まれることはないでしょう。あなたの痛みですみませんが、興味深い質問を共有してくれてありがとう。
追加された 著者 BjarkeCK,

Did you try this: Unlocking and Erasing FLASH with Segger J-Link

伝えられるところでは、あなたはしなければならない:

保護されたFLASHセクタをSegger J-Linkで再プログラムするには、まずデバイスのロックを解除して一括消去する必要があります。このために、デバイスの保護を解除して消去するためのコマンドラインインターフェースを持つJ-Link Commanderユーティリティがあります。消去のみを目的として、J-Flash(およびLite)は、特に「クリーンな」デバイスメモリを取得するのに非常に便利なツールです。

私がおもしろいと思ったのは、ロック解除を恒久的にしたい場合は、次のステップでロック解除して消去する必要があることです。

しかし、ロックを解除してから消去する必要があるようです。デバイスを消去するには、同じコマンドラインユーティリティを使用できます。しかし、最初にデバイス名を指定する必要があり、それからそれを消去することができます(KL25Zの例)。

EDIT1:間違ったデータを追加しました。

EDIT2:あなたはおそらくフラッシュセキュリティ(FSEC)レジスタを読むことができますか?試しましたか?

EDIT3: from Using the Kinetis Security and Flash Protection Features, Rev. 1, 6/2012

デバッガ/ JTAGによる一括消去   デバッガとJTAGツールは、プロセッサが保護されているとデバイスへのアクセスが非常に制限されます。できる唯一のレジスタ   JTAGを通じてアクセスされるのは、MDM-APステータスおよび制御レジスタです。デバッグツールに安全でない部分を許可するために、   MDM-AP制御レジスタの0を設定して、プロセッサの一括消去を要求できます。無効にするにはこの方法を使用するために   セキュリティ、FSEC [MEEN]は大量消去機能を可能にするために10以外の値に設定する必要があります。一括消去が無効の場合、   FSEC [MEEN] = 10の場合、一括消去要求はフラッシュによって無視され、デバイスはこれを使用してセキュリティで保護されません。   方法。   多くのデバッガは自動的にMDM-APステータスレジスタのビット2を使用して、デバイスが保護されているかどうかを判断します。   接続を確立しようとしています。デバッガのポップアップウィンドウを使用して、デバイスが保護されていることを警告して、   デバイスのセキュリティを解除するには、一括消去が必要です。一括消去が完了して検証されると、セキュリティが無効になります。一部   デバッガは自動的にフラッシュ設定フィールドをプログラムして、マスの後フラッシュを安全でない状態にすることがあります。   消去完了、FSEC = 0xFE。

また、私はMDM-APレジスタを読み書きしようとするときに異なるRESET信号操作を必要とする異なるKinetisファミリーについて言及している投稿に出会いました。

編集4:あなたはSWD_DIOに強いプルアップを追加してみましたか?それは暗闇の中でのショットですが、Freescaleはそれをお勧めします。

1
追加された
クロスチェックや提案を行うために時間を割いていただきありがとうございます。 FTMRH_FSEC(0x40020001)は0xfeの値を返しますが、これは可能な限りロック解除されていないかまたは安全ではないことを示しています。 0x0000400cでフラッシュを読むと、同じ値を示すセキュリティビット(FSECがパワーオンリセット時に値を取得する場所)も表示されます。J-Link> mem8 400 10 00000400 = FF FF FF FF FF FF FF FF FF FF FF FF FF FE FF
追加された 著者 akohlsmith,
J-Linkにはリセット時にウォッチドッグタイマを無効にする特定のKinetis値(6)を持つ "rsettype"コマンドがあります。プロセッサを停止させるわけではありませんが、 "h"コマンドでそれを実行できます。また、rsettype 6を使用しないと、ウォッチドッグレジスタからウォッチドッグが有効になったことが報告されることがわかります。これはドキュメントと一致しています。
追加された 著者 akohlsmith,
私はプルアップを試しました(4.7k、どのくらい強いかがわからない)が、違いはありませんでした。
追加された 著者 akohlsmith,
私はプルアップを試してみました、あなたが試した両方のボードはそれを持っていません、そしてこれがうまくいかなければ、JlinkはNOKです。
追加された 著者 Talik Eichinger,
4k7は大丈夫です。あなたはできる限りのことをしました。この時点からFRDM-KL25Zで振る舞いを検証してから、Jlinkみんなに100万枚のチケットを送ってください。
追加された 著者 Talik Eichinger,

エラーメッセージはPCの値に関するものなので、CPUがどこかのレールから外れているように聞こえます。これはロングショットですが、ウォッチドッグタイマーを無効にしてみましたか?

0
追加された
それは素晴らしい提案でした。私はあなたの答えを読んでからこの理論をテストしてしばらく時間をかけました。しかし、 "device skeazn64xxx2"を実行すると、J-Linkはすでにこれを考慮に入れており、リセット後にウォッチドッグを無効にしているようです。これを確認するには、パワーサイクルの間にデバイスを指定して、または指定せずにWDOG_CS1レジスタをチェックします。 :-(
追加された 著者 akohlsmith,
うーん…さて、私が気づいた他のことはあなたが空白のチェックの間に訂正可能なエラーになっているということです。あなたのJ-LinkはフラッシュECCを無効にしていますか?そうでない場合、それはリードバック検証で問題を引き起こす可能性があり、さらには予期しない割り込みを引き起こす可能性さえあります。 (私は特にFreescale MCUには慣れていませんが、この種の動作はかなり一般的なものだと思います。)
追加された 著者 Adam Haun,