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

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

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

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

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

PyUSB (1.6) в настоящее время протестирована только на Windows, но они предоставляют исходный код. Довольно просто скомпилировать копию для Raspberry Pi. В основном, изменить setup.py для связи с libftd2xx.поэтому библиотека (не нужно копировать он.) Также отредактируйте 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.Итак, файл. Итак, я подправил setup.py скрипт для ссылки на статическую копию библиотеки libftd2xx.a. Вуаля, у меня был первый ключ к проблеме: библиотека D2XX была построена с использованием soft-float, и мой хриплый дистрибутив был настроен на использование регистров с плавающей запятой. То есть gcc в моей системе сгенерировал код, который был двоичным, несовместимым с библиотеками D2XX и не позволял им быть связанными.

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

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

2 ответов


Я не был уверен, в чем проблема: это был PyUSB, проблема с libftd2xx FTDI.Итак, или какая-то проблема с дистрибутивом Debian?

С пакетом FTDI есть тест, под release/examples/EEPROM/read. Вы должны построить его, но это просто вопрос команды make. Запустив его (через sudo), он не смог открыть USB-устройство, поэтому ясно, что это не PyUSB. После осмотра я нашел ссылку на драйвер ftdi_sio и что он может конфликтовать с другими драйверами D2XX. Итак, используя lsmod, Я видел, что ftdi_sio уже установлен по умолчанию, поэтому я побежал rmmod ftdi_sio. После этого все работало. Команда read должна показать что-то вроде этого:

Library version = 0x10112
Opening port 0
FT_Open succeeded.  Handle is 0xf7d240
FT_GetDeviceInfo succeeded.  Device is type 4.
FT_EE_Read succeeded.
Signature1 = 0
Signature2 = -1
Version = 1
VendorId = 0x0407
ProductId = 0x6009
Manufacturer = MagicIncorporated
ManufacturerId = wo
Description = MyCompany Test Board
SerialNumber = testit_028
MaxPower = 44
PnP = 1
SelfPowered = 0
RemoteWakeup = 1
2232RC:
-------
    Rev5 = 0x1
    IsoInA = 0x0
    IsoInB = 0x0
    IsoOutA = 0x0
    IsoOutB = 0x0
    PullDownEnable5 = 0x0
    SerNumEnable5 = 0x0
    USBVersionEnable5 = 0x0
    USBVersion5 = 0x110
    AIsHighCurrent = 0x0
    BIsHighCurrent = 0x0
    IFAIsFifo = 0x0
    IFAIsFifoTar = 0x0
    IFAIsFastSer = 0x0
    AIsVCP = 0x0
    IFBIsFifo = 0x0
    IFBIsFifoTar = 0x0
    IFBIsFastSer = 0x0
    BIsVCP = 0x0
Returning 0

Я также переключился с PyUSB на ftd2xx, потому что это чистый python, но это не было строго необходимо.


существует специальная версия libftd2xx 1.1.12, которая устраняет проблемы на Raspberry pi. Это, вероятно, решит вашу проблему.

Я забыл, где я его нашел, но у меня есть копия на странице загрузки моего сайта, Lightput страница загрузки.