この記事は がじぇるねGR Advent Calendar 2021 の18日目です。
GR-ROSEのブートとプログラム書き込みの仕組みは、公式の資料がやや分かりにくかったので調査しました。
(ふつうに使うぶんにはほぼ必要ない知識です。)
まず、起動時のシーケンスを概観すると下図のようになります。
(1) ユーザーアプリの起動
通常は、スライドスイッチSW1は「R」にセットされており、電源ONするとユーザーアプリが実行されます。
(2) USBファームウェアの起動
リセットボタンを押すと、USBファームウェアが起動し、PCにはUSBストレージとして認識されます。ここにユーザーアプリのbinファイルをコピーするとユーザーアプリがマイコンに書き込まれます。
電源ON(コールドスタート)かリセットボタン押下(ウォームスタート)かの区別は、USBファームウェアがRSTSR1レジスタの値を見て判定しています。ただし、ウォームスタートであってもソフトウェアリセットの場合はユーザーアプリが起動します。これはRSTSR2レジスタの値を見て判定しています。
(3) USBブートモード
スライドスイッチSW1が「P」にセットされている場合、電源ONまたはリセットするとUSBブートモードで起動します。このモードではPCからRenesas Flash Programmer (RFP) を使ってプログラム(motファイルなどの形式)を書き込むことができます。
スライドスイッチSW1はRXマイコンのMD端子とUB端子につながっています。RXマイコンはMDがHighのときシングルチップモード(通常起動)になり、MDがLowでUBがHighのときUSBブートモードになります。
(2)でのプログラム書き込みはGR-ROSEのUSBファームウェアが提供する機能であるのに対し、(3)はRXマイコンにもともと備わっているブートプログラムの機能です。なんらかの理由でGR-ROSEのUSBファームウェアが消えてしまった場合(例えばE2デバッガを接続してプログラムのデバッグをおこなった場合)には、(3)の方法でUSBファームウェアを書き直すことができます。USBファームウェアのmotファイルはGR-ROSEの公式ページからダウンロードできます。
GR-ROSEのFlashメモリマップと起動手順
スライドスイッチSW1が「R」のとき、RXマイコンはシングルチップモードで起動し、リセットベクタ(FFFFFFFC番地)に格納されているアドレスにジャンプします。リセットベクタにはUSBファームウェアのリセットハンドラ(PowerOn_Reset_PC関数)のアドレスが格納されているので、まずUSBファームウェアが起動します。USBファームウェアは前述のようにリセット要因をチェックして、ユーザーアプリを起動するかまたはUSBファームウェアの実行を継続します。
ユーザーアプリのリセットハンドラ(PowerOn_Reset_PC関数)はFFE00000番地になるようにビルドされます。USBファームウェアは、ユーザーアプリを起動する場合にはこのFFE00000番地にジャンプします。
USBファームウェアの実行が継続された場合、PCからコピーされたbinファイルはまずUSBストレージ領域に書き込まれ、それからユーザーアプリ領域に展開され、その後ユーザーアプリのリセットハンドラにジャンプします。