FT232Rモジュール利用 AVR TPIライター
2012年2月 米粒AVRと呼ばれたりする非常に小さなAVR、ATtiny10。6ピンしかありません。ファームの書き込みにはSPIライターや高電圧パラレルライターではなく、TPI (Tiny Programming Interface)に対応したライターを使います。AVRISP mkII(Atmel純正ライター)は対応しています。TPIライター、面白そうだったので自作してみました。 【用語】 ATtiny10は一部の用語が他のtiny/megaシリーズと異なります。この記事では次のように表記しています。 (ATtiny10) Configration Bits → Fuse Byte(ヒューズバイト)※Fuse Low Byte とも。 (ATtiny10) Device ID Bits → Signature Byte(署名バイト) 【関連記事】 FT232Rモジュール活用シリーズ、他 #1 ドライバのインストールからソフト開発まで ←FT232Rモジュールの導入方法。 #3 FT232-AVRライター とにかく導入が簡単 ←SPIライター。 AVR 高電圧パラレル/シリアルライター ←USB-シリアル変換モジュールを利用。 2012/04 追記 HID TPIライター ←本記事のライターより実用的なTPIライター。
|
ご案内 |
2012/11 追記 本ライター(FTTPIW)のv1.00はリリース当時の開発環境において安定動作していました。8月、何らかの理由で動作が不安定になっていることが分かり、安定化を目指したv1.01をリリースしました。11月、プログラムを改良してv1.02をリリースしました。開発環境において安定動作しています。 これまでのバージョンアップにより、読み書き速度が低下しました。v1.00の時点でも常用するには厳しい速度だったので致命的です。今後、本ライターの改良は難しいと思います。本記事は自作TPIライターの一例として見るに留め、実際に製作するものとしては「HID TPIライター」の方を検討してください。 |
FT232-AVR TPI Writer | |||||||||||||||||||
FTTPIW : FT232-AVR TPI Writer
FTTPIWはATtiny10シリーズ用のライターと書き込みソフトです。 SPI方式でもなく高電圧パラレル方式でもない、TPI方式のライターです。 必要な物は秋月電子FT232RLモジュールと、数百Ωの抵抗2個だけです。 同梱のLEDチカチカテストのソース内に、ATtiny10のソフト開発における注意点を書いたので参考にしてください。
2012/11 追記 v1.02の変更点について 安定化のため内部パラメータを変更しました。動作環境(PC)によって速さに違いが出ました。
読み書きエラーが発生する場合 FT232Rモジュールを一旦PCのUSBコネクタから抜き、再度差し込んで5秒ほど待ってからfttpiw.exeを実行してください。それで正常に動作しなければ、オプション指定で'-ftl','-ftw'を調整してみてください。それでも正常に動作しなければ、済みませんがあきらめてください。※「HID TPIライター」を製作してください。 |
回路図と配線図 | ||||||||||
回路図
配線図 より安定した動作のため、ターゲットデバイスの近くにパスコンを入れることをお勧めします。 FT232Rモジュールのジャンパー設定
|
使い方とオプションスイッチ | ||||||||||||||||||||||||||||||||||||||
ヘルプ画面 ……。見ての通り「雰囲気英語」です。オプションの意味が思い出せればよし。※日本語だと文字数が多くて画面に収まらない。 使い方とオプションスイッチは拙作AVRライター「FTAVRW」と同様です。※元々はavrsp.exe(ChaN氏)を参考にしています。 ATtiny9/5/4にも対応したつもりですが、動作確認したのはATtiny10のみです。 使い方:書き込み方法 方法1 コマンドライン入力で実行します。 'fttpiw'の後にHEXファイル名を指定します。オプションスイッチも一緒に指定します。 方法2 fttpiw.exeのアイコン/ショートカットアイコンに、HEXファイルをドラッグ&ドロップします。オプションスイッチは別途iniファイルに記述しておきます(後述)。 ヒント/注意
ターゲットAVRからISPケーブルを抜かずに、AVRの動作を開始することができます。いわゆる「ライターを論理的に切り離す」機能です。コマンドラインから「go」コマンドを入力します。例: >fttpiw go 動作中のAVRを書き込み待機状態に戻すには「stop」コマンドを入力します。例: >fttpiw stop ただ、「stop」コマンドを実行せずとも、AVRの動作中にいきなりhexファイルをドラッグ&ドロップしても書き込みはできるので、「stop」コマンドはあまり使わないかもしれません。
オプションスイッチ
2012/11 追記 v1.01で'-ftl','-ftw','-gt'オプションを追加しました。v1.02で安定性が向上しました。読み書き速度を短縮するには'-ftl'オプションが効果的ですが、攻め込んだ値を指定するとエラーが頻発します。ほどほどにしてください。 高速化/安定化のためにオプション指定を試行錯誤するくらいなら、このライターよりも「HID TPIライター」を製作することをお勧めします。 |
iniファイル |
fttpiw.ini オプションスイッチをfttpiw.iniに記述しておくと、fttpiw.exe実行時にそれが反映されます。 fttpiw.iniはfttpiw.exeと同じフォルダに置きます。 iniファイルとコマンドラインに、値が違う同じオプションスイッチがあった場合、コマンドラインの方が有効となります。 例: iniファイルに'-w1'が記述されていて、コマンドラインから'-w2'を指定すると、'-w2'の方が有効となる。 |
TPI - Tiny Programming Interface について | |||||||||||||
TPIの詳細はATtiny10のデータシートを読んでください。ここではライター製作の観点でコメントします。 フレーム形式 TPIの通信は1本のデータ線を送受信に使う半二重通信です。 {スタートビット:1('0')+データビット:8+パリティビット:1(偶数パリティ)+ストップビット:2('1''1')}の、計12ビットを1フレームとする単位で送受信を行います。RS232Cのシリアル通信と同様のフレーム形式です。 それならPCに仮想COMポートを増設してライターソフトを作ればいいかというと…そうは行かず。 RS232Cの通信に、送受信と同期したクロック出力はありません。これがあれば話は簡単だったのですが。 【ポイント】 TPIライターを作るには、送受信に同期したクロック出力が必要。 ガードタイム ライターが送信方向から受信方向へ切り替わるとき、受信準備のため、一定時間待ちます(ガードタイム)。具体的にはアイドルビット('1')を何個か出力します。TPIモードに入った後、0〜128個で設定します(デフォルトは128)。実際に実行されるガードタイムはこの設定値プラス2個です。 ガードタイムは短すぎると通信エラーが発生します。試行錯誤しながら適切な値を決めます。 ※クロックの送信を止めず、送信から受信へレジスタを切り替えたり準備していると、その間にターゲットデバイスからデータがやってきてしまい、取りこぼす。…といったことが起こり得ます。それを回避するのがガードタイムです。 【ポイント】 フレームを送信後、{2 + (0〜128)}個のアイドルビットを出力すると、受信するデータが送られてくる。 ライターが受信方向から送信方向へ切り替わるとき、特にガードタイムはありませんが、データシートには最低1ビットのアイドルビットをスタートビットの前に挿入すべきとあります。
複数個のフレームを連続して送信する場合、アイドルビットを挿入する必要はありません。挿入しても通信エラーにはなりません。 コマンド TPIで使用するレジスタや、フラッシュメモリのデータ領域へは、コマンドを実行してアクセスします。
|
TPIライター製作案 |
(1) 何らかのマイコン(例えばAVR ATtiny2313)のSPI(Serial Peripheral Interface)機能を使ったライターです。 TPIDATA線をMISO(ライター側受信)/MOSI(ライター側送信)に分け、ショート防止(過電流保護)のため100Ω〜1kΩ程度の抵抗を入れます。PCとマイコンの接続には任意のUSB-シリアル変換モジュールを利用します。 (2) (1)のUSB-シリアルモジュールにFT232Rを使うとすれば、ビットバンモードでSPI機能を作り込んでターゲットデバイスと通信することができます。今回製作したライター「FTTPIW」はこのタイプです。 (3) TPIのフレーム形式はUSARTのフレーム形式と同様なので、マイコン(例えばAVR ATtiny2313)内蔵のUSARTを使ってターゲットデバイスと通信します。マイコンのUSARTにはRxD/TxDに同期したクロック出力機能があるので(XCK)、TPIライターが作れそうです。…が、そうするとPCとの通信にUSARTが使えません。USARTを2系統内蔵したマイコンなら問題解決です。安価で入手性のよいATmega88Pあたりで作るなら、V-USB技術を使います。 (1)のハード構成は「AVR 高電圧パラレル/シリアルライター」と同じです。そこにTPIライターのファームを詰め込んでしまうことも出来ます。しかしそんなに何でも詰め込んでしまっては、かえって使いにくいかもしれません。 (3)の案はUSBaspをTPI対応のavrdudeで使うことと同じです。わざわざ自分でソフトを開発しなくても、自作TPIライターは既にあったわけです。ですが自分はライターソフトの開発に興味があったので、独自に製作しました。 TPIはBREAKキャラ(1フレーム全体がビット'0'のフレーム)をサポートしていますが、ライターは必ずしもBREAKキャラを送信する必要はありません。ターゲットデバイスがBREAKキャラ待ちの状態に陥った(おちいった)と判断したら、単に通信エラー発生としてプログラムを終了させるのです。今回製作したライター「FTTPIW」はそのようにしています。 FT232Rビットバンモード使用上の注意 FT232Rのレイテンシタイム(Latency Time/応答遅延時間)はデフォルトで16msです。最小0msまで設定できますが、正常動作は保証されていません。例えばビットバンモードにおいて、書き込み関数(FT_Write())に続けて読み込み関数(FT_Read())を実行するとき、レイテンシタイムが数msだとエラーが頻発します。 最適値は通信速度とプログラムの組み方によります。経験上、レイテンシタイムは4ms以上、書き込み後の読み込みにはレイテンシタイム+4msの待ち時間で、安定動作するように思います。※あくまで経験に基づく値。 2012/11 追記 レイテンシタイムを短くして読み/書き関数を連続実行するとエラーが発生します。実処理時間が追いつかないのでしょう。最適値はプログラムの組み方や実行環境(PC)によります。参考までに、FTTPIW v1.02ではレイテンシタイム4ms、書き込み後の読み込み待ち5msでも安定して動作しました。※開発環境において。他の環境においては保証されない。 |
◆ ◆ ◆ |
FT232Rモジュールを利用したAVR用TPIライターを作りました。 米粒AVR ATtiny10を使ってみたい、とりあえず使えるライターが欲しい、 というつもりで作ったのでスピードはあまり追求していません。 その点で製作案(1)か(3)を作ってみたい気もします。 |
(C) 『昼夜逆転』工作室 | [トップページへ戻る] |