GR-SAKURA で遊んでみる(6) 簡易ブートローダ

以前、「RX63N の内蔵 ROM への書き込み可能回数が僅か 1,000 回なので、気軽に書き込みができない」という趣旨の記事を書いた。ある程度の規模のソフトウェアになってくると、(特にデバッグ時の)ビルド回数は 1,000 を超えるだろうし、その都度 ROM の内容を書き換えていたら...

この問題は、普段のデバッグ時は F/W を RAM にダウンロードして実行する、という方法で回避するのが一般的である(当然、デバッグ完了時点では ROM に焼き込んで、リセット例外により実行されるようにしておく) 。

一応 HEW があれば、RAM へのダウンロードは可能だが、普段の環境が Windows 以外の場合、RAM 上でのデバッグのためにわざわざ Windows を起動するのは億劫な話である。

そこで、RX63N の内蔵 RAM にダウンロード可能なブートローダを作成してみた。当然、ブートローダ自身は ROM に書き込む必要はあるが、一度書き込んでおけば、後は何度でも F/W を RAM にダウンロードできる。そもそも「非 Windows 環境下で直にビルドした F/W を GR-SAKURA に書き込みたい」という需要があるかどうかは疑問だが、誰かの役に立つかも知れないのでここに置いておく。

なお、今回のブートローダは GR-SAKURA 上で動作させることを目的として作成したものだが、マルツパーツ館の MTK-RX63N でも動作することを確認している。

ビルド方法

ソースツリーを展開後、make(1) を実行する前に、config.h の以下の箇所を(必要に応じて)書き換える。

   17 #define CONFIG_SCI_CH           (0)   
   18 #define CONFIG_SCI_BAUD         (9600)

17 行目は、ユーザとの対話に使用する SCI のチャネル番号の指定である。例えば XBee を使用したいのであれば、ここを 0 -> 2 に書き換える*1。その他、MTK-RX63N で動作させる場合も 0 -> 2 に書き換える。

18 行目は非同期通信におけるボーレートの指定で、例えば 19200 baud にしたい場合は、ここを 9600 -> 19200 に書き換える。

後は、RX 向けの GNU ツールチェインに PATH が通っている状態で make(1) を実行すればよい。現状では、BSD および GNU の make(1) でビルドが通ることを確認している。

ブートローダの機能

今回作成したブートローダは、上述の RAM 実行に際して必要となる最低限の機能のみを実装している。ブートローダを ROM に書き込んだ状態で電源を投入すると、

  >

というプロンプトが表示されるので、以下のいずれかの動作を指定する。

F/W のダウンロード

書式

  rx [-c]

説明
XMODEM プロトコルを使用して、シリアル(場合によっては無線)経由での F/W のダウンロードを行う。
-c オプション指定時は XMODEM/CRC によるダウンロードを、オプション未指定時は XMODEM/SUM によるダウンロードを試みる。ダウンロード可能な F/W の形式は S-record のみである。

F/W の実行

書式

  goto <アドレス>

説明
指定アドレスからの実行を行う(つまり PC の値を指定アドレス値に書き換える)。例えば、上述の rx コマンドでダウンロードした F/W のエントリポイントのアドレスが 0x00002000 の場合は、

  goto 0x00002000

とすれば、F/W の実行が開始される。

メモリのダンプ

書式

  dump [-bwl] <アドレス> <サイズ>

説明
指定アドレスを先頭として、指定サイズ分のメモリ内容を表示する。オプションにて何 byte 単位で表示するかを指定する。

  -b 指定時 -> 1 byte 単位
  -w 指定時 -> 2 byte 単位
  -l 指定時 -> 4 byte 単位

オプション未指定の場合は 1 byte 単位での表示となる。

