Armadilloフォーラム

Top16 USB IO module の制御について

urasue

2023年8月22日 16時42分

いつもお世話になっております。
Top16 USB IO moduleというUSB-IOボードを使ってIOの制御を行おうとしております。
このボードは、FTDI社のチップが載っており libftd2xx.soというライブラリを使って制御するようなのですが、
ライブラリが見つかりません。
X2のコンテナ上(Debian)から利用したいのですが、 libftd2xx.soをどの様にインストールすればよいでしょうか。

コメント

溝渕です。

> このボードは、FTDI社のチップが載っており libftd2xx.soというライブラリを使って制御するようなのですが、
> ライブラリが見つかりません。
> X2のコンテナ上(Debian)から利用したいのですが、 libftd2xx.soをどの様にインストールすればよいでしょうか。

以下からビルド済みのライブラリをdownloadして利用するようです。
# 当方は利用した事がありません

https://ftdichip.com/drivers/d2xx-drivers/

"ARMv8 hard-float"のものが(ライブラリの依存に問題無ければ)利用できそうです。ファイルの拡張子が".gz"とgzip圧縮ファイルのようですが、実際には".tar.gz"ファイルのようです。

溝渕様

ご回答ありがとうございます。

ダウンロードしライブラリをインストールしたところ、ライブラリ自体は使えているようです。
ただ、デバイスが見つからない状態となっており、FTDIのマニュアルにftdi_sioをrmmodコマンドで
消すよう指示がありましたので消してみると、下記のエラーが出てしまいました。

[ 2920.618502] usb 3-1.1.4: FTDI USB Serial Device converter now attached to ttyUSB0
[ 2920.620805] ftdi_sio 3-1.1.4:1.1: FTDI USB Serial Device converter detected
[ 2920.621165] usb 3-1.1.4: FTDI USB Serial Device converter now attached to ttyUSB1
[ 2924.273872] ftdi_sio 3-1.1.2:1.0: FTDI USB Serial Device converter detected
[ 2924.275389] usb 3-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB2
[ 4564.989754] ftdi_sio ttyUSB2: FTDI USB Serial Device converter now disconnected from ttyUSB2
[ 4567.627781] ftdi_sio 3-1.1.2:1.0: FTDI USB Serial Device converter detected
[ 4567.629011] usb 3-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB2
/home/atmark # rmmod ftdi_sio
rmmod: can't unload module 'ftdi_sio': No such file or directory

unload出来ない理由は何かわかりますでしょうか。

溝渕です。

> ファイルの拡張子が".gz"とgzip圧縮ファイルのようですが、実際には".tar.gz"ファイルのようです。

上記、旧バージョンのもので、新しいバージョンの方が".tgz"となっていますね。

> unload出来ない理由は何かわかりますでしょうか。

ftdi_sioがカーネルモジュールでない為です。

解決する為には、Linuxカーネルコンフィギュレーションを変更して、リビルドする必要があります。該当箇所は次の通りで、

Device Drivers  --->
  [*] USB support  --->
    <*>   USB Serial Converter support  --->
      <*>   USB FTDI Single Port Serial Driver

となっているところを、

<M>   USB FTDI Single Port Serial Driver

か、

< >   USB FTDI Single Port Serial Driver

かのいずれかに変更する必要があります。後者にした場合はrmmodは不要です。

お世話になっております。
ご教授頂いた方法で、ドライバをモジュール(M)に変更してカーネルを書き換え、rmmodが成功するようになりました。

[   51.358707] usbserial: USB Serial deregistering driver FTDI USB Serial Device
[   51.359488] ftdi_sio ttyUSB2: FTDI USB Serial Device converter now disconnected from ttyUSB2
[   51.359678] ftdi_sio ttyUSB1: FTDI USB Serial Device converter now disconnected from ttyUSB1
[   51.359972] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[   51.360019] usbcore: deregistering interface driver ftdi_sio
[   51.360109] ftdi_sio 3-1.1.4:1.1: device disconnected
[   51.360217] ftdi_sio 3-1.1.4:1.0: device disconnected
[   51.360314] ftdi_sio 3-1.1.2:1.0: device disconnected
[  478.806738] usbserial: USB Serial deregistering driver generic
[  478.806828] usbcore: deregistering interface driver usbserial_generic

この後、TOP16のEEPROMの値を読む処理は成功しました。

 ./read
Library version = 0x10427
Opening port 0
FT_Open succeeded.  Handle is 0xaaab21315c80
FT_GetDeviceInfo succeeded.  Device is type 5.
FT_EE_Read succeeded.
 
Signature1 = 0
Signature2 = -1
Version = 2
VendorId = 0x0403
ProductId = 0x6001
Manufacturer = TCTEC
ManufacturerId = FT
Description = TCTEC TOP16DIO
SerialNumber = FT47Y39M
MaxPower = 400
PnP = 1
SelfPowered = 0
RemoteWakeup = 0
232R:
-----
        UseExtOsc = 0x0
        HighDriveIOs = 0x0
        EndpointSize = 0x40
        PullDownEnableR = 0x0
        SerNumEnableR = 0x1
        InvertTXD = 0x0
        InvertRXD = 0x0
        InvertRTS = 0x0
        InvertCTS = 0x0
        InvertDTR = 0x0
        InvertDSR = 0x0
        InvertDCD = 0x0
        InvertRI = 0x0
        Cbus0 = 0x0
        Cbus1 = 0x0
        Cbus2 = 0x8
        Cbus3 = 0x1
        Cbus4 = 0x5
        RIsD2XX = 0x0
Returning 0

ここから、IO出力のプログラムを試していますが、
ライブラリのFT_OpenEx関数は成功したのですが、
FT_SetFlowControl関数が失敗し躓いております。

ここまでくると、Armadilloとは関係無い部分で申し訳ないのですが、
もし同じ機器を使って解決された方がいらっしゃればと思い投稿させて頂きました。

ホストにkmodをインストールをインストールして再度rmmodを実行したところ、下記の表示になりました。
カーネルに組み込まれている為、このライブラリを組み込みからモジュールに変更する必要がありそうです。

armadillo:~# rmmod ftdi_sio
rmmod: ERROR: Module ftdi_sio is builtin.