こんにちは!
私は MailBox Tool v1.1 を使用しています。「MyProject.elf.S19」を使用してFXLC95000をプログラムしようと何度か試みた後、消去しようとするとエラーが発生します。
**** フラッシュ消去に失敗しました。
エラーコード2: フラッシュが保護されています、FOPT[PROTB]=0
プログラミングしようとするとエラーが発生します:
**** フラッシュ消去に失敗しました。
エラーコード4: 期待値が一致しないため、プログラム/消去操作に失敗しました
私の質問は次のとおりです。
MailBox Tool v1.1 を使って消去とプログラミングを有効にするにはどうすればいいですか?そのためにはどのようなコマンドを送信すればよいですか?
記載されている手順を実行するのを手伝ってくれる人はいますか?
ヴィタリー、
私が想定しているのは、0x1FFFE の FOPT レジスタへの書き込みを含むバイナリ イメージをプログラムしたことが原因だと思います。
その実行可能ファイルによって FOPT に書き込まれた値には、0 に設定された FOPT_PROTB ビットが含まれていました。
また、FOPT_BF ビット (Boot to Flash) が 1 に設定されている可能性もあります。これにより、パーツは直ちに起動し、内蔵の ROM コマンド インタープリタ (CI) の代わりに実行可能ファイルの実行を開始します。
メールボックス ツールは、FXLC95000 上の ROM コマンド インタープリターを使用して、プログラム/消去操作を実行します。FOPT_BF が 1 に設定されている場合、ROM CI はブート後に実行されなくなり、メールボックスは ROM CI を使用してこれらの操作を実行できなくなります。
次のことが推奨されます:
1. FOPT_BF ビットを設定する実行可能ファイルには、次の電源サイクルで部品が再び ROM から起動するように FOPT を書き換えるように指示するコマンドも用意されています。
2. 通常の開発およびデバッグでは、メールボックス ツールのフラッシュ機能に頼るのではなく、P&E マルチリンクなどのデバッグ プローブを使用します。FOPT 設定によりメールボックス ツール/ROM CI 経由でのフラッシュが禁止されている場合でも、マルチリンクを使用して部品を再フラッシュできます。
私が通常 FOPT を処理するために使用し、プロジェクトに追加するコードは次のとおりです。
(ただし、AUTO_BOOT_TO_FLASH が定義されるように #if 0 を 1 に設定する場合は、マルチリンク デバッガーを使用するか、送信時に FOPT を ROM にブートするように書き換えるコマンドを実装する必要があることに注意してください。)
#0の場合
#AUTO_BOOT_TO_FLASH を定義する
/* この方法の欠点は、ROM CIモードに戻す唯一の方法がNVOPT[5]で新しいイメージを再フラッシュすることだ。
* 設定 - たとえば、このマクロをオフにして、CodeWarrior の BDM 接続を使用して再ロードします。
*/
#endif
#ifdef AUTO_BOOT_TO_FLASH
/* フラッシュオプションを設定してフラッシュからのブートを有効にする
* アドレス0x1FFFE(NVOPT、フラッシュメモリの最後の位置)の値は、ハードウェアFOPTレジスタを初期化するために使用されます。
* ブート ROM による起動時に。(制御レジスタの詳細については、FXLC95000 ハードウェア リファレンス マニュアルを参照してください)。
* 簡単に言うと、FOPTのBFビット(ビット13)がセットされると、ROM CIは実行をFOPTに格納されているプログラムに移行します。
* ブート シーケンスが完了した後のフラッシュ メモリ。ビットがクリアされている場合、ROMコードは最初の実行後も実行を継続します。
* 電源投入時の初期化が完了し、ROMコマンドインタープリタが定義したコマンドを実行できるようになります。
* ハードウェアリファレンスマニュアル。
* 注意: 難しいのは、ブートROMによってFOPTに配置される値が、
* 位置は0x1FFFEなので、NVOPTのビット[5]を設定するとFOPT[BF/13] = 0になり、ROMからブートすることを意味します。
*
* NVOPTがブート時にROM CIに残るように設定されている場合、フラッシュイメージは
* 0x29 0x00 0xFF 0xFF 0xFF 0xFF を ROM コマンド インタープリターに送信します。
* これは、ROM CI がアクティブで、フラッシュに有効なイメージがプログラムされている場合はいつでも送信できます。
*
*/
uint32 flash_opt @0x1FFFE = //FOPT_BF_MASK | // マスクをOR演算しない場合、NVOPTのビットは未設定のままとなり、フラッシュへのブートを意味します。
FOPT_CHECKB_MASK | // フラッシュCRCを実行しない
FOPT_PW_MASK | // PROTB書き込み可能
FOPT_PROTB_MASK | // フラッシュアレイは保護されていません
FOPT_SSW_MASK | // セキュリティ状態書き込み可能
FOPT_SSC_MASK; // セキュリティ状態 = 非セキュリティ
#それ以外
/* 電源投入後もROM CIモードを維持する */
uint32 flash_opt @0x1FFFC = 0xFFFFFFFF; // ROM CI から起動
#endif