MPSSE Setup

The Multi-Protocol Synchronous Serial Engine, or MPSSE, is the heart of the FT232H chip which allows it to speak many different protocols such as I2C, SPI, and more.  When the chip is in MPSSE mode it changes the D0 to D3 pins to have special serial protocol functions:

  • D0 - Clock signal output.  This line can be configured as a clock that runs at speeds between ~450Hz to 30Mhz.
  • D1 - Serial data output.  This is for outputting a serial signal, like the MOSI line in a SPI connection.
  • D2 - Serial data input.  This is for reading a serial signal, like the MISO line in a SPI connection.
  • D3 - Serial select signal.  This is a chip select or chip enable signal to tell a connected device that the FT232H is ready to talk to it.

In addition to the serial protocol pins above, the MPSSE mode allows you to control other pins as general purpose digital inputs or outputs.  These are great for controlling chip select, reset, or other lines on chips.  You can even use the GPIO to read switches, blink LEDs, and more!

The pins which are controllable as GPIO in MPSSE mode are D4 to D7 and C0 to C7, for a total of 12 GPIO pins.  These pins can be configured individually as digital inputs or outputs.

Note that pins C8 and C9 are not controllable as GPIO pins.  These two pins have a special function that can be set in the EEPROM of the chip--you'll learn more about these later.

To use the MPSSE mode of the chip you'll need to use some special software and programming libraries.  There are actually a few options for software that can talk to the FT232H and its MPSSE component:

  • FTDI's official D2XX drivers and libraries.
    • These drivers and libraries are produced by FTDI and provide low level access to FTDI chip functions.  There are binary versions of the library available for Windows, Mac OSX, and Linux.  This is a good option to consider if you run into limitations or issues with other drivers.  There's a good programming guide and example code available too.
  • FTDI's LibMPSSE-I2C and LibMPSSE-SPI libraries.
    • These libraries build on top of the D2XX driver above and provide a simpler interface to I2C and SPI communication with the FT232H's MPSSE component.
  • libFTDI library
    • This is an open source library that's similar to the D2XX library and provides a low level interface to FTDI chip functions.  There's even a Python interface which makes this library a little easier to use compared to the D2XX library.
  • libmpsse library
    • Like the libMPSSE-I2C and libMPSSE-SPI libraries, this library builds on the libFTDI library and provides a simpler interface for I2C and SPI protocols using the MPSSE component.  One thing to note is that his library is currently only supported on Mac OSX and Linux.
  • Adafruit Python GPIO library
    • To make using the FT232H simpler, Adafruit's Python GPIO library has been updated to include a simple interface for accessing GPIO, SPI, and I2C on the FT232H with the Python programming language.  Using this library you can control the GPIO pins and send or received SPI & I2C commands much like programming those interfaces on a Raspberry Pi or BeagleBone Black.  This library is built on top of the libFTDI library and supports Windows, Mac OSX, and Linux platforms.

In this guide I'll show you how to setup and use the Adafruit Python GPIO library to access GPIO, SPI, and I2C devices using the FT232H board's MPSSE component.  You can write Python programs to control GPIO pins and send/receive SPI & I2C commands directly from your computer using the FT232H breakout.

One thing to note, when you're using the MPSSE mode of the FT232H the serial UART mode will be disabled.  This means you can't use both the serial UART and MPSSE GPIO, SPI, I2C, etc. modes of the chip at the same time.

To learn how to enable MPSSE modes and install the Adafruit Python GPIO library, continue on to the next page that's appropriate for your platform (Windows, Mac OSX, or Linux).

This guide was first published on Nov 12, 2014. It was last updated on Nov 12, 2014. This page (MPSSE Setup) was last updated on May 04, 2015.