1 / 21

AP-SH2F-9A (SH7149) を ROM デバッグするためのメモ

AP-SH2F-9A (SH7149) を ROM デバッグするためのメモ. 初版 2007/10/05 冨山 隆志. はじめに. 本資料の目的 ROMデバッグの際に必要な設定や手順を解説することで、他の人が苦労しなくて済むようにする。 背景 JTAG-ICE を使って RAM 上でデバッグしながら動くようになったプログラムを ROM 化したかった。 しかし、必要な設定について説明した資料が見つからず、やたらと苦労した。 ROM 化できたと思ったら今度はプログラムの動作が設計から外れており、 ROM 上でデバッグすることになった。

bracha
Download Presentation

AP-SH2F-9A (SH7149) を ROM デバッグするためのメモ

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. AP-SH2F-9A (SH7149)をROMデバッグするためのメモ 初版 2007/10/05 冨山 隆志

  2. はじめに • 本資料の目的 • ROMデバッグの際に必要な設定や手順を解説することで、他の人が苦労しなくて済むようにする。 • 背景 • JTAG-ICEを使ってRAM上でデバッグしながら動くようになったプログラムをROM化したかった。 • しかし、必要な設定について説明した資料が見つからず、やたらと苦労した。 • ROM化できたと思ったら今度はプログラムの動作が設計から外れており、ROM上でデバッグすることになった。 • せっかく判ったことを忘れてしまわないよう、資料にまとめて、ついでに公開することにした。 AP-SH2F-9A ROMデバッグメモ

  3. 開発環境 AP-SH2F-9A ROMデバッグメモ

  4. 【要求】 • デバッグ作業を効率化するために、JTAG-ICEを使ってRAM上にプログラムを展開して動作を確認したい。 • プログラムをROMに書き込む場合でもRAM上でデバッグする場合でも、同じようにプログラムが動いて欲しい。 • 設定忘れを防ぐために、必要最小限の手数でROM / RAM を切り替えられるようにしたい。 AP-SH2F-9A ROMデバッグメモ

  5. セクションについて ヒープ領域 ・・・ プログラムから動的に割り当てられるメモリを格納する領域。 スタック領域 ・・・ 関数内で使用される変数や関数の引数などに使用されるメモリを格納する領域。 AP-SH2F-9A ROMデバッグメモ

  6. セクション割付(RAMデバッグ時) RAMデバッグ時は、ROMの代替として256KBを割り当てる。 ここにアクセスすると同じものが見える! ここにアクセスすると同じものが見える! AP-SH2F-9A ROMデバッグメモ

  7. イメージアドレス • 必要十分なビットだけをデコードするために、アドレスの途中のビットを省略する手法がよく使われる。 • アドレスデコードを省略すると、異なるアドレスでありながら同じ場所へアクセスできる。 • 本来配置しようとしたアドレスと異なるアドレスをイメージアドレスという。 AP-SH2F-9A ROMデバッグメモ

  8. SH7149はCS0とCS1の2つの空間でそれぞれ最大 1MB までの外部メモリをサポートしている。 1MB(= 220Byte)のアドレス(0x00000~0xFFFFF)にアクセスするには、A0~A19の20本のアドレス端子が必要。 一方、容量が512KBのRAMからすれば、アドレス端子は19本あれば512KBの全アドレスにアクセス可能。 SH7149のA19はRAMに繋がっていない。 =RAMからみると、0x100000にアクセスするのも0x000000にアクセスするのも同じこと。 512KB 高速SRAM AP-SH2F-9A ROMデバッグメモ

  9. セクション割付(ROM化時) もったいないけど未使用 AP-SH2F-9A ROMデバッグメモ

  10. 要求に対する解 • CPUボードのディップスイッチを切り替えるだけで、 RAMデバッグ時とROM化時で同じセクション設定を使用できる。 AP-SH2F-9A ROMデバッグメモ

  11. セクションの割り付け方(HEW4) ビルド→ Linker → Section を選択 .dataや.bssなどを 0x02040000~に割り当てる 処理速度を確保するために .stack は内蔵SRAMに割り当てる AP-SH2F-9A ROMデバッグメモ

  12. ROM化時の重要ポイント • key code 設定 • コンパイラオプション • リンカオプション AP-SH2F-9A ROMデバッグメモ

  13. key code (1) • SH2はキーコードと呼ばれる4Byteの値でCPU内蔵Flash ROMを保護している。 • JTAG-ICEを接続する際、JTAG-ICEはキーコードをCPUに通知する必要がある。 • CPUに書き込まれているキーコードと一致しないと、内蔵Flash ROMが全消去される。 参考 http://www.apnet.co.jp/support/an/AN801.pdf AP-SH2F-9A ROMデバッグメモ

  14. key code (2) SH7146, 7149の場合 ここのH’00000040 から4Byteがキーコードになる。 SH7146グループハードウェアマニュアルより AP-SH2F-9A ROMデバッグメモ

  15. キーコードの書き込み方 プロジェクト生成時にツールが自動生成したファイルから、vects.c を開く。 ベクタテーブルの16番に適当なキーコードを書き込む。 0xFFFFFFFF以外なら何でもよい。 参考 http://www.aone.co.jp/tools/verupAH/SH2_HEW40_KPIT_Default.pdf AP-SH2F-9A ROMデバッグメモ

  16. 再びセクションの話。 ROM化する場合は、CPU起動時に.dataセクションのデータに初期値を入れてあげる必要がある。 AP-SH2F-9A ROMデバッグメモ

  17. .dataセクションの初期化 • .dataセクションの初期化は start.asm の中で行う記述がある。 • しかし、デフォルトのままでは.dataセクションの初期化が実行されない。 初期化を実行するには、 コンパイラオプション と リンカオプション の設定が必要。 AP-SH2F-9A ROMデバッグメモ

  18. コンパイラオプション ROMSTART (value = 1) のマクロ定義を追加 参考 http://www.aone.co.jp/tools/verupAH/SH2_HEW40_KPIT_Default.pdf AP-SH2F-9A ROMデバッグメモ

  19. リンカオプション _mdata は.data の初期値 を格納した領域のラベル _mdata を追加 参考 http://www.aone.co.jp/tools/verupAH/SH2_HEW40_KPIT_Default.pdf AP-SH2F-9A ROMデバッグメモ

  20. .dataの初期化が行われる場所 !load data section from ROM to RAM only if ROMSTART is defined #if ROMSTART ! initialise sections mov.l edata,r1 ! edata in r1 mov.l mdata,r2 ! mdata in r2 mov.l data,r0 ! data in r0 cmp/eq r0,r1 bt start_1 nop start_l: mov.b @r2,r3 !get from src mov.b r3,@r0 !place in dest add #1,r2 !inc src add #1,r0 !inc dest cmp/eq r0,r1 !dest == edata? bf start_l nop start_1: #endif // ROMSTART コンパイラオプションで設定した リンカオプションで設定した start.asm の一部 AP-SH2F-9A ROMデバッグメモ

  21. おわりに • まとめ • RAMデバッグ時とROM化時を切り替える際、作業手数が最小になるための設定方法について説明した。 • イメージアドレスを利用すると、ROM/RAMを切り替えてもセクション設定を変えずに済む。 • ROMデバッグ時に必要なkey code はソースコード中のベクタテーブルに書いてROMに転送する。 • .dataセクションを初期化するためにはコンパイラオプションとリンカオプションの設定が必要。 • 私の理解に基づいて書いたため、間違っている場所があるかもしれません。気付いた場合はご指摘ください。 AP-SH2F-9A ROMデバッグメモ

More Related