LPC546xx 部品の EEPROM メモリ ブロックに似たものを探しています。
MCX パーツにはフラッシュ ROMAPI があるようですが、ドキュメントが不十分で明確な例がありません。CFPA と CMPA の違いは何ですか?フィールドを増やしますか?事前に割り当てられた場所がたくさんありますか?ブロックサイズの制限が不明瞭ですか?ファクトリー vs. インフィールド vs. キーストア?
さらに、ROM 内にあるSO、コードに従うことすら不可能です。同様にドキュメントが貧弱だったため理解するのが難しかった LPC546xx USB 関数を思い出します。
ああ、AN14259 を読みました。少しは役に立ちますが、十分ではありません。
私が欲しいのは、アプリケーション固有の定数を保存できる、永続的だが OTP ではないメモリ領域だけです。おそらく何かが欠けていると思います、SO正しい方向を指し示してください。
ご協力いただければ幸いです。
こんにちは、パブロさん。
今後ともサポートをよろしくお願い申し上げます。
ようやくこの問題を解決でき、CMPA ページの空き領域にデータを配置できるようになりました。すべては MBC を理解することにかかっていますが、残念ながらリファレンス マニュアルでは MBC の使用方法があまり明確ではありません。ただし、セキュリティ リファレンス マニュアルの第 21 章の方が役立ち、MBC を構成すると、ROM フラッシュ API が期待どおりに動作し始めました。
この分野でもっと良い例がいくつかあれば、多くの時間を節約できただろうと本当に思います。フラッシュを非表示にする機能は、おそらく必要なものに最も近いものですが、実際に何が起こっているのかが適切に説明されていないため、役に立たないほどです。
ご多幸をお祈り申し上げます。また、ご協力に改めて感謝申し上げます。
アンディ
こんにちは@andyjackson 、
CMPA 領域をプログラムおよび読み取るには、FLASH API を使用できます。通常、CMPA データの書き込みに使用される関数は ffr_cust_factory_page_write です。この機能の詳細については、リファレンス・マニュアルのセクション 13.2.2.10 を参照してください。
さらに、FLASH API を使用して CMPA フラッシュ領域を更新する方法を理解するには、次のコミュニティ投稿が役立つ場合があります。
MCXN5 CMPA 書き込み失敗 - NXP コミュニティ
よろしくお願いします、
パブロ
こんにちは、パブロさん。
前回のご返信ありがとうございます。私はこれをさらに詳しく調査しましたが、リファレンス・マニュアルの MCXNx4x_IFR.xlsx スプレッドシートによると、CMPA の 0x01004200 から 0x01005FFF はお客様定義であり、これは完璧なようです。しかし、このエリアにアクセスする方法はまだ見つかっていません。
FFR_GetCustomerData() を使用すると、CMPA 8K バイト ページのバイト 0x1FF まで読み取ることができ、標準フラッシュ関数 FLASH_Read/Program/Erase などはメイン プログラム フラッシュ内でのみ機能するようです。CMPA ページの残りの部分にアクセスするにはどうすればいいですか?
CMPA ページの最初の 512 バイトは更新CANが、ページの残りの部分にアクセスするものは何もないという例を見たことがあります。何かアイデアはありますか?
幸運をお祈りしています、
アンディ
こんにちは@andyjackson
リファレンスマニュアルが多すぎる可能性があることを理解しています。
ROM API の詳細については、次のコミュニティ投稿が役立つ場合があります。
Re: 内部フラッシュの消去/プログラミングにMCX N ROM APIを使用する - NXPコミュニティ
また、例 mcxromapi_flash_hiding_cm33_core0 は、MBC が内部フラッシュ メモリに対してブロックごとに読み取り、書き込み、および実行のアクセス制御を提供する方法を示しているため、役立つ場合があります。
よろしくお願いします、
パブロ
こんにちは、パブロさん。
お返事ありがとうございます。実行時に永続的なアプリケーション データを読み取って保存できるようにしたいので、セキュア プロビジョニング ツールは選択できません。
メインフラッシュバンクはファームウェアのアップデート中に再フラッシュされる可能性がある、SOそれを使用することも選択肢ではないようです。
また、更新後の再起動も同様に実行が中断されるため不可能であり、SO、これにより CMPA を残す CFPA が除外されるようです。
AN14259 を見ると、CFPA と CMPA のほぼすべての場所に定義済みの使用法があるようですが、どこに安全に書き込めるかはわかりません。
FFR_GetCustKeystoreData/FFR_CustKeystoreWrite と FFR_GetCustomerData/FFR_CustFactoryPageWrite を試してみましたが、読み取りは機能しているように見えても、書き込みでは常にハード エラーが発生するようです。さらに、コード例がわからないため、適切な使用方法を推測しています。
ほとんどのマイクロコントローラ アプリケーションでは、小さなユーザー EEPROM のような領域が不可欠であると思われるため、何かが欠けているような気がしてなりません。残念ながら、約 4000 ページのリファレンス マニュアルでは、すべての情報を理解するのは困難です。
幸運をお祈りしています、
アンディ
こんにちは@andyjackson 、
MCXN には保護フラッシュ領域 (PFR) が搭載されており、CFPA (お客様フィールド内プログラマブル領域) と CMPA (お客様製造/工場プログラマブル領域) の 2 つの構成可能なページが含まれています。これらの領域は両方とも複数回書き込むことができます。
ご指摘のとおり、アプリケーション ノートAN14259には、ROM API を使用して CFPA ビット フィールドを変更する方法の例が示されています。
この目的には、 MCUXpresso セキュア プロビジョニング ツールを使用することもCAN。ツールのユーザーガイドにはセクション5.2.8が含まれています。OTP/PFR/IFR/BCA/FCF 構成。GUI を使用して CFPA ビット フィールドを変更する方法について説明します。GUI では各フィールドの詳細な説明も提供されます。
さらに、アプリケーション ノートAN14178 は、ROM API の代わりにフラッシュ コマンド コントローラを使用してフラッシュの読み取りおよび書き込み操作を実行する方法を示しているため、役立つ可能性があります。
また、MCXN947 SDKs には、興味深いと思われる mcxromapi_flash_hiding_cm33_core0 という例があります。この例では、フラッシュの非表示を示すプログラムが示されています。
よろしくお願いいたします。
パブロ
こんにちは、
残念ながらコードをCAN公開することはできませんが、重要な部分は次のとおりです。
1. セキュリティリファレンスマニュアルの第21章のMBCの機能について読んで理解する
2. 初期化コード(CPU0 で実行)には次のようなものが必要です。
// CMPAページへのRWアクセスにはMBCを設定する必要があります
// MCX Nx4x セキュリティリファレンスマニュアルの第 21 章を参照してください
TRDC->MBC_INDEX[0].MBC_MEMN_GLBAC[5] = 0x7700;
TRDC->MBC_INDEX[0].MBC_DOM0_MEM1_BLK_CFG_W[0] |= 0x500;
その後、FLASH_xxxxx 関数は CMP ブロックへの RW アクセスを持つ必要があります。これらの関数の使用については、NXP の例を参照してください。
お役に立てれば幸いです。
アンディ
@andyjackson、コードサンプルや、これをどうやって動作させたかについての詳細を提供してもらえますか?また、CFPA のお客様定義領域にデータを保存しようとしていますが、これまでのところうまくいっていません。
ありがとう、アンディ。
あなたのコメントとリファレンス マニュアルを再度確認した後も、CFPA ではまだ問題がありましたが、CMPA を使用した小さな例が見つかり、良い出発点になりました。FUTURE、これに遭遇したCASEの誰かにとって役立つかもしれないので、小さなサンプルスニペットを添付しました。
ご協力いただきありがとうございます
こんにちは、
素晴らしい小さな例です!私が付け加えたいのは、ブロックの最初の 512 バイトにある NXP 定義データを保持したい場合は、消去する前にコピーしておき、消去後に再度書き込む必要があると思うということだけです。
NXP に関する最後のコメントとして、動的なアプリケーション固有のデータを保存するメカニズムを多くの人が望んでいると思われるため、これは SDK の例の 1 つになるはずです。NXP が定義したデータ要件のない専用のユーザー フラッシュ領域がないのは残念です。
アンディ