Datasheet
SPI
The FT232H's MPSSE is great for generating signals to communicate using the SPI protocol. (http://adafru.it/cEC) The MPSSE
can take care of generating a clock signal from about 450hz to 30Mhz, and read & write bytes of data at that frequency. The
Python GPIO library that was installed includes a small wrapper around MPSSE functions to simplify the use of reading and
writing SPI data.
When using SPI with the FT232H the following pins will have a special meaning:
D0 - SCK / Clock signal. This will be the clock that tells devices when to sample and write data.
D1 - MOSI / Data Out. This will output data from the FT232H to the connected device.
D2 - MISO / Data In. This will read data from the connected device to the FT232H.
One thing to note is that there isn't an explicit chip select / enable pin. You should use any of the free GPIO pins as a dedicated
chip select pin and specify that pin when creating the SPI object.
To use SPI with the Python library you need to create an instance of the Adafruit_GPIO.FT232H.SPI class. For example see the
following code:
import Adafruit_GPIO.FT232H as FT232H
# Temporarily disable FTDI serial drivers.
FT232H.use_FT232H()
# Find the first FT232H device.
ft232h = FT232H.FT232H()
# Create a SPI interface from the FT232H using pin 8 (C0) as chip select.
# Use a clock speed of 3mhz, SPI mode 0, and most significant bit first.
spi = FT232H.SPI(ft232h, cs=8, max_speed_hz=3000000, mode=0, bitorder=FT232H.MSBFIRST)
# Write three bytes (0x01, 0x02, 0x03) out using the SPI protocol.
spi.write([0x01, 0x02, 0x03])
Notice that the code starts by importing the FT232H part of the GPIO library and disabling the FTDI serial drivers as your saw in
the GPIO example.
Next the code creates a FT232H object also like was done in the GPIO example.
The next line of code creates a FT232H.SPI object using the FT232H device that was just created. An optional chip select/slave
select line is specified using GPIO 8 / pin C0 with the cs parameter value.
Notice too the speed, mode, and bit order of the SPI protocol are specified as parameters of the initializer. Mode 0 and bit order
of MSBFIRST are actually the default values and do not necessarily need to be specified here, but it's helpful to show them for
clarity.
Possible mode values are 0 through 3 and they correspond to SPI mode values for AVR processors (http://adafru.it/cEC).
Bitorder can be either MSBFIRST for most significant bits to be clocked out first, or LSBFIRST for the least significant bits to be
clocked out first.
Finally the last line shows how to send 3 bytes of data out the D1 (MOSI) line using the write() function. The D0 (SCK) line will
generate a clock signal, and the D1 (MOSI) line will clock out bits of data with every clock pulse.
There are also SPI functions you can use to read and transfer (read and write at the same time) data:
# Read 3 bytes of data using the SPI protocol.
response = spi.read(3)
print 'Received {0}'.format(response)
# Write 3 bytes and simultaneously read 3 bytes using the SPI protocl.
response = spi.transfer([0x01, 0x02, 0x03])
print 'Received {0}'.format(response)
© Adafruit Industries https://learn.adafruit.com/adafruit-ft232h-breakout Page 27 of 36










