Использование драйверов FTDI D2XX с Python от Raspberry Pi на raspbian soft-float

У нас есть USB-устройство, управляемое драйверами FTDI D2XX. В настоящее время он управляется с компьютера под управлением Windows через интерфейс Python, и в качестве забавного проекта я попытался перенести элемент управления на Raspberry Pi (примерно 1/10 стоимости ПК, не включая стоимость ОС).

Было много препятствий, которые нужно преодолеть, но через несколько недель я наконец нашел ответы на все вопросы и заставил их работать. Ответы были распределены по нескольким форумам, поэтому в качестве благодарности сообществу Stack Overflow я решил объединить их здесь.

Во-первых, проект требует:

Операционная система: я взял последнюю«Хриплый» Raspbian (hard-float 2012-12-16) изRaspberry Pi веб-страница, Это включало Python.Драйверы FTDI D2XX поговорить с нашим устройством FTDI.Интерфейс Python для драйвера D2XX. я использовалPyUSBНаш скрипт на Python

Я скачал дистрибутив Wheezy и использовал Win32DiskImager для записи на 4 ГБ SD-карту. Raspberry Pi загрузился без проблем. Затем я распаковал библиотеку D2XX (libftd2xx.so) и установил ее в/usr/local/lib.

PyUSB (1.6) в настоящее время тестируется только под Windows, но они предоставляют исходный код. Довольно просто собрать копию для Raspberry Pi. В основном, измените файл setup.py, чтобы он связывался с библиотекой libftd2xx.so (копировать ее не нужно). Также отредактируйте d2xx / _d2xx.c, чтобы закомментировать подпрограммы без реализации Linux (в настоящее время ftobj_Rescan, ftobj_Reload ftobj_GetComPortNumber). Скопируйте WinTypes.h и ftd2xx.h из каталога загрузки драйвера FTDI D2XX (в выпуске) в ftdi-win32 и запуститеpython setup.py install который скомпилирует и установит модуль Python.

Как только все это было сделано, я написал простой скрипт на Python для общения с чипом FTDI. Обратите внимание, что вам нужно запустить через sudo.

import d2xx
jd = d2xx.open(0)
pd = jd.eeRead()
print pd

Модуль d2xx не может найти файл libftd2xx.so. Итак, я настроил скрипт setup.py для ссылки на статическую копию библиотеки libftd2xx.a. Вуаля, у меня был первый ключ к решению проблемы: библиотека D2XX была построена с использованием soft-float, а мой дистрибутив Wheezy был настроен на использование регистров с плавающей запятой. То есть gcc в моей системе сгенерировал код, который был двоичным несовместимым с библиотеками D2XX и не позволял им связываться.

Чтобы это исправить я скачалдистрибутив soft-float для Debian "wheezy" (2012-08-08) и записал на 4 ГБ SD карту. На этот раз образ не загрузится. Посмотрев вокруг, я нашел этополезный ответ, Короче говоря, существует проблема с загрузочным образом для soft-float, так что для некоторых плат Raspberry Pi он не загружается. Решение состоит в том, чтобы заменить файл start.elf в дистрибутиве soft-float файлом, который работает, например. копия с расплавленного изображения Распбиана. К счастью, на SD-карте есть два раздела: FAT и ext3 (?). Загрузочный образ находится в разделе FAT, поэтому было довольно просто вставить жестко плавающую SD-карту в коробку Windows, скопировать файл start.elf, вставить мягкую плавающую SD-карту и обновить ее start.elf жестким плавающий один. После этого Raspberry Pi загрузился без проблем.

После установки драйверов FTDI D2XX и сборки модуля Python d2xx из PyUSB я снова попробовал тестовый скрипт. Снова это не удалось. Модуль d2xx мог читать библиотеку libftd2xx.so без проблем, но по какой-то причине просто не мог общаться с устройством.

Ответы на вопрос(2)

Ваш ответ на вопрос