Freescale MC68HC908QT/QY
ユーザモードにおける FLASH 書き換え

これは 2004年 2月に書いた内容を 2005年 9月に更新したものです。

フリースケールセミコンダクタ社のワンチップマイコン MC68HC908QT/QY は ANSI 準拠のC言語を備えた優秀な開発環境 (MetroWerks CodeWarrior) が無料で入手できること、特別なライターを使わなくてもインサーキットデバッグや FLASH 書き込みが可能ということから個人的に非常に興味を持っている製品です。(QT1/QT2/QT4は8ピン、QY1/QY2/QY4は16ピンのデバイスです。ここでは QY4を使って説明しました。)

このページでは HC908QT/QY マイコンに UserMonQT4.asm というユーザモニタを書き込み、M68DEMO908QT4 デモボード と同様の使い勝手を得る方法について説明しています。なお、フリースケールセミコンダクタ社がアプリケーションノート AN2305 で公開している UserMonQT4.asm は低電圧の HLC908Q 各デバイスや新製品の 908QB4/QB8/QY8 には使えません。


フリースケールセミコンダクタのホームページからダウンロードした和文データシート mc68hc908qy4j-r1.pdf によると、マイコンのモニタ動作に関するモードには4つの種類があると書かれています。(p.94)

1. VTSTモニタモード
2. 強制モニタモード(外部クロック)
3. 強制モニタモード(内部クロック)
4. ユーザモード(←これはモニタモードではありません)

1〜3がモニタモード(デバッグや書き込みを行う)で、4はマイコンの普通の動作状態です。
(和文データシートは英文データシートの Rev.1 を翻訳したもので内容が少し古くなっています。最近の英文データシートではこれらの各モードの呼び方が変わりましたので両方を見比べるときはご注意ください。)

1〜3いずれも特別なライター無しで動かすことが可能ですが、それぞれメリット、デメリットがあるので簡単にまとめます。まずデメリットと言うか各モードの制限事項から。

1.のモードに入るには高電圧が必要。クロックは外部 9.8304MHz 固定。
  自由に使えないポートは PTA0,1,2,3,4,5 となる。(このことは QT4 で
  このモードを利用する場合、自由に使えるポートが無いために書き込みは
  できてもインサーキットデバッグはできないことを意味する。QY4 だと
  PTB0-7 がインサーキットデバッグで使える。)

2.のモードに入るにはリセットベクタ $FFFE,$FFFF がブランクであること。
  クロックは外部 9.8304MHz 固定。自由に使えないポートは PTA0,2,5 となる。
  リセットベクタをブランクにするということは電源再投入でユーザモードで
  動かすことができない。インサーキットデバッグ用のモードと言える。

3.2の制限事項と同様だが、自由に使えないポートは PTA0,2 となる。
  また、内部オシレータのキャリブレーションが正しく行われていることが必要。
  2と同様の理由でインサーキットデバッグ用のモードと言える。

4.のモードに入るにはリセットベクタ $FFFE,$FFFF に何か値が書き込まれて
  いることが必要。

次に、それぞれのモードのメリットは下記のようになります。

1.リセットベクタに何か値を書き込んだ後でも利用可能なモード。
  内部オシレータのキャリブレーションに失敗した場合でも利用可能なモード。
  また、リセットベクタに何か値を書き込むことができるという理由から、
  いわゆるプログラム書き込み、FLASH 書き込みに使える。(電源再投入で正常な
  リセットベクタによってユーザモードでの動作が可能となる。)

2.内部オシレータのキャリブレーションをしていなくても利用可能なモード。
  1.に比べると自由に使えるポートが3本増える。(QT4 でも3本を使って
  インサーキットデバッグ可能。)

3.外部クロックを使わないコンパクトな構成でのインサーキットデバッグが可能。
  1.に比べると自由に使えるポートが4本増える。(QT4 でも4本を使って
  インサーキットデバッグ可能。)

4.モニタモードのための制限が無い。
  (当たり前だが QT4 で6本全て、QY4 で14本全てを使った動作が可能。)

ここまで理解してきて、1は確かに必要なモニタモードと言えます。また、1ではインサーキットデバッグ時に使えるポート数や外部クロックの制限ため、場合によっては2や3のモニタモードのメリットがあると考えられます。しかし最終的にはソースコードのリセットベクタを変更し、1を使って書き込みをしてやる必要があるわけで、個人的には2や3がそれほど有用なものだとは思えないのが正直なところです。
ところで、私はすでに(個人的に)もっと魅力を感じる方法を知っています。


