FT232RL AVRパラレルライター 2008.08.05(火)〜
著作者名: 中野 良知 作成開始: 2008.08.05(火) 最新更新: 2008.11.14(金) △1 ATmega644,ATmega164を追加。
目次 1. 概要 2. 構成 3. 操作 4. 回路図 5. ATmega8のEnter Programming Mode 6. ATtiny2313のタイミングチャート 6.1. フラッシュROM書込み 6.2. フラッシュROM読出し 7. 実験の経過 1. 概要 FT232RLとATmega8を使ったパラレルライターの実験です。 ロックビットを書き換えてフラッシュROMにアクセス出来なくったAVRマイコンや、 RESETポートをIOポートに設定したATtiny2313やATtuny26Lを、パラレル書込みで初期 化する事ができます。 2. 構成 △1 Win App シリアル通信 I/Fプログラム ターゲット ┌───┐ USB ┌────┐ USART┌────┐ ┌─────┐ │ PC ├←─→┤FT232RL ├←─→┤ATmega8 ├←┬→┤ATtiny2313│ └───┘ └────┘ └────┘ │ └─────┘ │ ┌─────┐ ├→┤ATtiny26L │ │ └─────┘ │ ┌─────┐ ├→┤ATmega8 │ │ └─────┘ │ ┌─────┐ ├→┤ATmega88 │ │ └─────┘ │ ┌─────┐ ├→┤ATmega644 │ │ └─────┘ │ ┌─────┐ └→┤ATmega164 │ └─────┘ PC: Win AppからFT232RLを経由してATmega8にコマンドとデータを発行します。 ATmega8がターゲットから読み出したデータをFT232RL経由で受信し、 Win Appのリストボックスに表示します。 FT232RL; USARTのRXDとTXDをクロスしてATmega8と接続し、データ通信を行います。 RTS・CTSによるハンドシェイク制御は行いません。 通信レートは1Mボーです。 ATmega8: 制御ポート12ビット。データポート8ビット。 データポートはコマンド書き込みとデータ読出しで入出力の方向を切換えます。 3. 操作 プログレスバーは、フラッシュROMとEEPROMの書込み量に追従します。 ラジオ釦をオンにして、[READ]または[WRITE]をクリックします ○ROM フラッシュROMの読出しと書込みを実行します。 書込み後ベリファイを行います。 ○EEPROM EEPROMの読出しと書込みを実行します。 書込み後ベリファイを行います。 ○FUSE FUSE BITの読出しと書込みを実行します。 書込み後ベリファイを行います。 ○LOCK BIT LOCK BITの読出しと書込みを実行します。 書込み後ベリファイを行います。 ○CHIP ERASE フラッシュROM、EEPROM、LOCK BITを初期化します。 ○INITIALIZE CHIP ERASEを実行した後に、FUSE BITを初期化します。 4. 回路図 I/F ATmega8 FT232RLモジュール ┌─────┐ ┌────┐ │ │2 │ │ │ RXD├──────┤TXD │ │ │ │ ├┐ USBケーブル │ │3 │ │├───── → PCへ │ TXD├──────┤RXD │├───── │ │ │ ├┘ │ │7 │ │ │ VCC├──●───┤+5V │ │ │20 │ │ GND │ │ AVCC├──● └──┬─┘ │ │ │ └─── GND │ │ └─ +5V │ │ ターゲット │ │ ATtiny2313 │ │ ┌───────┐ │ │14 12│ │ │DATA0 PB0├─────────────┤PB0 │ │ │15 13│ │ │DATA1 PB1├─────────────┤PB1 │ │ │16 14│ │ │DATA2 PB2├─────────────┤PB2 │ │ │17 15│ │ │DATA3 PB3├─────────────┤PB3 │ │ │18 16│ │ │DATA4 PB4├─────────────┤PB4 │ │ │19 17│ │ │DATA5 PB5├─────────────┤PB5 │ │ │6 18│ │ │DATA6 PB6├─────────────┤PB6 │ │ │7 19│ │ │DATA7 PB7├─────────────┤PB7 │ │ │ │ │ │ │23 8│ │ │BS1 PC0├─────────────┤PD4(BS1/PAGEL)│ │ │24 9│ │ │XA0 PC1├─────────────┤PD5 │ │ │25 11│ │ │XA1 PC2├─────────────┤PD6(XA1/BS2) │ │ │26 │ │ │PAGEL PC3├─ │ │ │ │27 │ │ │BS2 PC4├─ │ │ │ │28 3│ │ │-BSY PC5├─────────────┤PD1 │ │ │ │ │ │ │4 5│ │ │XTAL1 PD2├─────────────┤PA0 │ │ │5 6│ │ │-OE PD3├─────────────┤PD2 │ │ │6 7│ │ │-WR PD4├─────────────┤PD3 │ │ │ │ │ │ │11 20│ │ │POW PD5├──●──────────┤VCC │ │ │ │ │ │ │ │ R680 │ │ │ │ │ │ │ │ │12 │ ┌─────┐ 1│ │ │RESET PD6├────┤ ├──┤RESET/VHI │ │ │13 │ │RESET/VHI │ │ │ │VHI PD7├────┤ 制御回路 │ │ │ │ │8,22│ │ │ 10│ │ │ GND├──●─┤ ├──┤GND │ │ │ │ └─────┘ │ │ └─────┘ │ └───────┘ │ └─── GND ターゲットのATtiny2313は、PAGEL/BS1とXA1/BS2がそれぞれ兼用です。 ターゲットのATmega8はPAGEL、BS1、XA1、BS2が専用です。 RESET・VHI制御回路 +12V──●──┐ │ │ R10K │E B┌─┐C │ ┌┴┐C VHI ──●─R10K─┤ ├─R10K─●─┤ ├─●────── RESET │ └┬┘ B└─┘ │ /VHIへ R10K E│2SC1815 2SA1015 │ │ │ │ └─────●──────────────┐ │ │ B┌─┐C │ │ RESET──●─R10K─┤ ├──────────┘ │ │ └┬┘ │ R10K E│2SC1815 │ │ │ │ GND ──●─────●──────────────●─── GND +12VはMAX662DIPモジュールで、+5Vを昇圧しています。 MAX662 ┌────┐ +5V 5│ │ ─────┤VCC │ 2│ │ ┌─┤C1+ │6 0.22 ┴ │ ├───●────── +12V ┬ 1│ │ │ └─┤C1- │ │ 4│ │ │ ┌─┤C2+ │ │ 0.22 ┴ │ │ │┴│100u/10V ┬ 3│ │ └┬┘ └─┤C2- │ │ 7│ │ │ ┌─┤GND │ │ │ └────┘ │ │ │ GND ───●──────────●────── GND ブレッドボードの様子 左からFT232RLモジュール、ATmega8、ATtiny2313(ターゲット)。 ATtiny2313(ターゲット)を外して、左隣にATmega8(ターゲット)を装着します。 5. ATmega8のEnter Programming Mode プログラミングモードへの入り方は下記の2通り。 1) VCC ON→100usec遅延→XTAL1パルス6回→100nsec以上遅延→VHI(+12V)供給 2) VCCとVHI(+12V)同時供給→100nsec以上遅延 2)は、RESETを汎用ポートとして設定した場合や、XTALに外部発振子を設定した場合 の方法としてデータシートに記載されています。 工場出荷状態(RESET仕様、内部RC仕様)のチップで 2)の方法でFUSE BITやLOCK BIT のR/W、チップ消去に支障がないことを実験で確認し、2)を採用しました。 注意: ターゲットチップ電源のパスコンは、VCCの立上りに影響が出てプログラミング モードに入らない場合があります。 0.1uFでも影響があるため、ターゲット側電源のパスコンは廃止しました。 6. ATtiny2313のタイミングチャート 6.1. フラッシュROM書込み │← ページバッファーの16ワード分を繰り返す→│ ┌──┬──┬──┬──┬ ─ ─ ┬──┬──┬──┬──┬──── │$10 │AD-L│DT-L│DT-H│ │AD-L│DT-L│DT-H│AD-H│ DATA ─┴──┴──┴──┴──┴ ─ ─ ┴──┴──┴──┴──┴──── ┌──┐ XA1 ─┘ └────────────────────────────── ┌─────┐ ─ ─ ┐ ┌─────┐ XA0 ───────┘ └ ─ ─ ┴──┘ └─────── ┌──┐ ─ ─ ┐ ┌─────┐ BS1 ──────────┘ └ ─ ─ ┴─────┘ └──── ┌┐ ┌┐ ┌┐ ┌┐ ─ ─ ┌┐ ┌┐ ┌┐ ┌┐ XTAL1──┘└─┘└─┘└─┘└─ ─ ─ ─┘└─┘└─┘└─┘└───── ───────────────────────────────┐┌── WR └┘ ────────────────────────────────┐ ┌ BSY └─┘ │←→│←→│←───→│ │←→│←───→│←→│ CO AO DO AO DO AO CO:コマンド出力 AO:アドレス出力 DO:データ出力 AD-H AD-L ┌─┬─┬─┬─┬─┬─┬─┬─┐┌─┬─┬─┬─┬─┬─┬─┬─┐ │ │ │ │ │ │ │ │ ││ │ │ │ │ │ │ │ │ └─┴─┴─┴─┴─┴─┴─┴─┘└─┴─┴─┴─┴─┴─┴─┴─┘ │←──────────→│←─────→│ フラッシュROM ページバッファー の上位側アドレス 内のアドレス AD-Lの下位4ビットは、ページバッファー内のアドレスを指定します。 AD-Lの上位4ビットとAD-Hの下位2ビットで、フラッシュROMの16ワード毎のアドレ スを指定します。 負のWRパルスで、ページバッファーの先頭からの16ワードが、フラッシュROMの 上位側アドレスから16ワード書き込まれます。 6.2. フラッシュROM読出し │←──── 読出しバイト数分を繰り返す────────→│ ┌──┬──┬──┬──┬──┬ ─ ─ ┬──┬──┬──┬──┬── │$02 │AD-H│AD-L│DT-L│DT-H│ │AD-L│AD-H│DT-L│DT-H│ DATA ─┴──┴──┴──┴──┴──┴ ─ ─ ┴──┴──┴──┴──┴── ┌──┐ XA1 ─┘ └──────────── ─ ─ ─────────────── XA0 ───────────────── ─ ─ ─────────────── ┌──┐ ┌──┐ ┌──┐ ┌──┐ BS1 ────┘ └─────┘ └ ─ ─ ┘ └─────┘ └── ┌┐ ┌┐ ┌┐ ┌┐ ┌┐ XTAL1──┘└─┘└─┘└─────── ─ ─ ─┘└─┘└───────── ───────────┐┌─┐┌─ ─ ─ ───────┐┌─┐┌─── OE └┘ └┘ └┘ └┘ │←→│←───→│←───→│ │←───→│←───→│ CO AO DI AO DI CO:コマンド出力 AO:アドレス出力 DI:データ入力 DT-L、DT-Hの各1バイトのデータは、読み出すと直ちにUSARTでPCへ送信し、 Win Appは、受信バッファーに2048バイトが揃ってから一括して取得します。 7. 実験の経過 2008.11.14(金) ターゲットにATmega644とATmega164を追加しました。 これまでの対応品種 TYPE ROM EEPROM PIN ROM書込み時間(sec)(含ベリファイ) -------------+------+--------+-----+---------------------------------- ATtiny2313 2k 128 20 1.93 ATtiny26L 2k 128 20 1.97 ATmega8 8k 512 28 4.00 ATmega88 8k 512 28 4.07 ATmega164 16K 512 40 5.16 ATmega644 64K 2048 40 15.31 2008.11.13(木) I/F用ATmega8のROMとEEPROMの読出ルーチンに、1バイト毎に50usecの遅延を追加し てWinApp側の受信エラーを改善しました。 ベリファイ時のROMデータ表示をスキップして、書込み処理を速く終了するように しました。 2008.11.10(月) ATmega88を追加しました。 2008.11.09(日) ATmega8のプログラミングモード立上げタイミングを変更し、R/Wエラーを改善しま した。 ┌──┐ RESET ─────┘ └───────────── ┌──────────────── _OE ─────┘ ┌──────────────── _WE ─────┘ ┌───────────── POWER ────────┘ ┌───────────── VHI ────────┘ →├──┤← 200usec 2008.09.09(火) GUIにプログレスバーを追加。 フラッシュROMとEEPROMの書込み量に追従。 2008.09.07(日) フラッシュROM書き込み時間短縮。 ATtiny2313:2.7秒/2kバイト → 1.6秒/2Kバイト。 ATtiny26L :2.7秒/2kバイト → 1.6秒/2Kバイト。 ATmega8 :9.2秒/8kバイト → 5.3秒/8Kバイト。 2008.09.05(金) AVRパラレルライタ・メイン基板とサブ基板を製作。 上:サブ基板。 下:メイン基板。 サブ基板でATtiny2313,ATtiny26L,ATmega8/88のR/Wに対応。 フラッシュROM書き込み時間 ATtiny2313:2.7秒/2kバイト。 ATtiny26L :2.7秒/2kバイト。 ATmega8 :9.2秒/8kバイト。 メイン・サブ基板ともにCNCで切削。サブ基板は両面基板。 両面基板のTOPとBOTTOMの位置合わせは、基板の基準穴2箇所とガイドを使用。 (左)スピンドルに装着したガイドに基準穴を合わせ、マグネットベースに取り付け たガイドに交換。 マグネットベースはワークテーブルに固定。 (右)対角の基準穴までスピンドルを移動し、基準穴をガイドに合わせる。 VIAのTOP、BOTTOM接続には、切り貯めた抵抗器のリードを使用しました。 VIA接続工程: 1) 基板の表と裏の両端に基板(t1.6mm)の端材を両面テープで貼り付けます。 2) 平らな台に基板を置き、VIAに抵抗器のカットしたリードを通します。 貫通したリードは下側に1.6mmくらい突き出ます。 3) リードを半田付けします。ランドが狭いので実体顕微鏡越しに行いました。 4) 半田付けをしたリードを1mmくらいにカットします。 5) 基板を裏返し、突き出ているリードを半田付けします。 2)3)4)を繰り返し、時々5)を行うと効率的です。 2008.08.24(日) POW出力をターゲットのVCCに直結にして、ATmega8とATtiny2313の書込みと読出し の動作を確認。 2008.08.23(土) EAGLE5.20で回路図作成開始。 2008.08.16(土) ATtiny2313,ATmega8のROM、EEPROM、FUSE BIT、LOCK BITの書込み後にデータの ベリファイチェックを追加。 2008.08.13(水) ATmega8のフラッシュROMとEEPROMのR/Wが完成。 フラッシュROMとEEPROMの書込みでは、データラッチの時のBS1の出力値が異なるの で要注意。 2008.08.11(月) ATtiny2313のEEPROMのR/W完成。 Readはバイト単位で読出し、Win Appは受信バッファーに128バイト揃ったところで データを取得し表示します。 Writeはページ(4バイト)単位で書込みます。 HEXファイル読出しダイアログで、フラッシュROM用は拡張子がhex、EEPROM用は 拡張子がeepをそれそれ優先的に示する様に変更。 アセンブラーは.eseg領域のHEXデータをfilename.eepに保存します。 2008.08.10(日) ATtiny2313のフラッシュROM書き込み完成。 2008.08.09(土) ATtiny2313のフラッシュROM書き込みで、上位アドレスで指定した箇所に16ワード しか書けないため、下位アドレスの設定方法を調査中。 2008.08.08(金) ATtiny2313のフラッシュROM読出しを追加。 デバイス名、COMポートNo、HEXファイル名のレジストリ登録と読出しを追加。 2008.08.07(木) mega8_io.asmにATmega8のチップ消去、ヒューズR/W、ロックビットR/Wプログラム を追加。 ATmega8のパラレルモードへの切換えは、VCCとVHIの同時立ち上げを採用。 VCCの立上り改善のため、電源のパスコン0.1uFを廃止。 2008.08.05(火) Win App側にATtiny2313のチップの初期化処理を追加。 チップ消去コマンド送信後、FUSE BITの書き込みコマンドと初期値データを送信。 シリアルライターの検討中にアクセスが出来なくなった5個のATtiny2313の初期化 に成功。3個がRESETが汎用ポートに、2個がセラミック発振子モードでなっていた。 2008.08.04(月) mega8_io.asmでATtiny2313のチップ消去、ヒューズR/W、ロックビットR/Wが動作。 _OE↓からPINBまでにnopを追加してヒューズビットの読出しが安定になる。 2008.08.03(日) mega8_io.asmにATtiny2313用チップ消去、ヒューズR/Wのルーチンを追加。 数十μsecの時間管理に対応。 2008.07.28(月) Win AppからのI/O操作では数十μsecの時間管理が困難なため、ATtiny2313の FUSE BITとLOCK BITの書き込みでエラー発生。 2008.07.27(日) Win AppからのI/O操作で、ATtiny2313のFUSE、LOCK BITの読出し成功。 2008.07.25(金) Win AppからのI/O操作で、W/R繰り返しで時々00 00 00が読み出される件の対策。 VCCに0.1μとブリーダー抵抗680Ωを追加。 CHIP ERASE作成。 2008.07.24(木) Win AppからのI/O操作で、ATmega8のFUSE BITとLOCK BITの読出しに成功。 ただし時々読出しエラー。 2008.07.22(火) mega8_io.asmのテーブルジャンプ命令でPCからのコマンドを実行。 ポートの入出力コマンドに対応。 2008.07.20(日) AVR パラ書き込み検討開始。 AVR Studioでmega8_io.asmと、VC#でATMEL_PARA_WRITERプロジェクト立ち上げ。 Windows AppからATmega8のI/Oを操作するプログラムの検討。
ページのTopへ
サイトのTopへ
法律条項 この資料により生じたいかなる障害や損害に対し、著者は全てを免責されるものとします。 この資料は、著作権法の下で保護され、入手先、著者、日付、法律条項を含んだ場合に複製が可能です。

[PR]今流行りの携帯ゲームは?:完全無料でずっと遊び放題だよ