|
|
TopPage > FT2232D module > FT2232D module[01] |
libFTDI内の定義 |
ftdic.type | ftdic.typeの値 |
libusb dev->descriptor.bcdDevice |
TYPE_AM | 0 | 0x200 |
TYPE_BM | 1 |
0x400 もしくは (0x200でdev->descriptor.iSerialNumberが0) |
TYPE_2232C | 2 | 0x500 |
TYPE_R | 3 | 0x600 |
TYPE_2232H | 4 | 0x700 |
TYPE_4232H | 5 | 0x800 |
定義 | 値 | 内容 |
INTERFACE_ANY | 0 | 設定無し。 |
INTERFACE_A | 1 |
設定無し。FT2232Dでは、
ftdi->out_ep=0x81 になるはず。 |
INTERFACE_B | 2 |
ftdi->index= INTERFACE_B ftdi->in_ep=0x04 ftdi->out_ep= 0x83 |
INTERFACE_C | 3 |
ftdi->index=INTERFACE_C ftdi->in_ep=0x06 ftdi->out_ep=0x85 |
INTERFACE_D | 4 |
ftdi->index=INTERFACE_D ftdi->in_ep=0x08 ftdi->out_ep=0x87 |
定義 | 値 | 内容 |
BITMODE_RESET | 0x00 | IO bit modeをリセットする。 |
BITMODE_BITBANG | 0x01 | Asynchronous bitbangモード |
BITMODE_MPSSE | 0x02 | MPSSEモード |
BITMODE_SYNCBB | 0x04 | Synchronous bitbangモード |
BITMODE_MCU | 0x08 | MCU Host Bus Emulationモード |
BITMODE_OPTO | 0x10 | Fast Opto-Isolated Serial Interfaceモード |
BITMODE_CBUS | 0x20 | Bitbang on CBUS pins of R-typeモード, configure in EEPROM before |
BITMODE_SYNCFF | 0x40 | Single Channel Synchronous FIFOモード, available on 2232H chips |
libFTDIの関数 |
No. | function | synopsis |
1 | int ftdi_init (struct ftdi_context *ftdi) |
ftdi_contextの初期化。USBのtimeout時間やendpointの初期値を定義。 [戻り値]
-1:Error |
2 | struct ftdi_context *ftdi_new (void) |
ftdi_contextの新規Allocate。 [戻り値]
NULL :NG |
3 |
int ftdi_set_interface (struct ftdi_context *ftdi , enum ftdi_interface interface) |
ChipのChannel選択。でない場合は、最初のchannel。 指定したchannelに対応するendpointを選択している。 [戻り値]
-1:interface不明 -2:USBデバイス認識できず |
4 |
void ftdi_deinit (struct ftdi_context *ftdi) |
ftdi_contextを閉じる。bufferのfree実施。 [戻り値]
|
5 | void ftdi_free (struct ftdi_context *ftdi) |
Deinitializeとftdiのfree。 ftdi_deinit(ftdi)してfree(ftdi)している関数。 [戻り値]
|
6 |
void ftdi_set_usbdev (struct ftdi_context *ftdi , usb_dev_handle *usbdev) |
libusbでopenしたデバイスをftdi->usb_devとする。 [戻り値]
|
7 |
int ftdi_usb_find_all (struct ftdi_context *ftdi , struct ftdi_device_list **devlist , int vendor, int product) |
USB接続されているFTDIデバイスを全て見つけ新規にftdi_device_listを作成する。 使った後はftdi_list_free()しておく必要がある。 [戻り値]
-1:usb_find_busses()がfail -2:usb_find_devices()がfail -3:out of memoryの状態 |
8 |
void ftdi_list_free
(struct ftdi_device_list **devlist) |
ftdi_usb_find_all()で作られたftdi_devise_listを開放する。 [戻り値]
|
9 |
void ftdi_list_free2 (struct ftdi_device_list *devlist) |
ftdi_usb_find_all()で作られたftdi_devise_listを開放する。 ftdi_list_freeに対して引数のポインタの扱いが違うだけ。 [戻り値]
|
10 |
int ftdi_usb_get_strings (struct ftdi_context *ftdi , struct usb_device *dev , char * manufacturer , int mnf_len, char * description , int desc_len, char * serial , int serial_len) |
Return cs from the USBデバイスからdevice ID文字列を取得する。 ftdi_usb_find_all()といっしょに使う。 引数の"struct usb_device * dev"は、関数の中でopne/closeしている。 [戻り値]
-1:引数がおかしい -4:deviceがopenできない -7:product manufacturerの取得に失敗 -8:product descriptionの取得に失敗 -9:serial numberの取得に失敗 -10:deviceがcloseできない |
11 |
int ftdi_usb_open (struct ftdi_context *ftdi , int vendor, int product) |
指定したvendor IDとproduct IDの(最初に見つかった)deviceをopenする。 中でftdi_usb_open_desc()を呼んでいるだけ。 [戻り値]
|
12 |
int ftdi_usb_open_desc (struct ftdi_context *ftdi , int vendor, int product , const char* description , const char* serial) |
指定したvendor ID product ID description and serialの (最初に見つかった)deviceをopenする。 [戻り値]
-1:usb_find_busses()が失敗 -2:usb_find_devices()が失敗 -3:usb deviceが見つからない -4:deviceがopenできない -5:deviceのOSへの要求が失敗 -6:USB I/Fのresetできない -7:baudrateの設定ができない -8:product descriptionの取得失敗 -9:serial numberの取得失敗 -10:deviceのclose失敗 |
13 |
int ftdi_usb_open_desc_index (struct ftdi_context *ftdi , int vendor, int product , const char* description , const char* serial , unsigned int index) |
指定したvendor ID product ID description and serialの (indexで指定した)deviceをopenする。 ※同じvendor ID product IDのdeviceが複数接続されているときに使える [戻り値]
-1:usb_find_busses()が失敗 -2:usb_find_devices()が失敗 -3:usb deviceが見つからない -4:deviceがopenできない -5:deviceのOSへの要求が失敗 -6:USB I/Fのresetできない -7:baudrateの設定ができない -8:product descriptionの取得失敗 -9:serial numberの取得失敗 -10:deviceのclose失敗 -11:ftdi contextが無効 |
14 |
int ftdi_usb_open_dev (struct ftdi_context *ftdi , struct usb_device *dev) |
usb_device *devとしてOpenしftdi_contextの設定を行う。 [戻り値]
-3:deviceのconfigができない。 -4:deviceがopenできない -5:deviceのOSへの要求が失敗 -6:USB I/Fのresetできない -7:baudrateの設定ができない -8:ftdi contextが無効 |
15 |
int ftdi_usb_open_string (struct ftdi_context *ftdi , const char* description) |
description-stringの文字列の内容に合わせてftdi-deviceをopenする
descriptionのformat
bus and device-nodeのpath (e.g. "003/001") 先頭文字がi:<vendor>:<product> vendor IDとproduct IDで与えられた 最初のdevice, idは10進数でも8進数でも16進数でもいい 先頭文字がi:<vendor>:<product>:<index> deviceのindex 先頭文字がs:<vendor>:<product>:<serial> vendor IDと product IDとserialで与えられた最初のdevice
-1:usb_find_busses()が失敗 -2:usb_find_devices()が失敗 -3:usb deviceが見つからない -4:deviceがopenできない -5:deviceのOSへの要求が失敗 -6:USB I/Fのresetできない -7:baudrateの設定ができない -8:product descriptionの取得失敗 -9:serial numberの取得失敗 -10:deviceのclose失敗 -11:description formatがよくない -12:ftdi contextが無効 |
16 |
int ftdi_usb_close (struct ftdi_context *ftdi) |
ftdi deviceをCloseする。cleaning upしたい場合は、ftdi_deinit()を使う。 [戻り値]
-1:usb_releaseが失敗 -2:usb_closeが失敗 -3:ftdi contextが無効 |
17 |
int ftdi_usb_reset (struct ftdi_context *ftdi) |
ftdi deviceをResetする。 [戻り値]
-1:FTDI resetが失敗 -2:USB deviceが反応無し |
18 |
int ftdi_usb_purge_rx_buffer (struct ftdi_context *ftdi) |
chip内のread bufferとプログラム内部のread bufferをclearする [戻り値]
-1:read bufferのclearに失敗 -2:USB deviceが反応無し |
19 |
int ftdi_usb_purge_tx_buffer (struct ftdi_context *ftdi) |
chip内のwrite bufferとプログラム内部のwrite bufferをclearする [戻り値]
-1:write bufferのclearに失敗 -2:USB deviceが反応無し |
20 |
int ftdi_usb_purge_buffers (struct ftdi_context *ftdi) |
chip内のwrite/read bufferとプログラム内部のwrite/read bufferをclearする [戻り値]
-1:read bufferのclearに失敗 -2:write bufferのclearに失敗 -3:USB deviceが反応無し |
21 |
int ftdi_set_baudrate (struct ftdi_context *ftdi , int baudrate) |
chipにbaud rateを設定する。 [戻り値]
-1:baud rateの値が無効 -2:baud rateの設定失敗 -3:USB deviceが反応無し |
22 |
int ftdi_set_line_property (struct ftdi_context *ftdi , enum ftdi_bits_type bits , enum ftdi_stopbits_type sbit , enum ftdi_parity_type parity) |
RS232の通信設定(パリティチェック、ビットタイプ、ストップビット)を行う ftdi_set_line_property2()でbreak typeをBREAK_OFF(=off)に設定したもの [戻り値]
-1:設定失敗 |
23 |
int ftdi_set_line_property2 (struct ftdi_context *ftdi , enum ftdi_bits_type bits , enum ftdi_stopbits_type sbit , enum ftdi_parity_type parity , enum ftdi_break_type break_type) |
RS232の通信設定(パリティチェック、ビットタイプ、ストップビット、 ブレイクタイプ)を行う [戻り値]
-1:設定失敗 -2:USB deviceが反応無し |
24 |
int ftdi_read_data (struct ftdi_context *ftdi , unsigned char *buf, int size) |
chipから指定量のdataのを読み込む(ftdi_read_data_set_chunksize()参照) Read中の2つのモデム間のstatus bytesの送受信の分割は自動 [戻り値]
<0:usb_bulk_read()からのerror code 0:dataが無い >0:戻り値分のbyte数を取得 |
25 |
int ftdi_read_data_set_chunksize (struct ftdi_context *ftdi , unsigned int chunksize) |
read bufferの読み込みデータサイズを設定する。 Defaultは4096byte [戻り値]
-1:ftdi contextが無効 |
26 |
int ftdi_read_data_get_chunksize (struct ftdi_context *ftdi , unsigned int *chunksize) |
read bufferの読み込みデータサイズを取得する。 [戻り値]
-1:ftdi contextが無効 |
27 |
int ftdi_write_data (struct ftdi_context *ftdi , unsigned char *buf, int size) |
chipへ指定量のdataのを書き込む(ftdi_write_data_set_chunksize()参照) [戻り値]
<0:usb_bulk_write()からのerror code 0:dataが無い >0:書き込みbyte数 |
28 |
int ftdi_write_data_set_chunksize (struct ftdi_context *ftdi , unsigned int chunksize) |
write bufferの読み込みデータサイズを設定する。 Defaultは4096byte [戻り値]
-1:ftdi contextが無効 |
29 |
int ftdi_write_data_get_chunksize (struct ftdi_context *ftdi , unsigned int *chunksize) |
write bufferの書き込みデータサイズを取得する。 [戻り値]
-1:ftdi contextが無効 |
30 |
int ftdi_write_data_async (struct ftdi_context *ftdi , unsigned char *buf, int size) |
chipへ指定量のdataのを書き込む(ftdi_write_data_set_chunksize()参照) 転送が完了もしくは成功しなくてもwriteを実施する。 これは、まだ完了していない。またLinux上でlibusbを使ってのみ使用可能 [戻り値]
<0:usb_bulk_write()からのerror code >0:書き込みbyte数 |
31 |
void ftdi_async_complete (struct ftdi_context *ftdi , int wait_for_more) |
カーネルにより非同期URBsが完了するか使っていない非同期bufferの位置がマークされるまで待つ? (用途がよくわからん。。。) [戻り値]
|
32 |
int DEPRECATED (ftdi_enable_bitbang (struct ftdi_context *ftdi , unsigned char bitmask)) |
(これも用途がよくわからん。。。libftdi.cの中には、記述が見当たらないし) [戻り値]
|
33 |
int ftdi_disable_bitbang (struct ftdi_context *ftdi) |
bitbangモードを無効にする。 [戻り値]
-1:bitbangモードを無効にできない。 -2:USB deviceが反応無し |
34 |
int ftdi_set_bitmode (struct ftdi_context *ftdi , unsigned char bitmask , unsigned char mode) |
bitbangモードを有効にする。 [戻り値]
-1:bitbangモードを有効にできない。 -2:USB deviceが反応無し。 |
35 |
int ftdi_read_pins (struct ftdi_context *ftdi , unsigned char *pins) |
read bufferを使わないで直接pinの状態を読む。 bitbangモードの場合に有効。 [戻り値]
-1:pinの読み込みに失敗。 -2:USB deviceが反応無し。 |
36 |
int ftdi_set_latency_timer (struct ftdi_context *ftdi , unsigned char latency) |
待ち時間を設定する。
USB bus通信においてbufferがfullにならないようにFTDI chipが総時間に対してデータを保持しておく時間。 [戻り値]
-1:設定範囲外 -2:待ち時間が設定できない -3:USB deviceが反応無し |
37 |
int ftdi_get_latency_timer (struct ftdi_context *ftdi , unsigned char *latency) |
待ち時間を取得する。 [戻り値]
-1:待ち時間の取得ができない。 -2:USB deviceが反応無し |
38 |
int ftdi_poll_modem_status (struct ftdi_context *ftdi , unsigned short *status) |
Pollモデムの状態の情報を取得。 この機能は、deviceの2つのステータスbyteを取得する。 deviceは、ftdi_read_data()で捨てられるreadアクセスでのヘッダーとしてもこれらのbyteを送信する。 chipは、40ms毎にデータの無い中で2つの分かれた状態を示すbyteを生成する。 [戻り値]
-1:情報を回収できなかった -2:USBデバイス認識できず |
39 |
int ftdi_setflowctrl (struct ftdi_context *ftdi , int flowctrl) |
ftdi chipにflow controlの設定をする。 関数内部では、usb_control_msg()で設定している。 [戻り値]
-1:flow controlの設定に失敗。 -2:USBデバイス認識できず |
40 |
int ftdi_setdtr_rts (struct ftdi_context *ftdi , int dtr, int rts) |
1pass内にdtrとrstをsetする [戻り値]
-1:dtr/rstのsetに失敗 -2:USBデバイス認識できず |
41 |
int ftdi_setdtr (struct ftdi_context *ftdi , int state) |
dtrをセットする。
[戻り値]
-1:dtrのsetに失敗 -2:USBデバイス認識できず |
42 |
int ftdi_setrts (struct ftdi_context *ftdi , int state) |
rstをセットする。
[戻り値]
-1:rstのsetに失敗 -2:USBデバイス認識できず |
43 |
int ftdi_set_event_char (struct ftdi_context *ftdi , unsigned char eventch , unsigned char enable) |
イベントキャラクタを設定する。 usb_control_msg(...)にてusb_valに(enable設定値と)eventchを設定 [戻り値]
-1:eventchの設定に失敗 -2:USBデバイス認識できず |
44 |
int ftdi_set_error_char (struct ftdi_context *ftdi , unsigned char errorch , unsigned char enable) |
Errorキャラクタを設定する。 usb_control_msg(...)にてusb_valに(enable設定値と)errorchを設定 [戻り値]
-1:errorchの設定に失敗 -2:USBデバイス認識できず |
45 |
void ftdi_eeprom_setsize (struct ftdi_context *ftdi , struct ftdi_eeprom *eeprom , int size) |
EEPROMのサイズを設定する。 [戻り値]
|
46 |
void ftdi_eeprom_initdefaults (struct ftdi_eeprom *eeprom) |
EEPROMをdefault値で初期化する。 [戻り値]
|
47 |
void ftdi_eeprom_free (struct ftdi_eeprom *eeprom) |
EEPROMのメモリを開放する。 [戻り値]
|
48 |
int ftdi_eeprom_build (struct ftdi_eeprom *eeprom , unsigned char *output) |
ftdi_eeprom構造体からバイナリ情報を出力する。 出力情報は、ftdi_write_eeprom()に適応している。 [戻り値]
-1:EEPROMのサイズ(128 bytes)をユーザの文字列情報が超えている。 -2:EEPROMのポインタが無効 |
49 |
int ftdi_eeprom_decode (struct ftdi_eeprom *eeprom , unsigned char *output, int size) |
ftdi_eeprom構造体のバイナリEEPROMイメージをデコードする。 [戻り値]
-1:何らかの異常 |
50 |
int ftdi_read_eeprom (struct ftdi_context *ftdi , unsigned char *eeprom) |
EEPROMを読み込む [戻り値]
-1:読み込みに失敗 -2:USBデバイス認識できず |
51 |
int ftdi_read_chipid (struct ftdi_context *ftdi , unsigned int *chipid) |
R-typeのchipからFTDIChip-IDを読み込む。 [戻り値]
-1:読み込みに失敗 -2:USBデバイス認識できず |
52 |
int ftdi_read_eeprom_getsize (struct ftdi_context *ftdi , unsigned char *eeprom , int maxsize) |
EEPROMの中を読み半分を比較することにより EEPROMのサイズを推定する。 ブランク状態のEEPROMでは、この関数は多田市区動かないので一度書き込みをしてから実行する方が望ましい [戻り値]
-2:USBデバイス認識できず >=0:EEPROMのサイズ |
53 |
int ftdi_write_eeprom (struct ftdi_context *ftdi , unsigned char *eeprom) |
EEPROMに書き込みを行う。 [戻り値]
-1:書き込みに失敗 -2:USBデバイス認識できず |
54 |
int ftdi_erase_eeprom (struct ftdi_context *ftdi) |
EEPROMの内容を削除する。 [戻り値]
-1:削除に失敗 -2:USBデバイス認識できず |
55 |
int ftdi_read_eeprom_location (struct ftdi_context *ftdi , int eeprom_addr , unsigned short *eeprom_val) |
EEPROMのlocationを読み込む。 [戻り値]
-1:読み込みに失敗 -2:USBデバイス認識できず |
56 |
int ftdi_write_eeprom_location (struct ftdi_context *ftdi , int eeprom_addr , unsigned short eeprom_val) |
EEPROMのlocationを書き込む。 [戻り値]
-1:書き込みに失敗 -2:USBデバイス認識できず |
57 |
char *ftdi_get_error_string (struct ftdi_context *ftdi) |
最終のエラーコードより文字での説明を取得する。 [戻り値]
|
libFTDIのexample |
name | function |
baud_test |
対象機器は、VID=0x0403,PID=0x6001(FT232...)のみ。 serialモード(BITMODE_RESET),asyncモード(BITMODE_BITBANG),syncモード(BITMODE_SYNCBB)の ボーレートテストを行う。 |
bitbang |
対象機器は、VID=0x0403,PID=0x6001(FT245...)のみ。 Bitbangモードで0x00をUSB機器に書き込み、Bitbangモードで0xFFをUSB機器に書き込んだ後 buf[0]= 0 | (0xFF^1 << (i%8))なるbuf[0]を1ByteずつBitbangモードでUSB機器に書き込む。 |
bitbang2 |
対象機器は、VID=0x0403,PID=0x6001(FT232...)のみ。 ベースは、bitbang2232.c。 bitbang2 str1 str2 .... で指定した16進数を順に100ms毎にBitbangモードでUSB機器に書き込む。 |
bitbang_cbus |
対象機器は、FT232R。 CBUS Bitbangモードでpinの状態をReadする。 |
bitbang_ft2232 |
ft2232となっているがft2232dはPID=0x6010なので書き直さないといけないようだ。 で、FT2232のChannel A,Bを交互に対しての制御を行う。 INTERFACE_AとINTERFACE_Bを同時にopenして0x1,0x2を順に23回書いている。 |
find_all |
対象機器は、VID=0x0403,PID=0x6001(FT232R,FT245R...)のみ。 USB機器として対象のVIDとPIDを持った機器が接続されているかを確認。 |
find_all_pp |
オプション-v VVVV -p PPPP で指定したUSB機器がOpenできるかを確認する。 VVVVは、16進でVIDを、PPPPはPIDを記述。 openしたらすぐcloseしている。 オプションを付けない場合は、デフォルトでFT2232DのVID(0403),PID(6010)になる。 C++で記述。これに使う関数のsourceは、ftdippディレクトリの下。 |
serial_read |
serial_read [-i interface] [-v vid] [-p pid] [-b baudrate] で各オプションを指定してシリアル通信のreadを行う。 interface:INTERFACE_ANY = 0 INTERFACE_A = 1 INTERFACE_B = 2 INTERFACE_C = 3 INTERFACE_D = 4baudrateは、115200bpsで固定でオプション(-b)の指定は効いていないような感じ? |
simple |
対象機器は、VID=0x0403,PID=0x6001(FT232R,FT245R...)のみ。 USB機器をopenして dev->descriptor.bcdDeviceが0x600(TYPE_R)だった場合に FTDI chipidを表示してclose。 |
TopPage > FT2232D module > FT2232D module[01] |