Arduino を使った ATtiny10 の書き込み (2)
Arduino を AVR918 相当のデバイスとして機能させるスケッチ「Arduino918」を作って、ATtiny10 の書き込みに成功しました。
バイナリ・スケッチ・サイズは 2612 バイトです。
スケッチのアーカイブ・ファイルと readme ファイルを以下の Yahoo ボックスに置きました。
注意点としては、
- avr911.zip に含まれる実行可能オブジェクトの avrosp.exe を PC 上の書き込みソフトウェアとしてそのまま使うので、あらかじめ Atmel のサイトからダウンロードしておく必要がある
- avrosp.exe は Windows 用のアプリケーションなので、Linux や Mac OS X から利用するためにはソースからコンパイルすることが必要
- PC のシリアル・ポートは COM1 から COM8 までをサポートしており、COM9 以上を使うにはソースの手直しが必要なこと
があげられます。
以下に、アーカイブ・ファイルに同梱の readme ファイルの内容を示します。
Arduino を ATtiny10 書き込み器として使うためのスケッチ
- Arduino9182011/12/10 pcm1723
●はじめに
通称「米粒 AVR」と言われる 6 ピン SOT-23 パッケージの ATtiny10 は、内部フラッシュメモリのプログラミング・インターフェースに従来の方式ではなく、TPI (Tiny Programming Interface) と呼ばれる新しい方式を使っているので、この方式に対応していない装置では書き込むことができません。
TPI 方式で書き込むための手段のひとつとして、Atmel 社のアプリケーション・ノート
- AVR911: AVR Open Source Programmer
- AVR918: Using the Atmel Tiny Programming Interface (TPI)
で説明されているソフトウェア/ハードウェアを使う方法があります。
AVR911 では、ホスト PC 上で動作させる、オープンソース書き込み器コントロール・アプリケーション・ソフトウェア「avrosp」について説明してあり、そのソースファイルおよび実行可能オブジェクトのアーカイブ・ファイル「avr911.zip」も用意されています。
avrosp は Windows のコマンド・プロンプトで動作する (GUI ではない) コンソール・アプリケーションで、機能的には Atmel 純正のプログラミング・ツールと同様のもので、AVR109、AVR910 で定義されている「書き込み器ハードウェア」に対応しています。
AVR918 では TPI の説明のほかに、AVR911 対応の「書き込み器」を ATmega324 上に実装したサンプルについても説明しており、そのソースファイルをまとめたアーカイブ・ファイル「avr918.zip」も用意されています。
以下、この「ハードウェア」のことも「AVR918」と呼ぶことにします。
AVR918 は、ホスト PC とはシリアル・ポートを介して接続します。 これにATmega324 の USART0 モジュールを使用します。
AVR918 側と、ターゲット・マイコンの ATtiny10 との間の TPI 接続には、ATmega324 のUSART1 モジュールを使用します。
Arduino Mega では、複数の USART モジュールを持つ ATmega1280 を使用しているので、AVR918 相当の機能を実現するのも、比較的に容易だと思いますが、(普通の) Arduino では USART モジュールを 1 個しか持たない ATmega168/ATmega328 を使っているので、少しプログラムに手を加えなければなりません。
このスケッチ「Arduino918」は、電源電圧 5 V で 16 MHz クロックの ATmega168/ ATmega328 を使った Arduino (互換機) を、 AVR918 相当の機能を持った書き込み器ハードウェア として使うためのものです。
ターゲット・マイコンとしては ATtiny10 だけに対応しています。●ハードウェア
ATtiny10 と、Arduino (互換機) との間の接続を示します。
USART の代わりに SPI を利用しています。Arduino (pin) (pin) ATtiny10 ------------+ +---------------- (SS#) 10 |--[R]-----| 6 (RESET#/PB3) | | (MOSI) 11 |--[R]--+--| 1 (TPIDATA/PB0) | | | (MISO) 12 |--[R]--+ | | | (SCK) 13 |--[R]-----| 3 (TPICLK/PB1) ------------+ +----------------ここで、「R」は出力同士が衝突しないための保護用の抵抗で、数百Ωから数 kΩ程度に選べばよく、その値は重要ではありません。
ATtiny10 の内部フラッシュ・メモリ書き込みのためには、ATtiny10 の電源電圧を 5 V とする必要があります。
簡単のために、電源電圧 5 V の Arduino (互換機) を使い、ATtiny10 には Arduino から電源を供給して、Arduino とターゲットとは同時に電源が投入されるものとします。
ATtiny10 の RSTDISBL フューズビットがプログラムされていて、外部リセット禁止の状態でフラッシュ・メモリ書き込みを行うためには、6 番ピンの RESET 端子に +12 V を加える必要があり、上記の接続では書き込めません。
また、ターゲット・マイコンをアプリケーション回路に実装したまま書き込みを行う、いわゆる ISP (In System Programming) を行うためには、ハード/ソフト両面でもう少し配慮が必要になります。
もともとの AVR918 がそうなっているのですが、フラッシュ・メモリ書き込みが終了しても、ハード的にポートを出力から入力に切り換えるだけで、ソフト的には TPI 接続を終了させる手続きを行っていません。
そのため、ターゲット・マイコンのリセットを手動で行っても、フラッシュに書き込んだプログラムは走り出さず、再度 TPI コマンドが来るのを待っている状態になります。
書き込んだプログラムを動作させるには、いったんターゲット・マイコンの電源を OFF にしてから、再度、電源を投入する必要があります。
TPICLK として利用しているディジタル 13 番ピンは、Arduino 基板上で「L」と表示されている LED に接続されているので、TPI の読み書きに対してこの LED が点灯しますが、これは意図的なものではありません。
アクセス終了後は、「プルアップされた入力ポート」の状態になるので、数十kΩのプルアップ抵抗を流れるわずかな電流により、LED がほんのりと光る状態になります。
開発には秋月 AE-ATmega 基板に部品を実装したもの (アキヅキーノ) を使っており、「本物」の Arduino ではテストしてありません。●コンパイル方法
開発・テストは Arduino-0022 の環境で行いました。
それ以外の環境ではテストしてありません。
ダウンロードしたアーカイブ・ファイルArduino918-111210a.zipを展開してできた「Arduino918」フォルダを、現在お使いのスケッチブック・フォルダにコピーし、Arduino IDE のメニューで、File / Sketchbook / Arduino918 と選んでいけば、スケッチが開きます。
複数のファイルで構成されているので、エディタのタブも複数現れます。
あとは、通常通り「Upload to I/O Board」ボタンを押せばアップロードできます。
バイナリ・スケッチ・サイズは 2612 バイトです。
正常にアップロードできれば Arduino 側の準備は完了です。●操作方法
まず、Atmel の web サイトから、アプリケーション・ノート AVR911、AVR918 および avr911.zip をダウンロードしておきます。
avr911.zip を展開すると、多数のソースファイルと共に、Windows 用の実行可能オブジェクトavrosp.exe が現れますから、これをそのまま利用します。
PC と Arduino との接続は、Arduino IDE で使用しているシリアル回線をそのまま使います。 ただし、avrosp.exe はコマンド・プロンプトで使用するコンソール・アプリケーションなので、「mode」コマンドを使って、シリアル・ポートの設定を行っておく必要があります。
avrosp を実行する前に、コマンド・プロンプト上で次のコマンドを実行しますmode com1 baud=115200 data=8 parity=n dtr=offここで「com1」は実際に Arduino との接続に使っているシリアル・ポートの番号を指定します。 (com3、com7 など)
Arduino では、DTR を使ってオートリセット機能を実現しているので、「dtr=off」を指定しておかないと、うまく行かない場合があります。
このシリアル・ポートの設定が正しくないと avrosp が avr918 を見つけられずにエラーになる場合があります。
毎回、この行を手入力するのは大変ですから、「バッチファイル」を作成して、その中に記述しておくと便利です。
avrosp コマンドのオプションの詳細については、アプリケーション・ノート AVR911 を参照してください。
あるいは、オプションなしで単に「avrosp」だけを実行するとヘルプが表示されます。
ひとつ例を示すと、avrosp -cCOM1 -dATtiny10 -s -q -Oは「COM1」で接続した avr918 からシグネチャ (-s)、フューズビット (-q)、キャリブレーション値 (-O : 英大文字の「オー」) を読み出す指定になります。
-c オプションを省略すると、自動で COM1 から COM8 までスキャンする指定になります。
COM7 に割り当てられた USB 仮想シリアル・ポートに対しても、うまく動作しました。
COM9 以上には対応していません。
-d はターゲット・デバイスの指定で、-dATtiny10 は ATtiny10 を指定することになります。
実際には、「ATtiny10.xml」ファイルを読み込んで必要な情報を得ているので、avr911.zip を
展開したフォルダに同梱されている「ATtiny10.xml」ファイルも avrosp.exe ファイルを置いたフォルダにコピーしておく必要があります。
実行結果は次のようになります。AVR Open-source Programmer $Revision: 1163 $ (C) 2004 Atmel Corp. Serial port timeout set to 5 sec. Found AVR ISP on COM1! Entering programming mode... Reading signature bytes: 0x1e 0x90 0x03 Parsing XML file for device parameters... Parsing '.\ATtiny10.xml'... ###### Saving cached XML parameters... Signature matches device! Reading fuse bits... 0xffff Reading OSCCAL from device... 0x98 Leaving programming mode...●AVR Studio からの利用
- 接続シリアル・ポートが COM1 から COM4 に限られる
- チップ・イレース/書き込み/読み込み/ベリファイしかできない
- HEX ファイル名は独自に記憶されており、プロジェクトとは関係がない
という制限がありますが、AVR Studio 環境から (GUI で) 利用することもできます。
AVR Studio のメニューの Tools / AVR Prog... を選べばダイアログが開き、HEX ファイルを選んで書き込むことができます。
デバイス選択のリストボックスには関係のないデバイスが表示され、それ以外は選択できませんが、特に問題なく書き込めるようです。
AVR Studio バージョン 4.19 について試しており、AVR Studio5 については試していません。
フューズビットやロックビットの設定については avrosp を利用する必要があります。