python-ft4222
The FT4222H is a High/Full Speed USB2.0-to-Quad SPI/I2C device controller. This project
provides (incomplete) python binding to LibFT4222
(user guide).
It provides a similar api than LibFT4222 does.
The complete documentation can be found here
Example
I2C Master
import ft4222
import ft4222.I2CMaster
nbDev = ft4222.createDeviceInfoList()
for i in range(nbDev):
print(ft4222.getDeviceInfoDetail(i, False))
dev = ft4222.openByDescription('FT4222 A')
dev.i2cMaster_Init(100000)
slave = 1
data = dev.i2cMaster_ReadEx(slave, ft4222.I2CMaster.Flag.REPEATED_START, 1)[0]
data += dev.i2cMaster_ReadEx(slave, ft4222.I2CMaster.Flag.NONE, 5)
data += dev.i2cMaster_ReadEx(slave, ft4222.I2CMaster.Flag.STOP, 1)
GPIO
import time
import ft4222
from ft4222.GPIO import Dir, Port, Output
dev = ft4222.openByDescription('FT4222 A')
dev.setSuspendOut(False)
dev.setWakeUpInterrupt(False)
dev.gpio_Init(gpio2 = Dir.OUTPUT)
while True:
dev.gpio_Write(Port.P2, output)
output = not output
time.sleep(0.1)
SPI Master and GPIO
The gpio used in this example indicate the duration of the whole spi transfer and is not used as chip/slave select.
import ft4222
from ft4222.SPI import Cpha, Cpol
from ft4222.SPIMaster import Mode, Clock, SlaveSelect
from ft4222.GPIO import Port, Dir
from time import sleep
devA = ft4222.openByDescription('FT4222 A')
devB = ft4222.openByDescription('FT4222 B')
devA.spiMaster_Init(Mode.SINGLE, Clock.DIV_8, Cpol.IDLE_LOW, Cpha.CLK_LEADING, SlaveSelect.SS0)
devB.gpio_Init(gpio0 = Dir.OUTPUT)
data = bytes([x for x in range(256)]*4)
devB.gpio_Write(Port.P0, 1)
for _ in range(3):
devA.spiMaster_SingleWrite(data, True)
sleep(0.5)
devB.gpio_Write(Port.P0, 1)
Accessrights
Under Linux, the usb device is normally not accessibly by a normal user, therefor
a udev rule is required. Create or extend /etc/udev/rules.d/99-ftdi.rules
to
contain the following text:
SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="601c", GROUP="plugdev", MODE="0666"
Requirements
Windows
MSVCR100.dll/MSVCP100.dll from Microsoft Visual C++ 2010 Redistributable Package
need to be installed. Today, on most systems, these DLLs (or the package) should
already be installed.