楽天市場
[無料でホームページを作成] [通報・削除依頼]

番外 MSP430 タイニーブートローダー

TIのMSP430用のブートローダーも作成しました。

開発環境としてMSP430LaunchPadを使用。

MSP430はRISCの石なので、コードの短縮が難しいと考えていたところ、

FlashのInfo領域なる記述が目にとまりました。

ここにコードを記述すればいいんじゃね、ということでやってみました。

参考ページ
http://e2e.ti.com/group/jp/f/969/t/283243.aspx

Info領域BCDを使用します。64x3=192バイト

Info領域の記述だけではコードが不足するのでメイン領域にはユーザープログラムへのベクター
とソフトシリアルサブルーチンを配置します。

最終的にファームウエアのサイズは136+192(Info領域)bytesとなりました。

http://sourceforge.net/p/tinypicbootload/discussion/general/thread/d5d6711b/
Bug Fix
http://sourceforge.net/p/tinypicbootload/discussion/devices/thread/e3e646c0/#749f

img_20140812-183151.jpg
img_20140812-183215.jpg


使ってみて、雑感

①MSP430の命令のうち相対命令とインデックスを組み合わせた命令はよく出来ています。
たとえば以下の命令はフラッシュ領域からRAMへとデータをコピーする部分ですが、
フラッシュ領域の先頭BLDTOPとRAM領域の先頭BUFTOPを指定することで
レジスタを1個のみ用いて広域のオフセットが実現できます。

copy_to_RAM_48W:                                            ; copy Flash to RAM 48 words
           MOV.W   #BLDTOP,R15                                ; R15 = #BLDTOP
$1       MOV.W    @R15+,BUFTOP-BLDTOP-2(R15)      ; [0xFF80,0xFFDF] --> [0x0200,0x025F]
           CMP.W    #BLDEND,R15                                ; R15 = #BLDEND ?
           JNE         $1                                                ; loop

②演算に使用できるレジスタが多い。
ARMのTHUMB命令では演算に使用できるレジスタがR0からR7の8個でしたが、MSP430ではR4からR15まで使用できます。

③Info領域をダンプしてみたところ、InfoAの領域で使用しているのは数バイトなので、
ハードウエアUARTを搭載した石ではすべてをInfo領域に記述することも可能と思われます。