AP-SH4-1A SRAMにプログラムをダウンロードして実行する

はじめに

アルファプロジェクトのSH-4ボード製品AP-SH4-1AにはフラッシュROMが搭載されており、付属の専用フラッシュROM書き込みソフト(以下、FLASHダウンローダ)を用いてプログラムを書き込み実行することができます。 またSRAMも搭載されており、JTAG(H-UDI)デバッガを使ってSRAMにプログラムを転送して実行及びデバッグを行うこともできます。

しかしH-UDIデバッガは1万円以上と高価です。付属のマニュアルに書かれている範囲では、H-UDIデバッガを用いない場合、ユーザープログラムはフラッシュROMに書き込んでから実行しなければなりません。プログラム転送に掛かる時間以外にフラッシュROMへの書き込み時間が掛かり、頻繁にプログラムを変更する場合は不便です。

そこでシリアル通信経由でSRAMにプログラムをダウンロードして実行する方法を考えました。

まだ不完全であり動作を保証することはできませんが参考になれば幸いです。

手順

  1. SSW1をFLASH側にし、簡易モニタープログラム(後述)をフラッシュROMに書き込みます。
  2. SSW1をFLASH側にしたままリセットし、簡易モニタープログラムを起動します。
  3. ターミナルソフトを用いて実行したいユーザープログラムをSRAMに転送します。
  4. リセットスイッチを押しながらSSW1をSRAM側にし、リセットスイッチを離すとユーザープログラムが実行されます。

1.は最初の1回だけ必要な作業です。

簡易モニタープログラムについて

概略

プログラムのロード及び実行のみの機能を持つプログラムです。マイコンの状態を確認するような機能はまだなく、SRAMダウンローダ等と呼ぶのが適当かもしれませんが慣例的にモニタープログラムと呼んでいます。

製品付属のFLASHダウンローダはFLASH ROMの先頭に収められており、0x10000以降にユーザープログラムを書き込みます。また、書き込み終了後ユーザープログラムを実行する際には、0x10000へジャンプしてユーザープログラムを呼び出すようになっています。プロジェクトの設定を変えずにSRECファイルをそのまま使えるようにするため、(また、起動時の処理をそのまま流用するため)この仕組みをそのまま用いました。

ボード上のSSW1を切り替えるとSRAMとフラッシュROMの番地を入れ替えることができます。これを用いて FLASHダウンローダが0x00000から、ユーザープログラムが0x10000から始まっているというROMの場合と同じ状況をSRAMで再現しました。

処理説明

まだ試験的に運用しているにすぎず、プログラムを公開できる状態ではないため行うべき処理のみを説明します。

まず、FLASH ROMの内容をSRAMにコピーします。これによりFLASHダウンローダがSRAMにコピーされます。

memcpy(SRAM_BEGIN, FLASH_BEGIN, 0x10000);

通常、SRAM_BEGINは0x10000、FLASH_BEGINは0x00000です。

続いて、ユーザープログラムをSRAMにダウンロードします。 プログラムは0x10000から始まるようにする必要があります。AP-SH4-1A付属のサンプルプログラムのプロジェクトはそのように設定されています。

srec(.mot)ファイルのダウンロードには京都大学機械研究会が公開しているH8/3069用モニタープログラムのcmd_load_srec.cを改造して使用しました。

注意:このままでは実行できません。

SRECファイルに書かれているものより0x4000000だけずらしたアドレスに書き込んでいます。これはSRAMとFLASHを切り替えることを見越して切り替え後のアドレスが正しくなるようにするためです。

注意事項

あとがき

本来は機械研H8モニタのような形にしてスイッチの切り替えなしにユーザープログラムを実行できるようにしたいところです。

類似製品のAP-SH4-0AでしたらAAFぱ研でLinuxによるSH4プログラム開発という記事があります。当初はこれを利用しようとしていたのですがうまくいかず、ロボットコンテストの時期が迫っていたため考えた苦肉の策がこの簡易モニターです。今後またこのボードを使うことがあればより良い開発環境を構築したいと思っています。

山口 辰久