フリーのツールでC8051F30x用ソフトを開発しよう!自作の書き込み装置を紹介します。 |
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ファームウェア、書き込みソフト、ソースコード c8051f30.exe.win32.bin Windows用書き込みソフト・コンパイル済みバイナリ
c8051f30.linux.bin Linux用書き込みソフト・コンパイル済みバイナリ
|
旧版 2002-4-26 |
c8051f30.tar.gz AT90S2313ファームウェア、Linux用書き込みソフト、一式
|
このアーカイブファイルを展開すると、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点滅プログラム |
|
シリアル通信プログラム |
|
温度測定プログラム |
|
SDCCで開発するときのTipsです。(というか覚え書きです)
書き込む必要のないデータはRAMではなくコード領域に配置されるように宣言します。普通のCコンパイラなら static const のようにするところですが、SDCCでは、
code char foobar[] = "This is read only data.";
のように記述すれば、RAMを節約できます。
C8051F30xには、直接アクセス可能なRAMが128バイト、間接アクセス専用のRAMが128バイトあります。普通に変数を宣言すると直接アクセス可能なRAMに配置される上に、そこはスタック領域としても消費されるので、自由に使用できるRAMは非常に少なくなってしまいます。そこで、通常は間接アクセスされるような配列データは、
idata char foobar[10];
のように記述すれば、RAMを有効に活用できます