> dump 0x00002000 100
00002000: 7f b8 fd 7f 02 00 00 02  fd 7f 0a 00 fc 01 fd 73 |...............s|
00002010: 0c 50 22 00 00 39 39 01  39 56 01 fb 1e fe 03 08 |.P"..99.9V......|
00002020: f8 19 03 a5 fb 1e 10 00  08 ec 12 7a f2 e3 12 fb |...........z....|
00002030: 1e a2 00 08 3c 10 0e fb  1e 32 00 08 f0 18 58 12 |....<....2....X.|
00002040: fc 33 22 21 fb 75 41 21  39 a5 00 fb 1e 28 00 08 |.3"!.uA!9....(..|
00002050: f8 19 00 07 fb 1e a6 00  08 3c 10 09 fb 1e 2a 00 |.........<....*.|
00002060: 08 7a 01 66 31 39 88 00  fb 1e 20 00 08 f8 12 11 |.z.f19.... .....|
00002070: 33 c2 22 fb 1e 24 00 08  3d 10 02 fb 1e 26 00 08 |3."..$..=....&..|
00002080: f8 19 00 04 fb 1e fe 03  08 f8 19 00 a5 fb 1e 2a |...............*|
00002090: c0 08 f0 18 f0 19 f0 1a  f0 1e fb 1e 0a c0 08 f0 |................|
000020a0: 10 f0 11 f0 12 f0 16 fb  12 4c 22 00 00 66 02 fb |.........L"..f..|
000020b0: 32 50 22 00 00 43 13 7f  88 fb 1e 06 80 08 f8 19 |2P"..C..........|
000020c0: dc 05 fb 1e 02 80 08 3d  10 40 fb 1e 04 80 08 3d |.......=.@.....=|
000020d0: 10 00 fb 1e 04 73 08 3c  10 01 fb 1e 03 72 08 f0 |.....s.<.....r..|
000020e0: 14 7f a8 fb 1e 00 80 08  3d 10 01 2e 00 6e 13 fb |........=....n..|
000020f0: 2e 06 80 08 3d 20 10 fb  2e 02 80 08 3d 20 40 fb |....= ......= @.|
> dump -w 0x00002000 100
00002000: b87f 7ffd 0002 0200  7ffd 000a 01fc 73fd
00002010: 500c 0022 3900 0139  5639 fb01 fe1e 0803
00002020: 19f8 a503 1efb 0010  ec08 7a12 e3f2 fb12
00002030: a21e 0800 103c fb0e  321e 0800 18f0 1258
00002040: 33fc 2122 75fb 2141  a539 fb00 281e 0800
00002050: 19f8 0700 1efb 00a6  3c08 0910 1efb 002a
00002060: 7a08 6601 3931 0088  1efb 0020 f808 1112
00002070: c233 fb22 241e 0800  103d fb02 261e 0800
00002080: 19f8 0400 1efb 03fe  f808 0019 fba5 2a1e
00002090: 08c0 18f0 19f0 1af0  1ef0 1efb c00a f008
000020a0: f010 f011 f012 fb16  4c12 0022 6600 fb02
000020b0: 5032 0022 4300 7f13  fb88 061e 0880 19f8
000020c0: 05dc 1efb 8002 3d08  4010 1efb 8004 3d08
000020d0: 0010 1efb 7304 3c08  0110 1efb 7203 f008
000020e0: 7f14 fba8 001e 0880  103d 2e01 6e00 fb13
000020f0: 062e 0880 203d fb10  022e 0880 203d fb40
> dump -l 0x00002000 100
00002000: 7ffdb87f 02000002  000a7ffd 73fd01fc
00002010: 0022500c 01393900  fb015639 0803fe1e
00002020: a50319f8 00101efb  7a12ec08 fb12e3f2
00002030: 0800a21e fb0e103c  0800321e 125818f0
00002040: 212233fc 214175fb  fb00a539 0800281e
00002050: 070019f8 00a61efb  09103c08 002a1efb
00002060: 66017a08 00883931  00201efb 1112f808
00002070: fb22c233 0800241e  fb02103d 0800261e
00002080: 040019f8 03fe1efb  0019f808 2a1efba5
00002090: 18f008c0 1af019f0  1efb1ef0 f008c00a
000020a0: f011f010 fb16f012  00224c12 fb026600
000020b0: 00225032 7f134300  061efb88 19f80880
000020c0: 1efb05dc 3d088002  1efb4010 3d088004
000020d0: 1efb0010 3c087304  1efb0110 f0087203
000020e0: fba87f14 0880001e  2e01103d fb136e00
000020f0: 0880062e fb10203d  0880022e fb40203d

*1:但し、現状では XBee での動作確認はできていない。不慮の事故により、確認前に手持ちの XBee を壊してしまった(--;