GR-ROSEのブートとプログラム書き込みの仕組み

この記事は がじぇるねGR Advent Calendar 2021 の18日目です。

GR-ROSEのブートとプログラム書き込みの仕組みは、公式の資料がやや分かりにくかったので調査しました。
(ふつうに使うぶんにはほぼ必要ない知識です。)

まず、起動時のシーケンスを概観すると下図のようになります。

f:id:licheng:20211211111043p:plain:w440

(1) ユーザーアプリの起動

通常は、スライドスイッチSW1は「R」にセットされており、電源ONするとユーザーアプリが実行されます。

f:id:licheng:20211211110451j:plain:w320

(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ファームウェアの実行を継続します。

f:id:licheng:20211210225837p:plain:w400

ユーザーアプリのリセットハンドラ(PowerOn_Reset_PC関数)はFFE00000番地になるようにビルドされます。USBファームウェアは、ユーザーアプリを起動する場合にはこのFFE00000番地にジャンプします。

USBファームウェアの実行が継続された場合、PCからコピーされたbinファイルはまずUSBストレージ領域に書き込まれ、それからユーザーアプリ領域に展開され、その後ユーザーアプリのリセットハンドラにジャンプします。