2002-5-14

フリーのツールでC8051F30x用ソフトを開発しよう!

自作の書き込み装置を紹介します。
書き込みソフトはLinuxとWindowsに対応しています。
もちろんソースコードも公開しています。


米粒マイコン

C8051F300

Cygnal社のC8051F30xシリーズという、50円玉の穴の中にすっぽり入ってしまうほど小さいマイコンがあります。8051コアを搭載し、8Kバイトのフラッシュメモリ、256バイトのRAM、A/Dコンバータ、UART、タイマ、温度センサまで付いています。そればかりか25MHzのオシレータを内蔵しているので、3Vの電源さえあればマイコンとして機能してしまいます。日本で購入するには、Cygnal社の通販、または三洋電機の通販を利用できます。

Cygnal社が用意している開発キットはなかなか良くできているのですが、いろいろ問題があります。

そこで、アプリケーションノートのAN027とC2インターフェース仕様を参考にして、書き込みツールを制作してみました。

とはいっても、純正開発ツールで、Cのソースレベルデバッグまでできてしまうのも非常に便利です。これを使うためだけにも購入する価値はあると思います。

書き込み装置

装置全貌
開発の様子
部品面
ハンダ面

実体配線図

回路図

C8051F30xに接続するケーブルはGNDとクロックとデータの3本が接続できればいいのですが、10ピンのコネクタを使用し、純正書き込みツールと同じピン配置にしています。

主な部品表

マイコン AT90S2313 1  
シリアルI/F ADM232A 1  
セラミック発振子 4MHz 1  
三端子レギュレータ 78L05 1 5V用
三端子レギュレータ 7202L33 1 3.3V用
積層セラミックコンデンサ 0.1μF 6  
電解コンデンサ 10μF 1  
ダイオード 1N4002 1

適当な整流用なら何でも可、省略も可

LED   1 お好み
抵抗 470Ω 1 LED用
基板   1 秋月電子通商ガラスエポキシスルーホール基板推奨
スイッチ   1 基板用トグルスイッチ
ICソケット 20ピン 1 AT90S2313用
ICソケット 16ピン 1 ADM232A用
ACアダプタ 9V 1  
ACジャック   1  
コネクタ シリアルケーブル用 1 D-SUB 9pin 等
コネクタ C8051F30x接続用 1 最低限 GND と C2CLK と C2DAT の3本が接続できること。
シリアルケーブル   1  
スズメッキ線      
ウレタン線      

ファームウェアと書き込みソフト

最新版
2002-4-27

c8051f30.tar.gz AT90S2313ファームウェア、書き込みソフト、ソースコード
(md5sum : 9871eb75ebb3097cd8292f37d126ecba)

c8051f30.exe.win32.bin Windows用書き込みソフト・コンパイル済みバイナリ
(md5sum : 1be13a2a2348d4bfe00c2719b08652dd)

非圧縮実行形式ファイルですので、ディスクに保存したら、ファイル名を c8051f30.exe に変更してください。

c8051f30.linux.bin Linux用書き込みソフト・コンパイル済みバイナリ
(md5sum : d3046c93c3621cffea3d6edd8dad755a)

非圧縮実行形式ファイルですので、ディスクに保存したら、ファイル名を c8051f30 に変更してください。


  • Windows対応
  • 些細なバグ取り
  • 表示メッセージを修正
旧版
2002-4-26

c8051f30.tar.gz AT90S2313ファームウェア、Linux用書き込みソフト、一式

  • 信号タイミングを改善。
  • 書き込み中に割り込み処理が起きないように通信方法を変更。
  • 最初の16バイトの書き込みでエラーになったときは、リトライを行わずに終了してしまっていたのを修正。
  • 通信速度を9600bpsから19200bpsに変更

このアーカイブファイルを展開すると、c8051f30というディレクトリの下に、AT90S2313ファームウェアとLinux用書き込みソフトのソースコードが作られます

まず最初に、ファームウェア c8051f30/c2avr/c2avr.hex をAT90S2313に書き込んでください。

次に、書き込みソフトのインストールと実行の準備をします。

$ tar zxvf c8051f30.tar.gz
$ cd c8051f30/tool
$ make
$ su
# make install
# chmod a+rw /dev/ttyS0
# exit

上記の通り、シリアルポートのアクセス許可を忘れずに設定してください。装置を /dev/ttyS0 以外に接続する場合、c8051f30コマンドの実行時に --serial /dev/ttyS1 のように指定する必要があります。

使い方

接続テスト

書き込み装置の動作確認をします。

$ c8051f30 -i

