6

FTDIのD2XXドライバーによって制御されるUSBデバイスがあります。現在、Pythonインターフェイスを介してWindowsマシンから制御されており、楽しいプロジェクトとして、制御をRaspberry Piに移動してみました(PCの約1/10のコストで、OSのコストは含まれていません)。

クリアすべきハードルはたくさんありましたが、数週間後、ようやくすべての答えが見つかり、機能するようになりました。回答はいくつかのフォーラムに分散されていたので、Stack Overflowコミュニティに感謝するために、ここでそれらを統合すると思いました。

まず、必要なプロジェクト:

Wheezyディストリビューションをダウンロードし、Win32DiskImagerを使用して4GBSDカードに書き込みました。RaspberryPiは問題なく起動しました。次に、D2XXライブラリ(libftd2xx.so)を解凍し、にインストールしました/usr/local/lib

PyUSB(1.6)は現在、Windowsに対してのみテストされていますが、ソースコードを提供します。RaspberryPiのコピーをコンパイルするのは非常に簡単です。基本的に、setup.pyを変更してlibftd2xx.soライブラリにリンクします(コピーする必要はありません)。また、d2xx / _d2xx.cを編集して、Linuxが実装されていないルーチン(現在はftobj_Rescan、ftobj_Reload ftobj_GetComPortNumber)をコメントアウトします。WinTypes.hとftd2xx.hをFTDID2XXドライバーダウンロード(リリース内)ディレクトリからftdi-win32にコピーして実行python setup.py installすると、Pythonモジュールがコンパイルおよびインストールされます。

それがすべて終わったら、FTDIチップと通信するための簡単なPythonスクリプトを作成しました。sudoを介して実行する必要があることに注意してください。

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

d2xxモジュールはlibftd2xx.soファイルを見つけられなかったようです。そこで、setup.pyスクリプトを微調整して、ライブラリの静的コピーlibftd2xx.aにリンクしました。出来上がり、私は問題の最初の手がかりを持っていました。D2XXライブラリはソフトフロートを使用して構築され、Wheezyディストリビューションは浮動小数点レジスタを使用するように構成されていました。つまり、私のシステムのgccは、D2XXライブラリとバイナリ互換性がなく、それらをリンクできないコードを生成しました。

これを修正するために、ソフトフロートのDebian「wheezy」ディストリビューション(2012-08-08)をダウンロードし、4GBSDカードに書き込みました。今回はイメージが起動しませんでした。周りを見回した後、私はこの有用な答えを見つけました。つまり、ソフトフロートのブートイメージに問題があるため、一部のRaspberryPiボードではブートされません。解決策は、ソフトフロートディストリビューションのstart.elfファイルを、ハードフロートのRaspbianイメージからのコピーなどの機能するファイルに置き換えることです。幸い、SDカードにはFATパーティションとext3(?)パーティションの2つのパーティションがあります。ブートイメージはFATパーティション上にあるため、ハードフロートSDカードをWindowsボックスにポップし、start.elfファイルをコピーし、ソフトフロートSDカードをポップして、そのstart.elfをハードで更新するのは簡単でした。 -フロート1。その後、RaspberryPiは問題なく起動しました。

FTDIのD2XXドライバーをインストールし、PyUSBからd2xx Pythonモジュールを構築した後、テストスクリプトを再試行しました。再び失敗しました。d2xxモジュールはlibftd2xx.soライブラリを問題なく読み取ることができましたが、何らかの理由でデバイスと通信できませんでした。

4

2 に答える 2

4

問題がどこにあるのかわかりませんでした。それはPyUSBなのか、FTDIのlibftd2xx.soの問題なのか、それとも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

また、純粋なPythonであるため、PyUSBからftd2xxに切り替えましが、厳密には必要ありませんでした。

于 2013-01-30T22:56:17.097 に答える
1

Raspberrypiの問題を修正するlibftd2xx1.1.12の特別なバージョンがあります。それはおそらくあなたの問題を解決するでしょう。

どこで見つけたか忘れてしまいましたが、自分のWebサイトのダウンロードページであるLightputダウンロードページにコピーがあります。

于 2013-01-31T19:50:45.043 に答える