SH4Aで内臓Flashを消耗せずにソフト開発は可能でしょうか?

今回、日立系プロセッサの経験者であるという理由で、SH4A(R5F74504KBG)搭載ボード(特注の一点物)の出荷時検査用ソフトの開発を強引に任されました。

経験と言っても、現役であった前世紀末にH8/3048Fで開発を一度行っただけなのですが…。(苦笑…)

 

このプロセッサの内蔵Flashの書換えが100回迄とされております関係で、顧客からは当方での書換えを数回(出来れば1回)に抑える様要請されました。

おそらく、一度リセットベクタのみ内蔵Flashに書き込んで、それ以外のコード全てを内蔵RAM上に展開する事になると思われます。

この状態で開発し、完成後にはコードを全て内蔵Flashに収める様設定せねばなりません。最低でもリンカの設定変更が必要と思われます。

しかしながら、その様な記述や操作は可能なのでしょうか?何卒この浦島太郎に御指導頂きたく宜しく御願い申し上げます。

 

なお、当方の開発環境は以下の様になっております。(開発環境の変化に唖然と致しております)

統合環境:HEW V.4.09.01

C言語 :SHCC : V.9.04 Release 03

JTAG-ICE:コンピューテックス製PALMiCE3 SH & CSIDE Version6

Parents
  • SP-4010さん、こんにちは。NoMaYと申します。(日立系はトラ技の増刊でH8SX16550のサンプルプログラムを動かした程度ではありますが。)

    ふと思ったのですが、1点物ということで(ゆくゆくは量産する予定であるにしても)現状その1枚しか無いということかと思いますが、そういうことであれば(少なくとも現状)デバッガでRAMにダウンロードした出荷検査プログラムでOKの結果が出れば、その時点でその基板の出荷検査結果はOKであり、それ以上しなくてもお客様に納品することが出来る、ということにならないでしょうか? (fumisさんアドバイスと同じ?) (ゆくゆくは量産時の出荷検査の為にデバッガなど使わずに内蔵フラッシュメモリから起動するプログラムにしなければならないとしても。また、試作から量産までの間に仕様追加が発生して基板改版/プログラム改造が必要になることは、しばしばあることですし。)

    それから、内蔵フラッシュメモリから起動するにしても、なるべくトラブルを避けたい場合の手として、RAM上でデバッグしていた時のプログラムのバイナリイメージをそのまま使えるようにということで、内蔵フラッシュメモリに焼く内容を、イニシャルプログラムローダ(内蔵フラッシュメモリの特定番地以降の内容をRAMにコピーしてからRAMにジャンプするプログラム)とそのRAMにコピーされるプログラム(RAM上でデバッグしていたプログラムのバイナリイメージそのまま)を1つのMOT(またはHEX)に結合したものとする、といった手も考えられるかと思います。(RAM上で動作する出荷検査プログラムがRAMに収まっているのであれば、内蔵フラッシュメモリ上で動くように変更しなくても良いような気がしましたので。) また、こういうイニシャルプログラムローダの開発には(内蔵周辺シミュレーションが出来ない)命令セットシミュレータでも結構有効にデバッグ出来ると思います。(Fujitaさんアドバイスと同じ?)

    あと、基板の設計/試作も請け負っているのであれば、検査冶具として外部シリアルフラッシュを繋げられるようにしておいて、量産時にはお客さまが作 られた出荷(本番)プログラムを1回だけ書くものとして、基板上のDIPSW(もしくはTPへの1とか0とかの出力)で外部シリアルフラッシュから出荷検査プログラムをRAM上にコピーして実行出来るようにするカラクリを出荷(本番)プログラムに組み込んでおいて貰う、といった手も考えられるかと思います。(ただ、そのカラクリを逆手にとって内蔵フラッシュメモリの内容(お客さまのプログラム)をダンプする不心得者が現れる可能性もありますので、お客様の考え方次第ではありますが。) でも、この手は凝ったことを考え過ぎているかもしれませんが。

    SP-4010さんwrote: said:
    ちなみに、今回のボードは御客様にとっては試作品ですが、当方にとっては製品です。
    少なくとも、ボード上の機能が正常である事は確認せねばなりません。
    その為の、ボード出荷用ソフトウェアの開発を試みております。 [引用終]

  • フォーラム上の皆様、大変有難う御座いました。漸く期待通りの開発法が見つかりました。
    非常に低レベルでは御座いますが、一応報告させて頂きます。

    ① HEWの"Linker section setting"で、以下の様にリンカセクション設定を変更。

    Linker section setting
     ├▲ 18000800 ← 内蔵RAM上に移転
     │└田 INTHandler,VECTTBL,INTTBL,IntPRG
     ├▲ 18001800 ← 内蔵RAM上に移転
     │└田 PResetPRG
     ├▲ 18002000 ← 内蔵RAM上に移転
     │└田 P,C,C$BSEC,C$DSEC,D
     ├▲ 18040000 ← 内蔵RAM後半に移転
     │└田 B,R
     ├▲ A0000000
     │└田 RSTHandler
     └▲ E5011C00
      └田 S

    ② HEW上でビルド(ELF,DWALF出力)

    ③ CSIDE(PALMiCE3)上で、ELFファイルからワークスペースを作成

    ④ ワークスペースを起動すると、MPU内蔵Flash及び内蔵RAMにコードが転送される。

    ⑤ CSIDE上で PC を PowerON_Reset() に設定し。初回のデバッグを実行。

    ⑥ CSIDEを終了する前に、「ターゲットシステムの設定」で「SH74504内蔵フラッシュ」の設定を「ユーザROM」に変更し、「更新」を行う。

    ⑦ CSIDEを終了する際、「プロジェクトを保存して終了」を忘れずに設定。

    これ以降のCSIDEの起動では、MPU内蔵Flashへの書込みアクセスはバイパスされます。
    これで内蔵Flashの消耗は抑えられます。
Reply
  • フォーラム上の皆様、大変有難う御座いました。漸く期待通りの開発法が見つかりました。
    非常に低レベルでは御座いますが、一応報告させて頂きます。

    ① HEWの"Linker section setting"で、以下の様にリンカセクション設定を変更。

    Linker section setting
     ├▲ 18000800 ← 内蔵RAM上に移転
     │└田 INTHandler,VECTTBL,INTTBL,IntPRG
     ├▲ 18001800 ← 内蔵RAM上に移転
     │└田 PResetPRG
     ├▲ 18002000 ← 内蔵RAM上に移転
     │└田 P,C,C$BSEC,C$DSEC,D
     ├▲ 18040000 ← 内蔵RAM後半に移転
     │└田 B,R
     ├▲ A0000000
     │└田 RSTHandler
     └▲ E5011C00
      └田 S

    ② HEW上でビルド(ELF,DWALF出力)

    ③ CSIDE(PALMiCE3)上で、ELFファイルからワークスペースを作成

    ④ ワークスペースを起動すると、MPU内蔵Flash及び内蔵RAMにコードが転送される。

    ⑤ CSIDE上で PC を PowerON_Reset() に設定し。初回のデバッグを実行。

    ⑥ CSIDEを終了する前に、「ターゲットシステムの設定」で「SH74504内蔵フラッシュ」の設定を「ユーザROM」に変更し、「更新」を行う。

    ⑦ CSIDEを終了する際、「プロジェクトを保存して終了」を忘れずに設定。

    これ以降のCSIDEの起動では、MPU内蔵Flashへの書込みアクセスはバイパスされます。
    これで内蔵Flashの消耗は抑えられます。
Children
No Data