libFTDI - FTDI USB driver with bitbang mode

libFTDI is an open source library to talk to FTDI chips:

  • FT230X
  • FT4232H / FT2232H
  • FT232R / FT245R
  • FT2232L / FT2232D / FT2232C
  • FT232BM / FT245BM (and the BL/BQ variants)
  • FT8U232AM / FT8U245AM
The library is linked with your program in userspace, no kernel driver required.
libFTDI works perfectly with Linux, Windows, MacOS X and BSD variants thanks to libusb.

If you have questions or want to talk to other developers, join the mailing list.


2020-07-07: Version 1.5 of libftdi released

  • Implement tc[io]flush methods & deprecate broken purge_buffers methods

    Please check your code for ftdi_usb_purge_rx_buffer(), ftdi_usb_purge_tx_buffer() and ftdi_usb_purge_buffers() and migrate to the new ftdi_tc[io]flush() methods.

    Old code will continue to function, but you'll get a deprecation warning during compilation.

  • Add program to test buffer flush (purge) functionality
  • Add kernel driver auto attach/detach.
  • Add ftdi_setflowctrl_xonxoff()
  • ftdi_eeprom / eeprom handling:
    • Unify handling of all boolean eeprom flags
    • Add device release number support
    • Add channel_a_driver support for type xxR chips
    • Add support for group0 drive levels on x232H chips
    • Fix handling of high_current_drive parameter
    • Fix inverted handling of VCP driver field for TYPE_R chips
    • New --verbose option for eeprom decode operation
  • Add example code for async mode
  • Add SPDX license identifiers to the core library & ftdi_eeprom
  • Various python SWIG wrapper improvements
  • Various cmake file improvements
  • Fix small bugs in error code paths
2017-08-07: Version 1.4 of libftdi released
  • New ftdi_usb_open_bus_addr() open function
  • Use BM/R series baud rate computation for FT230X
  • ftdi_get_error_string() now returns const char*
  • C++ API: Ability to open devices with empty descriptor strings
  • C++ API: Fix enumerations for buffer purge and modem controls
  • small build fixes and improvements in the python examples
  • ftdi_eeprom / eeprom handling:
    • New API function: ftdi_eeprom_get_strings()
    • Fix USE_SERIAL handling for 230X type chips
    • Make ftdi_read_eeprom_location() endianness independent
    • Fix flashing of FT245R
2016-05-20: Version 1.3 of libftdi released
  • Added ftdi_usb_get_strings2() to prevent automatic device close (Fahrzin Hemmati)
  • Added ftdi_transfer_data_cancel() for cancellation of a submitted transfer, avoided resubmittion of a canceled transfer in the callbacks, replaced calls to libusb_handle_events with libusb_handle_events_timeout_completed (Eugene Hutorny)
  • ftdi_eeprom / eeprom handling:
    • Add support for arbitrary user data (Salvador Eduardo Tropea)
    • Add --build-eeprom support (Salvador Eduardo Tropea)
    • Fix use_usb_version config file option (Thilo Schulz)
    • Ability to include other config files in EEPROM config file (Thilo Schulz)
    • Add external oscillator enable bit (Raphael Assenat)
    • Support channel configuration (Stephan Linz)
    • Added --device option to ftdi_eeprom to specify FTDI device (Robin Haberkorn)
    • Fixed EEPROM user-area space checks for FT232R and FT245R chips (Robin Haberkorn)
  • Various improvements to CBUS handling, including the EEPROM (Robin Haberkorn)
  • swig wrapper: Fix handling of binary strings in ftdi_write_data() for python 3 (xantares09)
  • cbus python example code (Rodney Sinclair)
  • ftdi_stream: fix timeout setting (Ларионов Даниил)
  • Fixed typo in CBUS defines: CBUSG_DRIVE1 -> CBUSH_DRIVE1


The library itself is licensed under LGPL 2.1 (not any later),
the EEPROM programmer is licensed under GPL 2 (not any later)