デバイスID = 0x04 と表示されれば、C8051F30xマイコンに書き込み可能であることを示しています。

書き込み

後述の開発ツール(SDCC)が生成するインテルHEXファイルをフラッシュメモリに書き込みます。

$ c8051f30 -w -f hexfile.ihx

または、標準入力から読み込むこともできます。

$ c8051f30 -w <hexfile.ihx

読み込み

フラッシュメモリを読み込んで、インテルHEX形式で出力します。

$ c8051f30 -r >hexfile.ihx

デバイス消去

フラッシュメモリを消去します。書き込み時には自動的に消去されますので、このコマンドを使うことはあまり無いでしょう。

$ c8051f30 --device-erase

改造

書き込み装置の作例では、AT90S2313の動作クロックを4MHzとしていますが、より高速な発振子を使用することで、書き込み速度を向上させることができます。発振子は3.6864MHz~11.0592MHzの範囲のうち、できるだけ (CLOCK / 16 / 19200) が整数となるような周波数を選びます。4MHzで計算すると割り切れませんが、誤差が充分に小さいので問題ありません。6MHzや10MHzでは誤差が大きすぎるので使用できません。

4MHz以外のクロックを使用するには、ファームウェアを再コンパイルしなければなりません。これには avr-gcc が必要です。ディレクトリ c8051f30/c2avr に移動して、エディタでconfig.hを開きCLOCKの定義を変更してください。makeすると新しい c2avr.hex が作られます。

書き込み装置とホストPC間は19200bpsで通信します。この通信速度を変更するには、config.hのBAUDRATEの定義を変更し、再コンパイルしてください。もちろん (CLOCK / 16 / BAUDRATE) ができるだけ整数となるように、クロックと通信速度の組み合わせを選びます。当方では3.6864MHzで115200bpsが正常動作することを確認しています。ただし、通信速度を変更しても、期待するほどの御利益はありません。

書き込みソフトは19200bpsを前提として動作します。これ以外では通信速度を明示しなければなりません。以下は115200bpsでフラッシュメモリから読み込む例です。

$ c8051f30 --speed 115200 -r

セラミック発振子ではなく水晶発振子を使用する場合、基板上の部品のレイアウトを若干修正する必要があります。7202L33を邪魔にならない場所に移動してください。たとえばこんな感じです。

78L05と7202L33で、それぞれ5Vと3.3Vの電源を作っていますが、3.3V動作が可能なシリアルトランシーバ(MAX3232やSP3232等)を使って、電源を3.3Vに一本化してもいいでしょう。実際には5V用のADM232Aでも、3.3Vでそれなりに動いてしまうようなので、アマチュア的にはそれで充分のような気がします。あと、AT90S2313-10も本来は4V以上で使用することになっていますが、今のところ特に問題はないようです。Cygnal社の開発キットは書き込み用コネクタから3.3Vの電源が出ていますので、これを利用すれば書き込み装置側の電源を省略できます。たとえばこんな感じです。

開発ツール

アセンブラとCコンパイラはSDCCを利用します。SourceForgeのダウンロードページからダウンロードしインストールしてください。

サンプルプログラム

各プログラムは以下のようにしてコンパイルと書き込みを行います。

$ tar zxvf example.tar.gz
$ cd example
$ make
$ make write

書き込みが終わったら、C8051F30xをリセットしてください。書き込みソフトでリセットすることもできます。

$ c8051f30 --reset

LED点滅プログラム

blink.tar.gz

P0.2ピンのON/OFFを繰り返します。純正開発環境に含まれているサンプルプログラムと同じです。

2002-2-1 カウンタに設定する16ビット値の上位と下位が逆になっていたため、点滅速度が正しくなかったのを修正しました。

シリアル通信プログラム

serial.tar.gz

P0.5(RXD)から受信したシリアルデータをP0.4(TXD)に返すだけの通信プログラムです。書き込みソフトに簡易ターミナル機能が組み込まれているので、これで動作テストが行えます。

$ c8051f30 --speed 9600 --terminal

キー入力したとおりにモニタに表示されれば正常です。9600bps, 8bit, NoParity 専用です。

2002-1-22 不要なコードを削除し忘れていたので修正しました。関数を一つ削除しただけで、基本的には何も変わっていません。

温度測定プログラム

temperature.tar.gz

内蔵温度センサを利用するサンプルプログラムです。1秒間に1000回測定して、256回の測定毎に平均値をシリアル出力します。

$ c8051f30 --speed 9600 --terminal

開発メモ

SDCCで開発するときのTipsです。(というか覚え書きです)