@@Thisこの記事では、SCIなどの標準通信メディアを使用して、Cortex-M4コア・デバイス用のKinetisのインシステム・リプログラミングを行う方法について説明します。ほとんどのコードはC言語で書かれているため、他のMCUへの移行が容易です。このソリューションは、お客様に採用されています。
このブートローダは、FRDM-K22 デモボードと KDS3.0 に基づいています。ブートローダとユーザアプリケーションのソースコードが提供されます。 GUIも用意されています。 お客様は、それらに基づいて独自のブートローダーアプリケーションを作成できます。このアプリケーションを使用して、RS485などのネットワークを介して接続されたシングルターゲットボードおよびマルチボードをアップグレードできます。ブートローダー アプリケーションは、入力アドレス範囲内のノードの可用性を確認し、ファームウェア ノードを 1 つずつ自動的にアップグレードします。
ブートローダーの主な機能:
Cortex-M0+製品については、こちらを参照してください:ネットワーク内の複数のデバイスを更新するためのKinetis Bootloader - Cortex-M0+の場合 、FRDM-KL26に基づいています。
Cortex-M4とCortex-M0+の主な違いは、FLASHプログラムルーチンです。
- Cotex-M4コアキネティスでは、Flashの操作ルーチンをRAMにコピーする必要があります。ブートローダーコードでは、RAMコードへのコピーは「FLASH_Initialization()」の関数で実現されます。
バイト バッファ[200]={0};
- Cotex M0+コアキネティスでは、 Flash操作ルーチンをRAMにコピーする必要はありません。 プラットフォーム制御レジスタ(MCM_PLACR)を追加しました。MCM_PLACRレジスタは、クロスバーマスターのアービトレーションポリシーを選択し、フラッシュメモリコントローラを設定します。ESFC ビットを有効にすると、フラッシュがビジー状態のときにフラッシュ コントローラーが停止する可能性があります。ESFCビットを設定すると、Flashの読み取りと書き込みの時系列のバランスをとることができます–Flashを書き込むとき、Flashの読み取り命令を待つことができ、その逆も同様です。ESFCビットを使用すると、フラッシュプログラミングが容易になります。したがって、1つのFlashはそれ自体を書き込むことができますが、これはESFCビット制御なしでは他の1つのFlash MCUでは不可能です。
ESFCビットはCコードで簡単に設定できます。
詳細については、添付のドキュメントとコードを参照してください。
ユーザーは、Githubからドキュメントとソースコードをダウンロードすることもできます。
他のチップの移植は、私の場合MK10DN512かなり問題があります。リンカファイルとMK22F51212.hを置き換える必要がありますが、既存のプロジェクトで多くのエラーが発生します。また、私が理解しているように、フラッシュドライバは異なります。
Hi Huy,
ブートローダーをボードにフラッシュするすべてのものを使用できます。
私はKDSで開発したので、直接KDSを使用してダウンロードします。SEGGER-JFlashでOKだと思います。
BR
アリス
親愛なるアリス、
あなたのブートローダーを私の MK20DN512(Landungsbruecke)に移植しました。このブートローダーをボードに書き込むにはどうすればよいですか?私はよくSEGGER-JFlashを使ってユーザーアプリケーションをフラッシュします。アドバイスをください!
どうもありがとうございます!
よろしくお願いいたします。
Huy.
Hello Sam,
「Kinetis Bootloader Cortex-M4.pdf」のDOCをよくお読みください。プロセスを明確に理解し、
その後、チップに移植する方法がわかります。
また、FRDM-K64への移植があり、移植を開始するときに参照できます。
https://community.nxp.com/docs/DOC-333740
BR
アリス
Hi Alice,
コードを共有していただきありがとうございます。
このブートローダーをMK20DN512用に移植したいのですが、どのファイルを変更する必要がありますか?Kinetis Bootloaderを初めて使用するので、ぜひお役立てください。
よろしくお願いいたします!
よろしくお願いいたします。
Huy.
こんにちは、アリス、
たいへん良い! あなたの助けと情報をどうもありがとう!
それでは。
Sam
Hello Sam,
このブーツローダーにご関心をお寄せいただきありがとうございます。
- ユーザーアプリケーションは任意のプロジェクトにすることができます(PEプロジェクトとベアボードプロジェクトの両方を使用できます)。
「3.3.8User application code」を使用して、アプリケーションプロジェクトを設定します。
はい、PEプロジェクトを使用する場合は、リンカファイルを直接変更し、リンカファイルの生成をオフにする必要があります。
また、「Generate linker file」構成ビューで構成することもできます。
- S19レコードファイル名については、手動で名前を変更するのではなく、KDSによって生成されます。


