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