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


12

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

2015年1月17日TL; DR:

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

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

SEGGERはv4.96aをリリースする前に、私はそれがでてくるファームウェアOpenSDAを再フラッシュすることにより、フリースケールの安価($ 14)FRDM-KL25Zの評価ボード上のOpenSDAデバッガを再プログラミングすることにより、チップをフラッシュすることができるように管理しUSBDM(v4.10.6.240を使用します)。次に、USBDMのスタンドアロンの「ARM Programmer」ソフトウェアを使用しました。デバッグを必要としないほど「古い学校」のデバッグに習熟しているので、デバッグを動作させるのに時間をかけませんでした。オンボードターゲットKL25に「良性」プログラムをフラッシュするか、オンボードターゲットKL25のリセットラインがJ11カットでもOpenSDAデバッガーに接続されているため、プログラミングに干渉する可能性があることを確認してください(Keith Wakehamのブログ投稿を参照、以下にリンクされています)。

Erich Stygerに、問題を特定し、発見したことをメールで確認するのを非常に丁寧に手伝ってくれてありがとう。

定期的に予定されている質問に戻りましょう。

愚かでシンプルな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を読み書きできます)、デバイスは別の方法で動作するようです。DigiKeyの工場出荷時の在庫であるため、Kinetisはロック解除されますが、それでもJLinkExeの「kinetis unlock」コマンドはエラーや有用な情報なしでタイムアウトします。

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

以前にこれらのデバイスを使用したことがありますか?どのようにプログラミングしていますか?

編集してウォークスルーを追加します:

詳細情報:

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

今クロッキングを見る...リセットから、ICSはFLLへのクロックソースであり、ICS_C2のBDIVは001(リセットのデフォルト)に設定されています。正しく理解できれば、これは32kHzの内部オシレーターに1024をFLLで乗算し、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であり、フラッシュコントローラークロックはゲートされません。

それでは、フラッシュコントローラに移りましょう。Out of reset 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ドル)を購入し、OpenSDAデバッガーに汎用CMSIS-DAPソフトウェアを配置し、Keith Wakehamのブログに従ってJ11をカットすることで修正しました。オンボードターゲット(KL25Z)で簡単なプログラムを実行しているため、リセットラインに干渉せず、OpenOCDでSKEAZN64を確認して再生できますが、残念ながらプログラムできません。Kinetis Design Studio(KDS)ソフトウェアは、Kinetisが保護されており、大量消去を行う必要があると表示されているため、Kinetisをフラッシュしませんが、OpenOCD(KDSの一部として)はこれを行う方法を知らないようです。MacでビルドしたOpenOCDのgit masterバージョンはKinetisを理解していますが、特定のKEAシリーズは理解していないので、私は元に戻ります。

J-Linkに戻る...

@AdamHaunには非常に良い手がかりがあり、J-Linkのリセットタイプ(rsettypeコマンド)を「6」(Kinetis)に設定すると、J-Linkはコアをリセットした後にウォッチドッグを無効にすることになっています。WDOG_CS1レジスタ(0x40052000)を見ると、そうであるように見えますが、まだサイコロはありません。0xfffffffeでエラーコード-5のPCを使用すると、消去操作が無効になり、SIM_SOPTを使用して(32ビット値0x00000008を0x40048004に書き込む)リセットピンを無効にした場合にのみ、「キネティスのロック解除」コマンドが機能します。残念ながら、SWDインターフェイスがリセットラインを使用してSWD DAPを既知の状態に強制できないため、CPUを再び停止することはできません。

20150103編集:

LEDが点滅している

繰り返す

LEDが点滅している

TL; DRバージョン:USBDMイメージをFRDM-KL25Zボード(ストーリーのみ)に配置し、ARM Programmerスタンドアロンアプリを使用してテスト.elfをボードに送信します。電源を入れ直してください。

長いバージョンは後日提供されます。現在、このKEAZN64ボード用のソフトウェアを作成およびデバッグし、それに付属する他のソフトウェアの変更/テストを完了し、別のクライアント用のドキュメントの作業を行う時間が48時間未満です。私は約束します詳細な回答でこの質問を更新します。成功を共有したかっただけです。皆さん、ご協力ありがとうございます。特にあなたの何人かに恩恵を与えたいので、私はMODと話をしなければならないかもしれません。


愚かな質問ですが、正しいj-link liteを使用していると確信していますか?それらは1つのプラットフォームに制限されています。自分で間違ったものを使用したことはありませんが、これは失敗することを期待する方法です。
スコットサイドマン14

ここのj-linkタグとkinetisタグには実質的にコンテンツがない(他の質問が1つだけ)ので、おそらくメーカーのサポートフォーラムまたは電子メール、電話サポートなどを探してみてください。forum.segger.com
フィズ14

