こんにちは、
PFlash へのデータ書き込みで問題が発生しています。リファレンス マニュアルの指示に従いましたが、まだメモリに書き込むことができません。これについてどうか助けてください。それは時間的に重要だから。
参考までに私のコードも添付しておきます。
ありがとうございました。
こんにちは、ダニエル。
1.リファレンスマニュアルに記載されている以下のすべてのレジスタの組み合わせを使用してロック解除を試みました。
PFLASH.PFCBLK_SSPELOCK[0].R = 0x00000000U; //PFlashブロック0
PFLASH.PFCBLK_SSPELOCK[1].R = 0x00000000U; //PFlashブロック1
FLASH.SPELOCK.R = 0x00000000U;
FLASH.SSPELOCK.R = 0x00000000U;
FLASH.XSPELOCK.R = 0x00000000u;
FLASH.XSSPELOCK.R = 0x00000000u;
PFLASH.PFCBLK_SPELOCK[0].R = 0x00000000U;
PFLASH.PFCBLK_SPELOCK[1].R = 0x00000000U;
PFLASH.PFCBLK_SPELOCK[2].R = 0x00000000U;
PFLASH.PFCBLKU_SPELOCK[0].R = 0x00000000U; // UTESTブロックロック
ただし、DFlash は常にロックされたままであり、消去/プログラムを試行すると PES=1 が設定されます。
以下を明確にしていただけますか:
S32K311 上の D-Flash ブロックの正しいレジスタとレジスタ インデックス。
S32K311 上の D-Flash に特別なロック解除メカニズム (UTEST ヒューズ、FCCU、ライフサイクル状態など) が必要かどうか。
D-Flash のロック解除 + 書き込みが成功したことを示す参考例。
2. P-Flashの最後の256KBのロックを解除できません:
上記のすべてのレジスタの組み合わせを使用した後でも、 0x004B0000 ~ 0x004FFFFF以上の値はロックされたままになります。
この領域は別のロック ブロック (ブロック 2?) によって制御されていますか? それとも D-Flash と共有されていますか?
こんにちは@emb-enockal さん、
0x00480008から始まる8バイトをプログラムするには、DATA[2-3]レジスタにデータを書き込む必要があります。
ロックに関しては、火曜日まで不在のため、現時点ではハードウェアでテストできません。
RTD ドライバ (C40_Ip) を参考にすることをお勧めします。
よろしくお願いいたします。
ダニエル
こんにちは、ダニエル。
ご説明ありがとうございます。
はい、プログラミングしていたのと同じ PFlash ブロックから書き込み関数を実行しようとしていることに気付きました。書き込みルーチンを別のブロックに移動すると、動作するようになりました。
ただし、2 つの追加の問題があります。
PFlash連続書き込み
アドレス0x00480000に 8 バイトを書き込むと成功します。
しかし、次の 8 バイトを0x00480008に書き込もうとすると、操作は失敗します。
書き込みが成功する次のアドレスは128 バイト後になります。
コントローラは 128 バイト (4 ページ) 境界でのプログラミングのみを許可するようです。
同じ 4 ページ内で小さいチャンク (8 バイト) を連続してプログラムする方法はありますか? それとも 128 バイトすべてを一度に書き込む必要がありますか?
DFlashロック解除の問題
推奨されている通り、 SPELOCK[2]とSSPELOCK[2]を使用してBlock_2のロックを解除しようとしましたが、ブロックはロックされたままです。
モジュール レベルおよびプラットフォーム レベルのロック レジスタをクリアすることも試みましたが、DFlash 領域はまだロック解除されません。
以下は私が試みたロック解除シーケンスです。
PFLASH.PFCBLK_SSPELOCK[0].R = 0x00000000U; //PFlashブロック0
PFLASH. PFCBLK_SSPELOCK [1]. R = 0x00000000U; //PFlashブロック1
FLASH.SPELOCK.R = 0x00000000U;
FLASH.SSPELOCK.R = 0x00000000U;
FLASH.XSPELOCK.R = 0x00000000u;
FLASH.XSSPELOCK.R = 0x00000000u;
DFlash Block_2 のロックを解除する正しい方法を理解し、同じ 4 ページ内での連続書き込みがサポートされているかどうかを確認する方法を教えていただけますか?
ご協力ありがとうございます。
こんにちは@emb-enockal さん、
フラッシュ プログラミング コードは、プログラムされているフラッシュ ブロックと同じフラッシュ ブロック内に存在してはなりません。
同じフラッシュ ブロックをプログラムする必要がある場合は、実行コードが SRAM に配置されていることを確認してください。
この例では、C40_Ip API は SRAM に配置されています。
参考までに、 https://community.nxp.com/t5/S32K-Knowledge-Base/S32K312-C40-Ip-SRAM-RTD-500-DS35/ta-p/2074245を参照してください。
DFlashはBlock_2にあり、SPELOCK[2]とSSPELOCK[2]によってロックされています。
よろしくお願いいたします。
ダニエル
こんにちは、皆さん
S32K311 (48 ピン) の PFlash/DFlash プログラミングで行き詰まっています。書き込み関数の最後にブレークポイントを配置すると、 P-Flash をプログラムできるようになりましたが、そのブレークポイントを保持しないと、CPU が逆アセンブリにジャンプし、RWE フラグが 1 に設定されます。
また、 D-Flash のロックを解除できません(すべてのロック解除の試行が無視されるようです)。お知らせ下さい。
私が観察したのは次の通りです:
PFlash 書き込みシーケンスは、書き込み関数にブレークポイントを設定している場合にのみ完了します。そのブレークポイントを削除すると、CPU は書き込み要求の直後に逆アセンブリに移行します (割り込み/フェッチ障害のように見えます)。
次のロック解除シーケンスを書き込んだにもかかわらず、D-Flash はロックされたままです。
PFLASH.PFCBLKU_SPELOCK[0].R = 0x00000000U; /* UTESTブロックロックをクリアする(試行済み)*/
/* モジュールロックをクリアする */
FLASH.SPELOCK.R = 0x00000000U;
FLASH.SSPELOCK.R = 0x00000000U;
/* プラットフォームレベルのブロックロック解除 */
PFLASH.PFCBLK_SPELOCK[0].R = 0x00000000U;
PFLASH.PFCBLK_SSPELOCK[0].R = 0x00000000U;
参考までにコードも添付しました。
こんにちは@emb-enockal さん、
問題の説明を詳しく説明していただけますか?
エラーフラグは表示されますか?
簡単にするために、ブロッキング方法から始めることをお勧めします。
DATA レジスタはクワッドページに揃える必要があります。
プログラム中のブロックからコードを実行することはできません。
よろしくお願いいたします。
ダニエル
Any support, information, and technology (“Materials”) provided by NXP are provided AS IS, without any warranty express or implied, and NXP disclaims all direct and indirect liability and damages in connection with the Material to the maximum extent permitted by the applicable law.
NXP accepts no liability for any assistance with applications or product design. Materials may only be used in connection with NXP products. Any feedback provided to NXP regarding the Materials may be used by NXP without restriction.