Top > libFTDI

広告
  • 追加された行はこの色です。
  • 削除された行はこの色です。
  • libFTDI へ行く。

[[libFTDI:http://www.intra2net.com/de/produkte/opensource/ftdi/]]は[[Future Technology Devices International Ltd:http://www.ftdichip.com/]](FTDI)のUSB−シリアル(RS232C)+パラレル(8bit、D2XXと呼ばれている)変換チップである[[FT245系>FT245]](FT245AMやFT245RLなど)を扱うためのライブラリ。~
[[libFTDI:http://www.intra2net.com/de/produkte/opensource/ftdi/]]は[[Future Technology Devices International Ltd:http://www.ftdichip.com/]](FTDI)のUSB−シリアル(RS232C)+パラレル(8bit、D2XXと呼ばれている)変換チップである[[FT232系>FT232]]や[[FT245系>FT245]](FT245AMやFT245RLなど)を扱うためのライブラリ。~
オープンソースでさまざまなディストリビューションのパッケージになっているのでインストールしやすい。~
インストールのしやすさ、扱いやすさでFTDIの公式ライブラリより使いやすい。
インストールのしやすさ、扱いやすさでFTDIの公式ライブラリより使いやすい。ただ、公式ライブラリより遅いらしい

詳しくは[[ドキュメント:http://www.intra2net.com/de/produkte/opensource/ftdi/documentation/]]を参照のこと

*自作したプログラムのコンパイル [#af264cba]
プログラム名がhoge.cなら
 gcc -o hoge hoge.c -lftdi
とやる。

**libftdiのbitbang.cの簡単な解説 [#j815c05f]
libftdiのサンプルとして添付されている「bitbang.c」について。~
「bitbang」は「bitを叩く」という意味なのか、つまりはパラレルポートのbit毎のON-OFFをするモード。
一番簡単に使えるモードだろう。~
このプログラムは、全1bitをON、OFFしたあと、1BitだけをOFFにして1bitずつシフトしていく。~
プログラムを見てもわかるように、PC側でON-OFFをしているためPCの処理の影響を受ける。~
なので、必ずしも思ったタイミングで動くわけではなく数msぐらいの誤差があるみたいだ。

 #include <stdio.h>
 #include <unistd.h> //sleep, usleep用
 #include <ftdi.h> //FTDIチップ用
 
 int main(int argc, char **argv)
 {
     struct ftdi_context ftdic; //ftdi_contextの宣言
     int f,i;
     char buf[1]; //入力用バッファ
 
     ftdi_init(&ftdic); //FTDIチップの初期化
 
     f = ftdi_usb_open(&ftdic, 0x0403, 0x6001); //FTDIチップをオープン
 
     if(f < 0 && f != -5) { //エラーとトラップ。-5はftdi_sioが動いていた時のエラー
         fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f,  ftdi_get_error_string(&ftdic))
         exit(-1);
     }
 
     printf("ftdi open succeeded: %d\n",f);
 
     printf("enabling bitbang mode\n");
     ftdi_enable_bitbang(&ftdic, 0xFF); //すべてのビットをbitbangに設定
 
     sleep(3);
 
     buf[0] = 0x0;
     printf("turning everything off\n");
     f = ftdi_write_data(&ftdic, buf, 1); //00を書き込み。つまりすべてOFF
     if(f < 0) {
         fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f, ftdi_get_error_string(&ftdic));
     }
 
     sleep(3);
 
     buf[0] = 0xFF;
     printf("turning everything on\n");
     f = ftdi_write_data(&ftdic, buf, 1); //FFを書き込み。つまりすべてON
     if(f < 0) {
         fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f, ftdi_get_error_string(&ftdic));
     }
 
     sleep(3);
 
     for(i = 0; i < 32; i++) {
         buf[0] =  0 | (0xFF ^ 1 << (i % 8));
         if( i > 0 && (i % 8) == 0) {
             printf("\n");
         }
         printf("%02hhx ",buf[0]);
         fflush(stdout);
         f = ftdi_write_data(&ftdic, buf, 1);
         if(f < 0) {
             fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f,  ftdi_get_error_string(&ftdic))
         }
         sleep(1);
     }
 
     printf("\n");
 
     printf("disabling bitbang mode\n");
     ftdi_disable_bitbang(&ftdic); //bitbangモードを終了
 
     ftdi_usb_close(&ftdic); //デバイスを閉じる
     ftdi_deinit(&ftdic);
 }
*簡単な関数リファレンス [#g2a31002]
とりあえず「[[libftdiの関数:http://www.intra2net.com/en/developer/libftdi/documentation/group__libftdi.html]]」から良く使いそうなものだけ
**struct ftdi_context ftdic; [#kadca2b8]
FTDIコンテキスト(ftdic)へのポインタを設定
**ftdi_init(&ftdic); [#w627bcb9]
FTDIコンテキスト(ftdic)を初期化
**ftdi_usb_open(&ftdic, vendor, product); [#e884d754]
ベンダーID = vendor、プロダクトID = productでFTDIコンテキスト(ftdic)をオープン

戻り値
- 0:	問題なし
- -1:	usb_find_busses() が失敗
- -2:	usb_find_devices() が失敗
- -3:	USBデバイスが見つからない
- -4:	オープンできない
- -5:	要求できない。ftdi_sioが動いていた時など
- -6:	リセットできなかった
- -7:	Baudrateが設定できなかった
- -8:	プロダクトの情報が得られなかった
- -9:	シリアルナンバーが得られなかった
- -10:	クローズできなかった

**ftdi_enable_bitbang(&ftdic, bitmask); [#r7488d62]
bitbangモードにする。bitmaskでIN/OUTの設定。~
-bitmask
--0:IN、1:OUT
--例えば0xFFならすべてOUT
**ftdi_write_data(&ftdic, buf, size); [#c81add2a]
データの出力
-buf:データ
-size:送信するデータサイズ

戻り値
- -666:	USBデバイスが使えない
- <0:	usb_bulk_write()からエラーが帰ってきた
- >0:	問題なし
**ftdi_read_data(&ftdic,buf,size); [#s9a592ef]
データの受信
-buf:受信データを入れておく
-size:受信するデータサイズ

戻り値
- -666:	USBデバイスが使えない
- <0:	usb_bulk_read()からエラーが帰ってきた
- 0:	データが使えない
- >0:	問題なし
**ftdi_disable_bitbang(&ftdic); [#e424cd6c]
bitbangモードを終了
**ftdi_usb_close(&ftdic); [#g0151d4a]
デバイスを閉じる
**ftdi_deinit(&ftdic); [#n24ccc5e]
初期化解除

広告

リロード   差分   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS