FTDIのD2XXドライバーによって制御されるUSBデバイスがあります。現在、Pythonインターフェイスを介してWindowsマシンから制御されており、楽しいプロジェクトとして、制御をRaspberry Piに移動してみました(PCの約1/10のコストで、OSのコストは含まれていません)。
クリアすべきハードルはたくさんありましたが、数週間後、ようやくすべての答えが見つかり、機能するようになりました。回答はいくつかのフォーラムに分散されていたので、Stack Overflowコミュニティに感謝するために、ここでそれらを統合すると思いました。
まず、必要なプロジェクト:
- オペレーティングシステム: Raspberry PiのWebページから最新の「Wheezy」 Raspbian(ハードフロート2012-12-16)を取得しました。これにはPythonが含まれます。
- FTDIデバイスと通信するためのFTDID2XXドライバー。
- D2XXドライバーへのPythonインターフェース。PyUSBを使用しました
- Pythonスクリプト
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ライブラリを問題なく読み取ることができましたが、何らかの理由でデバイスと通信できませんでした。