-このブートローダーでは、GUIはs19とHEXファイルの両方をサポートしています。
BR
アリス
皆さん、こんにちは。
私の最初の質問のフォローアップです... PE を使用している場合、ライカー ファイルを正しく更新するには、リンカー ファイルの生成をオフにする必要があります。特にm_cfmprotromセグメント...これはPE内で直接アクセスできません。次に、結果のS19レコードファイルの名前をCWのデフォルト拡張子の「.hex」から「.s19」に手動で変更する必要があります(アリスの窓のプログラムは「.hex」をインテプレットしますファイルが異なります)。これを行うと、ブートローダーとGUIのWindowsローダーを使用できるようになります。まだやるべきテストはたくさんありますが、少なくとも基本的な作業システムはできました。
このブートローダーインフラストラクチャを提供してくれたアリスとチームに感謝します。
こんにちは、アリス、
Processor Expert(PE)が作成したプロジェクト(KL26プロセッサ)をGUI /ブートローダーで使用するため(PEベースのユーザーアプリケーション)を設定する方法について、いくつかのガイダンスを提供できるかどうか興味がありましたか?PEがCPUを生成するので、私は尋ねます。サンプルアプリケーションが「APP_OK」署名属性を保存する場所(「.cfmconfig」セクション)と競合すると思われる Flash 設定値を含む C ファイル。
よろしくお願いいたします!
それでは。
Sam
Hi Sebastian,
このドキュメントに関心をお寄せいただきありがとうございます。
そして、私が添付した私のプロジェクトの1つのエラーについて申し訳ありませんが、今私は新しいものを添付しました、新しいものを使用してください。
駅番号については、2か所の変更が必要ですが、
1つは「bootloader.c」のファイルにあります: const バイト station_number = 2;
もう 1 つは、ユーザー アプリケーション プロジェクトの bl_mommunication.c にありますファイル : const バイト station_number = 2;
次に、ステーション2にフラッシュしたい場合は、GUIで、2から2を選択してください、これは2のみをフラッシュすることを意味します。
試してみてください、それでもうまくいかない場合は、ためらうことなく私に連絡してください。
BR
アリス
Hi Alice,
まず第一に、この素晴らしいブートローダーと、コードとドキュメントを共有してくれてありがとう!
ブートローダーをプレーンなUARTモードとRS485モードで試しました。1台のデバイスを接続するだけで優れた動作をします。
その後、RS485ネットワーク経由で接続された2つのデバイスを試しました。ここでは、ブートローダーの使用中にいくつかの問題が発生します。
bootloader.c で私は次のコード行を見つけました "const Byte station_number = 1;「デバイスのバスアドレスはどれにすべきか?
2つのデバイスをstation_number 1とstation_number 2としてプログラムし、更新してみました。しかし、両方のデバイスが両方のアドレスに応答しているようです。シングルデバイスモードではstation_number 2もGUIのアドレス1に応答しました...
私が何を間違っているか知っていますか?デバイスのバスアドレスはどこで指定する必要がありますか?
Hi Rodrigo,
お返事が遅くなってすみません!
このドキュメントに興味を持っていただきありがとうございます。
1)どのようなエラーを発生させるか教えていただけますか?
そして実際には、FLashコマンドはバッファ[1]から開始し、次のコードを見つけることができます。
#define FLASH_FlashCommandSequence ((LWord (*)(Byte))&buffer[1])
2)なぜブートローダーアプリケーションをRAMにコピーするのですか?これを行うと、bootlaoderは1回限りのプログラミング支援になります。
そして、私が知っているように、KBOOTには「Kinetisフラッシュローダー」があり、フラッシュからロードされてRAMから実行され、ユーザーアプリケーションをオンチップフラッシュの先頭に配置できます。
3)「フラッシュに書き込むコマンドは何ですか?」どういう意味ですか?
私のプロジェクトでは、フラッシュコードへの書き込みはここにあります:
また、flash write コマンドは次のとおりです。
FLASH_FlashCommandSequence(PROGRAM_LONGWORD_INDEX);
#define PROGRAM_LONGWORD_INDEX 8
BR
アリス
親愛なるアリス、私はあなたのコードを分析して、私のowm固有のブートローダーを開発する方法を理解していました。私は多くのフリースケールAN、例などを探していました。君は良くなったようだ。しかし、私はあなたからの助けが必要です。
1) コード内...
for(i=0;i<200;i++)
buffer[i] = ((バイト*)FLASH_FlashCommandSequenceStart)[i-1];
[i-1] 「0」から開始するため、エラーが発生します。それは正しいですか?
2)私のコードはRAMメモリから実行し、すべてのフラッシュメモリを消去し、事前にプログラムされた外部SPIフラッシュから新しいファームウェアを読み取り、K63フラッシュメモリを挿入する必要があります。
3)フラッシュに書き込むコマンドは何ですか?
4)ブートローダー機能をRAMに配置してコピーするにはどうすればよいですか?そして、RAMメモリの代わりにフラッシュメモリを指すコマンドで何が起こるでしょうか?
助けていただけますか。
よろしくお願いいたします。
ロドリゴ