その方法とは、他でもないフリースケールのホームページからダウンロードできるアプリケーションノート AN2305 に基づく方法で、前述の1〜4のモードのうち、なんと4のユーザモードを使ってインサーキットデバッグおよび FLASH 書き換えを行おうというものです。この場合のデメリット(制限事項)とメリットを簡単に書いておきます。

5. ユーザモード(内部クロック)によるインサーキットデバッグおよび FLASH 書き込み

デメリット(制限事項)

5.の方法を使うには AN2305 で示される UserMonQT4.asm(QY4を使うときもこの
  ファイルで良い)がすでに書き込まれていることが必要。リセットベクタや
  その他の割り込みベクタはそのソースで規定された値が書き込まれていること。
  自由に使えないポートは PTA0 である。リセット解除時に PTA2 がHかLかに
  よってモニタ動作をするかスタンドアロン動作をするか決定される。(決定後は
  PTA2 は自由に使用可能。)また、内部オシレータのキャリブレーションが正しく
  行われていることが必要。

メリット

5.外部クロックを使わないコンパクトな構成でのインサーキットデバッグが
  可能。1.に比べると自由に使えるポートが5本増える。(QT4 でも5本を使って
  インサーキットデバッグ可能。)ユーザが作ったプログラムのリセットベクタや
  割り込みベクタは本来のベクタ位置ではない別の場所に格納するため、1のモード
  を使わなくても5の動作で FLASH 書き換えが可能。
  また、リセット解除時にモニタ動作かスタンドアロン動作か決定できるので、
  インサーキットデバッグが終わった時点でプログラムを変更すること無く電源
  再投入により(PTA2がHのとき)スタンドアロンでの通常動作が可能である。

一工夫・・・ユーザモニターを使う場合(5の方法)はリセット解除時に PTA2 の
  レベルを見るので、 PTA2(入力専用ポート)を普通の入力ポートとして設計すると
  起動で失敗することがあるでしょう。 5の方法のときはこのポートはあまり
  使いたくないのですが、ピン数が少ないので使う場面も出てくると思います。
  その場合、マイコンの外でプルダウンしてはいけません。リセット後の PTA2
  判定時には 30kΩ程度の内部プルアップを有効にしていますから、PTA2 に
  繋がる回路はハイインピーダンスにしてユーザプログラムでも明示的に内部
  プルアップを有効にするか、またはマイコン外部でプルアップするようにします。
  そしてユーザモニターモードの切り替えの操作のために、PTA2 をモード切り替え
  スイッチS1でL側に引っ張ることができるようにすれば良いのです。

上記5の方法を実際に利用するためには、次の手順が必要です。

 まずフラッシュメモリの $FFC0 番地に内部クロックのキャリブレーション値が正しく書き込まれているか確認します。読み出したトリム値が適正なものかどうか(手違いで他のマイコンのトリム値を書き込んだりしていないか)を調べたいときは適当なテストプログラムを1のモニタモードでメインROMに一旦書き込んでからスタンドアロンで動かし、ポート出力の様子を見れば判ります。出力周期が正確でない場合は、そのズレから補正値を逆算してテストプログラムに反映し、またポート出力を見る、という作業を3回くらい行えばピッタリした補正値が見つかります。これをメモしておきます。
( わざわざそうしなくても他のページで紹介している HC908QTQYオートキャリブレータ を使うと素早く適正な値が求められます。)
 次に、AN2305 のソースファイル UserMonQT4.asm をプロジェクトとして用意します。ソースファイルを開いて、末尾に先ほどの補正値を書き込みます。準備ができたら、これを1のモニタモードでマイコンに書き込みます。(
他のページで紹介している HC908Q プログラマ を使うと素早く書き込めます。)
 これでもう1の方法は必要無くなりました。あとはユーザ自身が作ったプログラムを5の方法で書き込んだり、インサーキットデバッグをすることができます。注意点としては、リセットベクタおよび各割り込みベクタの置き方が普通とは違う、ということです。


簡単ですが「Freescale MC68HC908QT/QY ユーザモードにおける FLASH 書き換え」の記事を終わります。 ちなみに紹介済みの M68DEMO908QT4 デモボードでも、ここで述べた5の方法が使われています。(これは簡単なボードなので、逆に1〜3のモニタモードと4の単純なユーザモードが利用できません。)

個人的には、ターゲットボードが1の方法と5の方法が利用できるようになっていれば便利だな、と思っています。(なお1〜5の番号や、モニタ動作、スタンドアロン動作といった言葉は便宜的に付けただけのものです。)


このホームページで紹介した内容を実施する場合は全て自己責任において行っていただきますようお願いします。
不明点や質問、感想などはこのホームページの掲示板へお願いします。