community.freescale.com/community/kinetisは、これについて知識のある人を見つける別の場所に表示されます。community.freescale.com/thread/337779は ...まさにあなたの質問に非常に類似していない場合のように見える
フィズ

1
@RespawnedFluff私は実際Kinetisのフォーラムで、ほぼ同一の質問がある:community.freescale.com/message/466015を。e.seはより多くのリーチを持っているので、このコミュニティ/サイトを好むので、ここで質問するのも悪くないと思いました。
akohlsmith 14

1
@RespawnedFluff質問を更新して、特定のJ-Linkバージョンを含めました。OEM固有のものではなく、「サポートされている任意のCortex-M0 / M0 + / M1 / M3 / M4 / M7コア」と直接記載されています。
akohlsmith 14

回答:


3

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

  • FTMRH_FERSTATレジスタ(4002_0007h)もあります。何がおかしいのか教えてくれるはずですが、パリティ(またはダブルパリティエラー)の場​​合のみです。ケースのエラーを記録したり、エラーを消去したりすることを確信していませんが、おそらくチェックする価値があります。

  • KEAのドキュメントには、フラッシュエラーによって割り込みがトリガーされる可能性があることも記載されています(セクション「18.3.5フラッシュおよびEEPROM割り込み」)。SEGGERがそれを消去するときにそれが起こるかどうかはわかりませんが、FSTATレジスタでエラーがフラグされているのを見て、PCが変化する理由についてはもっともらしい説明です。残念ながら、割り込みコントローラーのKEAのドキュメントセクション(「3.3.2 Nested Vectored Interrupt Controller(NVIC)構成」)は、完全なドキュメントについては、ARMのWebサイトの方向をかなりあいまいに指しています。フラッシュエラー用のデフォルトの割り込みハンドラーが(ブート時に)設定されているかどうかを把握できませんでした。

  • セクタレベルでの消去は手動で行っただけなので、手動で(適切なレジスタを自分で書き込むなどして)完全なフラッシュ消去コマンドを発行してください。単一のコマンドでこれを行う唯一の方法は、マニュアルのセクション18.3.9.10(p。246)に記載されている「セキュリティ保護されていないフラッシュコマンド」です。これは、デバイスを「保護解除」し、完全なフラッシュとEEPROM消去を行います。FSTATビット(CCIF)をポーリングして、いつ完了したかを確認し、後でエラーフラグを再度チェックできます。編集:マニュアルにも「18.3.9.7すべてのブロックを消去コマンド」セクションがあります。

  • より低いバスクロック周波数を試してください。0.8 Mhzを超えるものはドキュメントに従って動作します。これは、外部フラッシュが正常に動作するフリースケールフォーラムに1つのスレッドがあったが、まだ文書化された範囲内にある特定の周波数を超えていなかったためです。そのため、チップ内のフラッシュコントローラーが不安定で、指定された周波数の全範囲で動作できない可能性があります。

  • 同様に、あなたは別のチップです。これらのコストがどれくらいか(約3ドル)を考えると、悪いものを持っていることは考えられません。ほとんどの方法で正常に動作したが、特定のプロテクトモード命令で奇妙なエラーが発生した組み込みx86チップを使用したことを覚えています。私の問題は、同じメーカーの別のデバイスでなくなりました。Freescaleがこれらのデバイス用の(公に述べられた)足踏みと正誤表を持っているかどうかは、私には明らかではありません。

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

20150103編集:

(私のコメントからここに資料を移動し、拡張しました)

すべてのKinetisシリーズが(公式には、少なくとも)すべてのフラッシャーでテストされているわけではないようです。実際に使用しているかなり新しいEAシリーズは、Freescale独自の/ OEM Cyclone MAXフラッシャーでのみ公式にサポートされているようです。FreescaleのEAシリーズのページにリストされている唯一のものです。今では、KL0のような古いKinetisの場合、SEGGERを含むリストははるかに長くなります。それが単にEAシリーズの他のフラッシャーのテストの不足によるものなのか、それともCyclone MAXだけが現在知っているプログラミングの癖が実際に含まれているのかどうかはわかりません。私はこれが他のフラッシャーをリストするのが遅いだけのフリースケールであるかもしれないと思っていましたが、J-linkマニュアルをチェックすると (願わくば正しいもの)、そこにリストされているKinetis EまたはEAシリーズ(p。249)はありませんが、Kinetis K10からK60デバイス(および一部の古いMAC7)のみがあります。

