お疲れ様です。シュガーと申します。
偉大なる先達の知識をお借りしたいです!
Renesas Flash Programmer のチップ消去についての質問です。
①「チップ消去」と「ブロック選択消去」の違い
②工場出荷状態からチップ消去によって消されて(変更されて)しまった設定を再設定しなおす方法
が知りたいです。
【使用ツール】
・Renesas Flash Programmer(RFP)
・E2エミュレータ(シリアルデバッガ)
私は、RH850ファミリーのマイコンを使用しています。
新品のマイコンには、RFPを使用してユーザソフトを書き込みます。
ユーザソフトが書き込まれているマイコンには、ユーザソフトの機能(FCL?)を使って書き換えています。
※ブート領域が2つあり、書き換えの度に交互に使用します。
初回、マイコンにソフトを書き込む際に、これまではRFPの「ブロック消去」をしてから書き込みをしていました。
今回、諸事情により「チップ消去」をしてから書き込むように変更しました。
すると、ユーザソフトによる書き換えができなくなってしまいました。
原因は、ブート領域を指定している「可変リセットベクタ」の値が0xFFになっていたためエラーになっていました。
可変リセットベクタが0xFFになってしまった原因がチップ消去だと考えています。
ブート領域の指定方法を工夫する事で書き換えはできるようになりましたが、他にもチップ消去による潜在的なバグがある事を危惧しております。
そこで質問です。
①チップ消去とブロック消去の違いをご教授いただきたいです。
ブロック消去では消えないがチップ消去では消える事物
②消えた物を修正(再設定)する方法もご教授いただきたいです。
リセットベクタは0番地固定する事でなんとか復旧しましたがあくまでも暫定対応です。そもそも正しい値を設定する方法が知りたいです。
(リセットベクタ以外もあれば)
長文乱文失礼いたしました。
何卒宜しくお願い致します。
フラッシュROMってのはブロックという単位でクリアしたい領域を指定します。チップ消去は全ブロック消去です。マイコンによっては特別な設定情報領域もあり、チップ消去ではそれらも消去対象です。
わわいです
チップ消去ってのはチップ内に存在している全データ一括消去のことなんで、
> すると、ユーザソフトによる書き換えができなくなってしまいました。
その書き換えを行うはずだったユーザソフトも消去されてしまいます
ちと勘違いなされてるのでは
ご回答いただきありがとうございます!
>マイコンによっては特別な設定情報領域もあり
ユーザーズマニュアル等を探しましたが「設定情報領域」に関する記載が見つけられませんでした…
どのドキュメントに載ってそう 程度の事でも良いですのでご存じないでしょうか?
よろしくお願い致します。
ご回答いただきありがとうございます。
説明不足ですみません。
(旧手順)
ブロック消去→RFPでの書き込み成功→ユーザソフトによる書き換え成功
(新手順)
チップ消去→RFPでの書き込み成功→ユーザソフトによる書き換え失敗
この新手順で失敗してる話でした。
他の方の回答でもある通り
>マイコンによっては特別な設定情報領域もあり、チップ消去ではそれらも消去対象です。
この特別な設定情報領域の詳細が知りたいです。
ここにリセットベクタも含まれているのでは?と考えており、他にどのような設定項目があるのでしょうか?
えーと、チップ消去した時点で、リセットベクタも全部含めて消去されるって話ですが、そこんとこ理解なさってますか?
それは理解しているつもりです。
「チップ消去した事でリセットベクタも消去されていて書き換えができなくなった」というのが今回現れた症状ですが、この症状以外にも何か別の問題が起きているのではないか?という事を危惧しています。(例えば普段あまり使わない機能が実はおかしくなっているが気づいていないなど・・・)
この潜在的な問題を洗い出すために、チップ消去によって消される項目の一覧が知りたいです。
ブロック消去では消されないがチップ消去では消されてしまう項目の洗い出しがしたいです。
何かご存じでしょうか?
ブロック消去で全メモリ領域を指定したらチップ消去と同じ挙動をします。その意味で「全メモリ領域を消去する」という一点を取れば差はありません。なので
> チップ消去→RFPでの書き込み成功→ユーザソフトによる書き換え失敗
であるなら「本来書かなければならない領域が書けていない」ということです。 RFP がおかしいというのは考えにくいので、あなたの作った HEX/MOT ファイルが不完全である、本来含まなければならない何かが漏れている、ってのがありそうです。その HEX/MOT ファイルをブランクマイコンに書き込むと動かないものと推定されます。含まなければならない割り込みベクタ(や他の何か)が HEX/MOT から漏れていませんか?
例: RX だと OFSM (オプション設定メモリ)ってのがありますが、ブランクマイコンにオイラたち末端ユーザーが作ったプログラムを書く際には、ここも書かなければ動作しません。これのアドレスが
RX231 等:システム例外ベクタ [FFFF FF80 - FFFF FFFF] の一部にある( CodeFlash 領域内)
RX671 等:CodeFlash 領域の外 [FE7F 5D00 - FE7F 5D7F] にある
そのため HEX/MOT 形式のマイコン書き込みイメージを作る際には 671 等ではアドレスの離れた2領域を1つにまとめる必要があります。自作ツールとかがその辺うまく扱えないと、ビルド中に OFSM が失われてこのような動作になることが推定されます(ってかわざとそういう MOT を RFP で書いてうまく動かないことを確認済みです)
まずはその MOT ファイル中に必要なものが全部入っているか確認しましょう。
RH850ですと、多分オプションバイトの設定の問題だと思います。
RFPでオプションバイトの読み出しが出来ますので、期待する動作のチップから、オプションバイトの値を読み出しておいてください。
チップ消去後のユーザプログラムの書き込み後などに、オプションバイトの設定で、読み出した値を設定すると、消去前と同じ動作となると思います。
(RXなどは、オプションバイトやオプション設定メモリの出荷時の値は0xFFで、コンフィグレーションクリア後と同じ値であったりしますが、RH850のオプションバイトの値は出荷時の値が0xFFでなかったりします。オプションバイトの初期値を把握せずに、オプションバイト領域含め全消去すると、ブランクチップ+ユーザプログラム書き込みの状態とは動作が変わってしまいます。)
>チップ消去後のユーザプログラムの書き込み後などに、オプションバイトの設定で、読み出した値を設定すると、消去前と同じ動作となると思います。
チップ消去を実施した方はすべて0xFFになっておりましたので、オプションバイトの書き込みを実施した後ユーザープログラムでの書き換えを試してみましたが症状変わらずでした。
オプション設定メモリは、
オプションバイト+セキュリティ設定+シリアルプログラミング, デバッガ接続ID+OTP設定など
ユーザエリア(ROMやDF)以外の、不揮発性メモリに保存される諸々の設定の領域を指しているものでしょうか。(オプション設定メモリの中にオプションバイトが含まれる)
オプション設定レジスタは、起動時にオプションバイトなどの内容が読み込まれて値が設定されるレジスタの事じゃないかと思います。(起動時に設定されて、書き換え不可みたいなレジスタ)
(オプション設定メモリは、CPUから見て必ずしも特定のアドレスに割り付けられているとは限らないが、レジスタは特定のアドレスに割り付けられているもの。)
全消去後に、ROMデータの書き込みとリセットベクタ、オプションバイトに同じ値を設定しても、消去前とは動作が異なる、という認識で合っていますでしょうか?
ユーザプログラムの動作に影響を与えるのは、オプションバイト位だと思うのですが。
今回動作で問題になっているのが、ファームの自己書き換えプログラムみたいですので、全消去でロックビットの値が変わった影響という可能性も(まあ、ないとは思いますが)考えられるでしょうか。