私は何年もの間、さまざまなマイクロコントローラーとマイクロプロセッサーを使用してきましたが、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と話をしなければならないかもしれません。