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

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

C8051F300-GMRは旧い石ですが、10年位前にトラ技に紹介されたときから一度は使ってみたい石でした。

命令セットはMCS8051互換ですが、独自の改良がなされてMCS8051よりも高速に作動します。


私が8051のアセンブラのソースコードにはじめて触れたのは、これも10年位ですが、BASIC-52インタープリタを

他のマイコンに移植したときだと記憶しています。

MCS8051のコードは、Z80やMC6801のコードに慣れていた私には非常に新鮮に映りました。

なぜならMCS8051のコードは、8ビットの制約の中で至る所にプログラムコードサイズを小さくするための工夫がなされていたからです。

8ビットでもここまで出来るのかと当時は非常に感心したものでした。


ところで、最近このチップを搭載したプリント基板が250円で購入できることを知り、早速注文しました。

この基板を用いていろいろとゴニョゴニョしたところ何とかブートローダー作成に成功しましたのでご紹介します。

http://sourceforge.net/p/tinypicbootload/discussion/general/thread/5fb6d6fc/

このプロトタイプでは通信部分をソフトウエアシリアルで実現しています。
UARTを用いずソフトウエアシリアルにした理由は使用するポートの自由度を向上させるためです。

img_20140812-005439.jpg
img_20140812-005457.jpg


使ってみて、雑感

①ブートローダーのファームウエアのサイズは196バイトとなりました。
ソフトウエアシリアルを使用して、フラッシュメモリのみの書き込みで196バイトというのはだいたいPIC16F並のコード効率と言えますが、この原因の大半はフラッシュメモリプログラミングの効率の悪さに起因しています。
(ブートローダーのメインループはATTINY並のコード効率)

②フラッシュ書き込みの制約
C8051F300-GMRのフラッシュ書き込みは設計が旧いため、以下の制約があります。
1.更新したいアドレスのフラッシュメモリは事前に消去されていなければならない。
データが書き込まれているアドレスに上書きすると、ストールする、または異なるアドレスにデータを書き込む。
(これはC8051F300-GMRのみの現象かも知れません。他は試していないので...)
2.書き込みはバイト単位で行えるが、消去ページが512バイトと大きい。また内蔵RAMの容量も小さい(256バイト)ので、(消去)ページ 全体のバックアップを取るのが難しい。

③相対サブルーチンコール命令がない。
  PIC16Fでもそうですが、これが無いとコード効率は下がります。