picburn - PIC Programmer for FTDI devices
Posted by arms22 on 2008年05月27日

FT232R(FT245R, and FT2232C)のSynchronous Bit Bangを使ったPICプログラマ'picburn'を作成しました。プログラマにPICを使わないUSB接続型PICプログラマです(ややこしや~)。
秋月のFT232Rモジュールを使えば、トランジスタ3個と数本の抵抗だけで作ることができます(別途12V電源は必要です)。1Kワードの読み込みに1秒、1Kワードの書き込みに10秒程度とそこそこ早いPICプログラマです。
次の図はpicburnの回路図です。
FT232R周辺の回路は秋月のモジュールと殆ど同じです。トランジスタ周りの回路はオレンジ電子さんのWriter509を参考にしました。12V電源にはNJM2360を使っています。
制御ソフト
picw509をベースに picburn というソフトを作成しました。picw509と同様にコマンドラインベースでプラットフォームに依存しないコードで書かれています。linux、Windowsでも動作するはずです。開発はMacOSX(10.3.9)+gccで行っています。
D2XXドライバインストール
FTDIデバイスとの通信にD2XXドライバを使用します。次の記事を参考にD2XXドライバをインストールしてください。
http://arms22.blog91.fc2.com/blog-entry-148.html
picburnインストール
次のURLからソースコードをダウンロードしてください。
http://xfind.hp.infoseek.co.jp/electric/picburn/picburn-0.1.0.tar.gz
ダウンロードしたら展開してターミナルから次のコマンドを入力します。
% make depコンパイルが終わると実行ファイルとデバイス定義ファイルが次のディレクトリにコピーされます。
% make
% sudo make install
/usr/local/bin
/usr/local/share/picburn
使い方
# PIC16F84Aからの読み込み
% picburn -c PIC16F84A -r -o something.hex
# PIC16F84Aへの書き込み
% picburn -c PIC16F84A -pv -i something.hex
対応デバイス
- PIC10F206 PIC10F204 PIC10F202 PIC10F200
- *PIC12F683 *PIC12F675 PIC12F635 PIC12F629 *PIC12F509 PIC12F508
- PIC16F917 PIC16F916 PIC16F914 PIC16F913 PIC16F877A PIC16F876A PIC16F874A PIC16F873A PIC16F877 PIC16F876 PIC16F874 PIC16F873 PIC16F88 PIC16F87 *PIC16F84A PIC16F84 PIC16F83 *PIC16F819 PIC16F818 PIC16F77 PIC16F76 PIC16F74 PIC16F73 PIC16F688 PIC16F684 PIC16F648A *PIC16F628A PIC16F627A PIC16F628 PIC16F627 PIC16F676 PIC16F630 PIC16F57
既知の問題
- コードプロテクト(CP)をかけたプログラムのベリファイは必ず失敗する
良くある問題
- ベリファイに失敗する
CPがかかっている
→無視する
PGM端子がちゃんと処理されていない
→GNDに接続する - Eraseできない
VDD電圧が低い(VBUSからたくさん電流を取り出すとVBUS電圧が下がる)
→VDD電源を別途設ける - 0x0000しか読み出せない
CPがかかっている
→EraseしてCPを解除する
Program/Verify Mode に入れていない
→VDD電圧、VPP電圧、PGM端子を確認する
PIC Writer 509 for Linux
http://senta.s112.xrea.com/senta/product/picw509/picw509.html
オレンジ電子工作 PIC Writerを作る
http://www.geocities.jp/orange_denshi/writer509.html
MacOSXでFTDIのBit-Bangモードを試す(2)
Posted by arms22 on 2008年05月19日

今回は FT232R, FT245R, FT2232C デバイスのみ使える Synchronous Bit Bang Mode を試す。
Synchronous Bit Bang Modeは書き込みの前に読み込みが行われるMode。1byte書き込むと、1byte読み込まれる。16byte読み込みたければ、16byteの書き込みを行う。
ポートの初期値が0xffの時、0x55, 0xaaの2byteをWriteすると、ポートの出力は次のように変化する。
0xff 0x55 0xaa2byteのWriteに続けて2byteのReadを行うと次の値が読み込まれる。
0xff,0x550x55のWriteに対して0xffが読み込まれ、0xaaのWriteに対して0x55が読み込まれる。
次の図はSynchronous Bit Bang ModeのR/Wのタイミングと波形。

