| Interaction with FTDI chip |
|
|
|
| Thursday, 09 July 2009 18:35 |
|
This article shows how to use FTDI API to interact with the devices, which have FTDI chip within. The basic API set necessary for common operations is described. The article also touches upon topic of FTDI chips EEPROM programming. Contents What is FTDI chip?FTDI chips are the chips which are developed by Future Technology Devices International (http://www.ftdichip.com/ ). FTDI chips are used in USB adapters to connect to RS232 and parallel FIFO hardware interfaces. The most frequent usage is USB-2-COM interface. They are used in:
How to find out if the device is FTDI-based?Well, you may disassemble it and read the labels on the chips, but it’s not the way you want it. There’s more humane method. There are original drivers on FTDI site. If you look at the files which are included into the driver package there will be such set of files:
So if your device has any of these files in the driver list it’s FTDI-based. To see the drivers for the device:
For example:
This device has FTD2XX.dll in the driver files list. And the provided name is FTDI. This device is FTDI-based. Some manufacturers may rename the driver (.sys), but the copyright information will reveal the real driver manufacturer. How to interact with it?Fortunately, FTDI provides the API. There’s a generic API set which can be used with all FTDI chips. API is provided via FTD2XX.dll. It’s a DLL which interacts with FTD2XX.SYS driver.
There’s a header file and library file within FTDI driver package: ftd2xx.h and ftd2xx.lib files. The .lib file is COFF format, so it can be used in Visual Studio without any problem. FTDI API usageThe API set has two interfaces “classical” (functions with “Classical” is cross-platform interface. “Win32 API” is a set of Windows-only functions. It’s much alike Windows API, which is used to work with serial ports. So porting the code to FTDI functions is quite simple. The main functions are:
There are functions that allow to set up the port:
etc. For Windows there’s no limitation about using the functions of Classical and Win32 API interfaces together. So you may combine it. Opening the virtual serial portThere are multiple ways to open FTDI device: by index, by description, by serial number, by location. These types of information may be used to open the device via To obtain the information about the connected devices Example: There are several functions, which can provide the additional information about the connected devices:
Setting up the portThe code for setting the typical serial port settings to 115200 Bps, 8 bit per byte, 1 stop bit and no parity will look like this: Also there are functions to setup the port in Windows style:
Reading and WritingUsage of EEPROM programmingThere are also APIs that allow to program FTDI chip. FTDI chip has EEPROM within it. EEPROM contains the chip settings block and the user area block. It’s possible to read and write both of these blocks. Warning! Programming EEPROM is dangerous operation. Writing the invalid data may cause improper work of the device. You are doing it at your own risk. APIsThe APIs to manage user area block:
Reading the area is quite simple: The APIs to manage whole EEPROM:
Dumping EEPROMDumping EEPROM is a bit tricky, because some chips have the internal EEPROM, and some may have external one. Quote: The FT2232C supports 93C46 (64 x 16 bit), 93C56 (128 x 16 bit), and 93C66 (256 x 16 bit) EEPROMs. So there can be various sizes. Here’s the example of EEPROM dumping for 64 x 16 bit: Here’s a second trick. If you look at the function declaration for
Data in the settings blockThe settings block contains VID and PID of USB device, so if it’s changed, the device will be treated like some other device. Default values of VID and PID for FTDI chip are 0x0403 and 0x6001 accordingly, but these values are overwritten by the device manufacturers. The settings block contains the product description strings (USB String descriptors): Manufacturer, Manufacturer ID and Description. Also there’s device serial number, which can be changed by EEPROM programming. Warning one more time! Changing the EEPROM setting may also cause the software failures if the invalid data is written to EEPROM.
Download sample FTDI source code. LinksThe information about FTDI chips can be found in Data Sheets part of FTDI official site: Additional information about API can be found in FTD2XX Programming Manual: Driver Package: |









