Микросхемы шотландской компании Future Technology Devices International широко известны ембеддерам во всем мире не только как преобразователь USB-UART, а и как простой способ реализации портов ввода-вывода через USB. В отличие от применения для этих целей микроконтроллеров, микросхемы ft232 и ft2232 не требуют предварительной прошивки а управляющий софт пишется под операционную систему USB-хоста. 

Для взаимодействия с микросхемой на хосте на данный момент предлагается библиотека libFTDI, поддерживаемая немецкой фирмой Intra2net. Библиотека распространяется в виде исходных кодов, в результате сборки которых создаются динамические бибилиотеки, заголовочные файлы для С/С++ а также обвертка для Python.

Сборка и установка libFTDI в Linux

Первое, что необходимо, это инструментарий для сборки (компиляторы, мейки и все прочее), плюс libUSB, boost, cmake, и swig(будет использован для генерации Python-обвертки). Я буду показывать на примере ArchLinux, в других дистрибутивах все будет аналогично за исключением пакетного менеджера (и в некоторых случаях имен пакетов):

pacman -S base-devel wget libusb libusb-compat unzip libtool git cmake swig boost

Заметьте, что base-devel - это не один пакет а целая группа пакетов, поэтому в других дистрибутивах возможно придется устанавливать пакеты отдельно. Кстати при вопросе Arch-евского pacman-а о выборе объектов из группы base-devel, я советую выбрать все.

Еще дам аналогичный пример для дистрибутива Fedora 16

sudo yum groupinstall "Development Tools"
sudo yum install cmake libusb1-devel boost-devel swig python-devel libconfuse

После установки всех пакетов делаем следующее:

wget  http://www.intra2net.com/en/developer/libftdi/download/libftdi1-1.1.tar.bz2 
tar -xf libftdi1-1.1.tar.bz2 
cd libftdi1-1.1
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX="/usr" ../

После вызова cmake появится вывод зависимостей, например:

-- Build type: RelWithDebInfo
-- Boost version: 1.55.0
-- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE) 
-- Not generating API documentation
fatal: Not a git repository (or any parent up to mount point /home)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
-- Detected git snapshot version: unknown
-- Building libftdi1++
-- Found SWIG: /usr/bin/swig (found version "3.0.2") 
-- Building python bindings via swig. Will be installed under /usr/lib/python3.4/site-packages
-- Could NOT find Confuse (missing:  CONFUSE_LIBRARY CONFUSE_INCLUDE_DIR) 
-- libConfuse not found, won't build ftdi_eeprom
-- Building example programs.
-- Building libftdi++ examples.
-- Boost version: 1.55.0
-- Found the following Boost libraries:
--   unit_test_framework
-- Building unit test
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/tmp/libftdi1-1.1/build

Кое-что здесь можно проигнорировать, например запись "fatal: Not a git repository", говорит что в данной папке нету репозитория системы управления версий git, которую не предоставили разработчики, да она и не нужна. Сообщение "Сould NOT find Doxygen"  говорит об отсутствии программы doxygen, которая должна генерировать документацию из комментариев кода либы. Мне такая документация на данный момент не нужна, поэтому меня не сильно волнует данное предупреждение. Тоже самое касается библиотеки libConfuse, предназначенной для удобного парсинга конфигурационных файлов и используемой в примере работы с EEPROM FTDI, который меня тоже не интерисует. 

Если остальное все в порядке, можно смело выполнять сборку и установку в системные директории:

make
sudo make install

Вот и все. Собранные файлы валяются по путям(в x64 дистрибутивах вместо lib будет lib64):

/usr/lib/pkgconfig/libftdi1.pc
/usr/lib/pkgconfig/libftdipp1.pc
/usr/bin/libftdi1-config
/usr/lib/cmake/libftdi1/LibFTDI1Config.cmake
/usr/lib/cmake/libftdi1/UseLibFTDI1.cmake
/usr/lib/libftdi1.so.2.1.0
/usr/lib/libftdi1.so.2
/usr/lib/libftdi1.so
/usr/lib/libftdi1.a
/usr/include/libftdi1/ftdi.h
/usr/lib/libftdipp1.so.2.1.0
/usr/lib/libftdipp1.so.2
/usr/lib/libftdipp1.so
/usr/lib/libftdipp1.a
/usr/include/libftdi1/ftdi.hpp
/usr/lib/python3.4/site-packages/ftdi1.py
/usr/lib/python3.4/site-packages/_ftdi1.so
/usr/share/libftdi/examples/simple.py
/usr/share/libftdi/examples/complete.py

Что из этого нужно, определяйте в зависимости от применения. Например если вы будете писать на пайтоне, то понадобится обвертка ftdi1.py, ссылочный so-шник _ftdi1.so и основной so-шник(плюс два so-щника-линка для универсального обращения): libftdi1.so.2.1.0, libftdi1.so.2 libftdi1.so. Кстати в /usr/share/libftdi/examples/ лежит пару отличных примеров для питона!

Сборка и установка libFTDI в Windows при помощи Cygwin

В Windows сборка выполняется точно так же как и в Linux, но все операции нужно выполнять в среде Cygwin. Кстати в одном из постов я расскажу как запускать Cygwin в нормальном терминале (вместо стандартной командной строки Windows).

Чтобы не получить лишних проблем на свою голову, весьма желательно позаботится о том, чтобы в переменных среды не было ни каких лишних компиляторов, и сред вроде MinGW. В идеале лучше взять чистый Windows в виртуалке (благо их можно копировать в любом момент времени).

Далее скачиваем установщик cygwin (я выбрал 32-х разрядный setup-x86.exe), запускаем его и нажимаем "Далее" до окна выбора пакетов(Select Packages). Тут необходимо отметить для установки все зависимости, которые указывались в пакетном менеджере. А именно:

gcc-core
gcc-g++
cmake
automake
make
libtool
libboost-devel
libboost1.53
libusb1.0
libusb1.0-devel
wget
git
python
pkgconfig
swig
unzip

Если  вы не в курсе, то для установки пакета нужно ввести его имя в поле "Search", затем раскрыть категории и найти этот пакет. Затем нажать "Skip", в результате чего вместо Skip должна появится версия. Ищите точные совпадения имен пакетов, которые я указал выше (то есть если написано automake, то нужно найти automake а не automake1.10).

Все, далее все точно как в linux, начиная с "wget".

В результате будут получены те же файлы, но динамические библиотеки будут иметь расширение .dll. Для функционирования приложений на "чистых" системах эти файлы нужно будет поставлять вместе с выполняемым файлом (в той же директории, либо копировать в system32).

Драйверы

В linux нужен libusb, который установлен по умолчанию.

В Windows рекомендуется применять Zadig, который позволяет установить один из трех вариантов libusb, а именно это:

  1. WinUSB
  2. libusbK
  3. libusb-win32

Подходит либо первый либо второй варианты. Я выбрал первый. При том на момент запуска Zadig, Windows уже может установить свой драйвер, который не подходит. Поэтому после подключения устройства FTDI и запуска Zadig в меню нужно выбрать Options -> List All Devices. Затем в главном списке найти чип FTDI, и нажать Reinstall (Или Install, если драйвер не был автоматически установлен).