ループバックテスト
次のようにD0-D3端子をD4-D7端子に接続し、簡単なループバックテストを行った。
D0端子-->D4端子
D1端子-->D5端子
D2端子-->D6端子
D3端子-->D7端子
D0からD3端子を出力に設定。D4からD7端子を入力に設定。0x0から0xfの16byteの値をWrite。16byteのReadを行った結果は次のとおり。
rx[0] ff
rx[1] 00
rx[2] 11
rx[3] 22
rx[4] 33
rx[5] 44
rx[6] 55
rx[7] 66
rx[8] 77
rx[9] 88
rx[a] 99
rx[b] aa
rx[c] bb
rx[d] cc
rx[e] dd
rx[f] ee
気をつけないといけない点は、
- Writeの前にReadされる
- 1byte目のReadの結果は最後にWriteした時の値
- 16byte目のWriteに対する値が欲しい場合、17byte Writeして16byte目のReadの結果を使う
サンプルコードは続きを読むで。
FT232RBitBangModes.pdf
http://www.ftdichip.com/Documents/AppNotes/AN232R-01_FT232RBitBangModes.pdf
FTDI Application Notes
http://www.ftdichip.com/Documents/AppNotes.htm
MacOSXでFTDIのBit-Bangモードを試す
Posted by arms22 on 2008年05月18日

FTDIのUSBシリアル変換IC FT232RL にはデータ端子を8bitの双方向IOポートとして使う Bit-Bang モードがあります。このモードを使えば FT232RL に接続したハードウェアをPCアプリから直接制御することができます。
秋月電子から FT232RL を搭載したUSBシリアル変換モジュールが販売されています。Writer509用にこのモジュールを購入したのですが、汎用IOポートとして使えると分かってかなり得した気分です。早速このモジュールを使って Bit-Bang モードを試したいと思います。
D2XXドライバのインストール
FTDIから Bit-Bang モードを利用する為の D2XX ドライバが提供されています。D2XX ドライバは Windows, Linux, MacOSX と各種プラットフォーム用のドライバが提供されています。
ここからMacOSX用のD2XXドライバをダウンロードしてきて、次のようにターミナルから手動でインストールします(※管理者権限が必要です)。
cp libftd2xx.0.1.0.dylib /usr/local/lib
cd /usr/local/lib
ln -sf libftd2xx.0.1.0.dylib libftd2xx.dylib
VCPドライバのアンロード
D2XXドライバとVCP(仮想COMポート)ドライバは同時に使用できないため、VCPドライバがインストールされている場合は、VCPドライバをアンロードします(※要管理者権限)。
kextunload /System/Library/Extensions/FTDIUSBSerialDriver.kextOSXを再起動すれば、またVCPドライバはロードされます。VCPドライバを再ロードしたい場合は次のようにします(※要管理者権限)。
kextload /System/Library/Extensions/FTDIUSBSerialDriver.kextVCPドライバをアンインストールしたい場合は、次のファイルを別の場所に移動させます(※要管理者権限)。
/System/Library/Extensions/FTDIUSBSerialDriver.kext
LEDチカチカ
ブレッドボードに簡単なLED制御用の回路を作成。

D2XXドライバに付属していたサンプルを元に標準入力から入力された数値を、D0~D7端子に出力するプログラムを作成した。D0にLEDが接続されているので、'1'と入力するとLEDが点灯、'0'と入力するとLEDが消灯する。ソースコードは続きを読むで。
Bit-Bangモードの使い方
FTDI社USB-8ビットパラレル変換器FT245RLをMacOSXで使う
USB パラレル FTDI FT245RL を使ってみる
FT232RL USBシリアル変換モジュール