かみやんの技術者ブログ

主にプログラムの話です

AKI-H8-3069F Toppers/JSPでROMに書き込む

昨日のエントリで、2)の「H8簡易モニタを修正して、PWM信号の初期化を追加する」は、DRAM転送とバッティングしているかも?ということで必然的に却下になったので、1)のROMに書き込むをやってみました。

ROM書き込みについては、<jsp>/doc/h8.txtに説明がある。

  1. jsp>/config/h8/akih8_3069f/Makefile.configのDBGENV=の定義をすべてコメントアウトする
  2. 自分のプロジェクトのMakefileのDBGENV=の定義もすべてコメントアウトする
  3. コンフィギュレーションツールをビルドする
    1. cd <jsp>/cfg;make depend;make;
  4. カーネルをビルドする
    1. cd kernel_lib;../jsp/configure -C h8 -S akih8_3069f;make depend;make libkernel.a;
  5. 自分のアプリをビルドする
    1. cd <app_dir>;make clean;make;
  6. AKI-H8/3069F-LANのディップスイッチをFlash書き込みモード ON-ON-OFF-ONにする
  7. h8writeでFlash ROMへ書き込む
    1. H8のリセットボタンを押す
    2. h8write -3069 -f20 jsp.srec COM6
    3. -f20はCPUのクロック周波数(MHz)。
  8. ディップスイッチをモード5(実行モード) ON-OFF-ON-OFFにする
  9. H8をリセットすると起動

h8writeの実行ではまりました。h8writeを起動しても何もメッセージが出ず。いろいろ調べたところ結局のところ、最初USB-HUB経由でH8とつないでいてCOM11だったのだが、直接つないでCOM6になって書き込み成功しました。COM6でも最初1〜2回はエラーでいまいち原因が分かりません。COM11という数字が2桁なのが悪いのか、USB-HUB経由なのが良くないのか。USB-Serial変換ケーブルの相性なのか。
書き込み時間は1分ほど(65kbyte)でした。RAMへの転送が20秒ぐらいだったので、3倍ぐらいかかるようです。(FlashはErase処理、Write処理があるからか)
今まで、ロボット起動するたびにRAMへ20秒ぐらいかけて転送していたので、ROMでの起動は一瞬なので楽といえば楽。ただ、プログラムの修正をする度に書き込みはやや面倒。あとH8のFlashは100回ぐらいしか書き込めないらしいので不安。

昨日のエントリのコメントでもやねさんからRAMロード中に暴走するのは、PWM信号線がオープンだからプルアップすればよいでしょうとアドバイスをもらったので、やってみたいと思います。たぶん正解な気がします。
DRAMとバッティングしている?と昨日書いたエントリーですが、バッティングしてないかもとも思えてきました。

  • DRAMのアクセスの度にバッティングしたポートを使っているとすると、そもそも自分のプログラムはRAMに置かれているので、プログラムの実行中に暴走しないのはおかしい

となると可能性としては、

  • DRAM転送に使っているのが正しい場合、DMAのように効率転送をするときにバッティングしていて、自分のプログラムの起動後はバッティングしていない
  • H8簡易モニターの初期化コードでDRAM転送の初期化を行っているが、実はDRAM転送に使っていない。または、たまたま自分の使っている97番ピンは使われなかった

バッティングしていないかもと思ったのは、PWM信号を試しに5Vに接続したときは、プログラムロード中に暴走しませんでした。ということは、DRAM転送に使われていないのではないか?と。(ただし、5VにつないだせいでDRAM転送が失敗している可能性もあるが)

とりあえずプルアップ抵抗を入れてみたいと思います。抵抗値は、1kΩとかの大きめでよいのかな。