注目すべきは、Cyclone MAX用PExDrvソフトウェア/ファームウェアは、2014年3月20日付けのサービスパック(バージョン10.3)を、持っていることである「MKE04Z64、MKE04Z128、MKE06Z64、MKE06Z128、のための追加支援SKEAZ64とSKEAZ128の誘導体です。」もう1つの手がかりは、Kinetis用のフリースケール独自のオープンソースブートローダー/フラッシュローダーソフトウェアは、2014年12月にさらに最近更新されましたが、EまたはEA [サブ]シリーズのデバイスをサポート対象としてリストしません。だから、E / EAシリーズとK10のような他のKinetisの間で点滅については十分に異なるものがあると思いますが、その違いは正確にはわかりません。したがって、この時点では、Cyclone MAX以外でEAフラッシュが自動的に機能することを期待すると思います。最終的には、EAシリーズのドキュメントから「ベアメタル」レベル(ダイレクトレジスタコマンド)でそれを行う方法を理解できるかもしれませんが、ドキュメントはかなり鈍いことに同意します。確かに、単なるリファレンスマニュアルである段階的な指示はありません。フリースケールのオープンソースのブートローダー/フラッシュローダーがE / EAシリーズをサポートしていたなら、

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

そして、もしあなたが「プログラマーのために100ドルをばかげている」と思っているキース(ブロガー)のようであれば、そのCycloneで900ドル以上を落とすという観点に満足しないでしょう。Freescaleが自動車の顧客を逃がすためにこれを意図的に行っているのか、それとも... ... KinetisシリーズのほとんどのツールがE / EAで動作しないのは確かに奇妙に見えます。

また、明らかにOpenSDAのフラッシュ機能はMS Windowsのみ機能することに注意してください。

より多くのボードを試してみる(ハッキング)場合は、EシリーズKinetisを搭載したボードをお勧めします。たとえば、FRDM-KE02Z(Digi-Keyで13ドル)。また、OpenSDAを使用しているため、ハッキング可能性があります。私が知る限り、彼らはEAシリーズでボードを製造/販売していません。ただし、1つのOpenSDAプロセッサ/ボードを使用して、両方のプロセッサが同じ(例:L)シリーズで異なる番号であっても、独自のボード上のものとは異なるKinetisタイプをプログラムすることはできません残念ながら、OpenSDAの「オープン」は、SDA仕様がオープンであることを意味するだけであり、ソースコードをオープンソースとして提供することではありません。そのため、Eシリーズフラッシュをプログラムするためのソースコードも見つけることができません。どうやら、私はそれについて半分だけ正しいです。OpenSDA v1はオープンソースではありませんが、v2はオープンソースです

だからここでの内幕だOpenSDAv2が。基本的にはCMSIS-DAP / mbedブートローダーとフラッシャーです。したがって、v1と同じ機能を持たないか、同じチップをサポートしない可能性があります...実際には、flash_features.hにはSKE(EAシリーズ)はもちろんMKE(Kinetis Eシリーズ)もリストされていないため、事実ですデバイス。要約すると、EAシリーズに対するFreescaleの提案は、$ 900のCycloneフラッシャーを購入するか、リリースしたオープンソースの不完全な部分から独自のフラッシャーを作成することです。

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

V4.1.6.140(2014年4月)

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

  • MKEデバイスの修正(Mass Eraseを除いてプログラムに失敗しました)

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

USBDMマスター構成ファイルは、かなり気難しいものに見えます。USDBMでは、異なるMKEシリーズデバイスに異なるフラッシャー(コードベース)が使用されます。MKE04およびMKE06には「FTMRE」と呼ばれるものが使用されますが、MKE02には「FTMRH」が使用されます。2つのコードベースを簡単に確認した後、ほぼ確実にFTRMEコードベースではなくFTRMHコードベースが必要になります。後者は、SKEA64デバイスとは異なるFTMRH構造を持っています。たとえば、クロック分周器は最初ではなく4番目のフィールドです。また、FTRMEはバスFIDVを0x17 = 24Mhzに設定しますが、これはチップの範囲外のようです(KEA64マニュアルのp。224は最大20Mhzを推奨しています)。FTMRHはそれを0x0F = 16Mhz(あなたと同じように)に設定しますが、これは問題ないようです。

この時点で(Cyclone MAXを購入したい場合を除き)最善の策は、Podonoghueに連絡して、チップを彼のコードベースで動作させることです。彼は積極的で、新しいデバイス(フリースケールフォーラム)を手伝おうとしいるようです。

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


1
FERSTATは、あなたが疑ったように有用なものを何も表示しません。私はこの大失敗の初期にそれを試しました。すべてのフラッシュ割り込みはデフォルトで無効になっていますが、これがおそらく問題の一部であるかどうかを確認しました。サイコロもありません。私は2つのボードを持っていますが、どちらも同じように機能しますが、シリコンが実際に責任を負うのはごくわずかな時間であることが長年にわたってわかっているため、ここで髪を引き裂いています。:-)
akohlsmith

