Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
FTDI device driver written in pure Python

This branch is 125 commits behind master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
.gitignore Fix up USB control transfer so that PyFtdi works with pyusb 1.0.0a1 a…
README.rst Code clean up and add FT2232D as a supported device




PyFtdi aims at providing a user-space driver for modern FTDI devices, implemented in pure Python language.

Modern FTDI devices include:

  • FT2232D (dual port, clock up to 6 MHz)
  • FT2232H (dual port, clock up to 30 MHz)
  • FT4232H (quad port, clock up to 30 MHz)

Other FTDI devices could also been supported (including FT232* devices), although these devices are not a primary goal for PyFtdi, and therefore have not been tested with PyFtdi.

Primary goals

It should support the following modes:

  • UART/Serial USB converter, up to 12Mbps (depending on the FTDI device capability)
  • SPI master
  • JTAG master
  • Bitbang/GPIO support (not a primary goal)

PyFtdi should provide a pyserial compliant API, so it can be used as a drop-in module to access USB-serial converters based on FTDI devices.


PyFtdi relies on PyUSB, which itself depends on one of the following native libraries:

  • libusb-1.0 (recommended)
  • libusb-0.1 (deprecated)
  • openusb (not tested with pyftdi)

PyFtdi does not depend on any other native library, and only uses standard Python modules.

Python 2.6 or above is required. Python 3.x is not yet supported.


This project is still in an early alpha development stage.

However, PyFtdi is being forked from a closed-source software implementation that has been successfully used for over a year - including serial, spi and jtag protocols, based on top of the libftdi open source library.

libftdi is now being phased out from this closed-source project and replaced with PyFtdi, to ease maintenance and customization.

Meanwhile, PyFtdi is developed as an open-source solution.

Supported features

  • All FTDI device ports (UART, MPSSE) can be used simultaneously.
  • Serial port, up to 12 Mbps. PyFtdi includes a pyserial emulation layer that offers transparent access to the FTDI serial ports through a pyserial- compliant API. serialext directory contains a minimal serial terminal that demonstrates the use of this extension, and a dispatcher that automatically selects the serial backend (pyserial, PyFtdi), depending on the serial port name.
  • SPI master. PyFtdi includes several examples that demonstrate how to use the FTDI SPI master, with a pure-Python serial flash device driver for several common serial flash devices. These tests show an average 400 KB/s read out from the flash devices running with a 6MHz SPI clock on a Core2Duo Mac Book Pro.


PyFtdi is developed on Mac OS X platforms (including 64-bit kernels), and is validated on a regular basis on Linux hosts.

As it contains no native code, it should work on any platforms PyUSB and libusb support (including, but not limited to, Windows).

Something went wrong with that request. Please try again.