周波数を落としてみます。デフォルトのリセット時のデフォルトは、16.78MHzバスクロック(32kHz * 1024/2)のようです。これが、0x10のフラッシュクロック分周器を選択した理由です(32kHz * 1024 / 2/16は1.048MHzです。少し端に近い)
-akohlsmith

1
あなたのその他の提案、すべてを消去する(0x8)の代わりにアンプロテクトコマンド(0xb)について...それは成功しますが、その後CPUを停止することはできず、フラッシュに何かをプログラムすることもできません。
akohlsmith

このインターネットの見知らぬ人を助けようとするあなたのすべての努力に感謝します。サポートされているプログラマー(J-LinkとCMSIS-DAP)およびフリースケール独自の開発環境とツールを使用している場合でも、このチップの使用が非常に難しい理由を理解するのに苦労しています。それは私の心を吹いています。
akohlsmith

詳細な調査と継続的な支援に感謝します。実際、これはまさに私がやったことです。USBDMファームウェアとスタンドアロンARMフラッシャーでFRDM-KL25Zを使用しています。これが、点滅するLEDテストをデバイスに組み込んだ理由です。興味深いのは、SeggerがサポートするCPUリストがSKEAZN64xxx2を明示的に言及していることですが、それは機能しません。
akohlsmith

2

これを試しましたか?:Segger J-Linkを使用したフラッシュのロック解除と消去

伝えられるところでは、あなたは:

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

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

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

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

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

EDIT3:Kinetisセキュリティおよびフラッシュ保護機能の使用、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信号操作を必要とすることに言及している投稿を見つけました。

EDIT4:SWD_DIOに強力なプルアップを追加しようとしましたか?それは暗闇の中でのショットですが、フリースケールはそれをお勧めします。


時間をかけてクロスチェックと提案を行っていただきありがとうございます。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

私はプルアップを試してみましたが、あなたが試した両方のボードにはそれがなく、これが機能しない場合、JlinkはNOKです。
イギー

私はプルアップを試しました(4.7k、どのくらい「強い」強さが必要かはわかりません)が、違いはありませんでした。
akohlsmith

4k7は大丈夫です。できる限りのことをした。この時点から、FRDM-KL25Zで動作を確認し、Jlinkの社員に100万のチケットを送信します。
イギー

1

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

したがって、「リセット停止」コマンドを探してください。ベクトルの事前初期化の状態に到達する必要があるため、停止だけでは十分ではありません。


コメントありがとうございます。しかし、seggerは最初にCPUを停止します。また、これらのコマンドを変更せずに発行する前に、CPUを手動で停止してみました。私は質問でそれを明らかにすべきでした。
akohlsmith 14

ベクトルの初期化の前に停止する必要があると言っていることに気づきませんでした。調べていますが、なぜそれが必要なのか理解できません。ヒントをありがとう、すべてのビットができます
akohlsmith

1

まだ言及していないので、先に進み、問題はこの部分にリセット時に有効になっているキャッシュがあることだと推測します。これは、ブランクチェックで確認した「奇妙な」動作と一致しています。基になるFlashは更新されましたが、キャッシュは更新されていません。これを修正するには、MCM_PLACRatに書き込むことでデータキャッシュと命令キャッシュの両方をオフにしF000_300Ch、キャッシュをクリアします。これと同じ奇妙な振る舞いは、Seggerも混乱させた可能性があります。


これは非常に良い提案でした。リセット時に、MCM_PLACRは0x00000850として読み取ります。これは少し奇妙です(データキャッシュは無効ですが、ドキュメントではビット6および4は予約されています)。すべて(投機、コントローラーキャッシュ、命令キャッシュ)を無効にし、0x0000bc00を書き込むことでキャッシュをクリアしようとしました。0x0000b850を読み返しますが、動作に変化はありません。
akohlsmith

あなたが最終的にこの問題を解決するとき、私は聞くことに非常に興味があります。一方、このチップは、まもなく私のデザインのいずれにも含まれることはありませ。大変申し訳ありませんが、興味深い質問をお寄せいただきありがとうございます。
エドワード

0

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


それは素晴らしい提案でした。この理論を検証するあなたの答えを読んだ後、私はしばらく時間を費やしました。ただし、「デバイスskeazn64xxx2」を実行している場合、J-Linkはすでにこれを考慮し、リセット後にウォッチドッグを無効にしているようです。電源サイクルの間にデバイスを指定する場合と指定しない場合の両方で、WDOG_CS1レジスタをチェックすることでこれを確認しました。:-(
akohlsmith 14

うーん...わかりました、私が気づいた他のことは、ブランクチェック中に修正可能なエラーが発生していることです。J-LinkはフラッシュECCを無効にしますか?そうでない場合、リードバック検証で問題が発生する可能性があり、予期しない割り込みが発生する可能性もあります。(私はFreescale MCUに特に精通していませんが、この種の動作はかなり一般的だと思います。)
Adam Haun 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.