FT2232 や FT232R を OpenOCD で使う場合で、かつ複数のデバイスを使っている場合だと、OpenOCD がどちらのデバイスを使うべきかわからず、先に見つかった方にアクセスします。これを防ぎ、ある一つのデバイス側に固定する方法が、いくつかあります
FT2232 (aka ftdi)
ftdi_device_desc
同じ FT2232 チップを使っていても、 USB の iProduct に入っている名前が異なる場合があります。例えば秋月電子の FT2232 Module だと Dual RS232
と入っているが、 Digilent Arty A7 に実装されている FT2232 だと Digilent USB Device
となっています。 ftdi_device_desc
が異なれば、これを指定することで使用するデバイスを決めることができます。この値は、たいてい OpenOCD のボードファイルか、インターフェイスファイルに記載されています。
ftdi_serial
USB の iSerial を使うはずです (調べてない)。
FT232R
ft232r_serial_desc
ft232r adapter driver 固有の方法で、デバイスのシリアル番号を指定する方法です。ファイルに書くなら
ft232r_serial_desc A904DQNM
コマンドラインで指定するなら
-c 'ft232r_serial_desc A904DQNM'
とします。
上記の例では A904DQNM
がシリアル番号。この番号の取得方法は
$ lsusb -v -d 0403:6001 g iSerial
iSerial 3 A904DQNM
iSerial 3 A904DR1F
adapter usb location
adapter driver に依存しない方法。
adapter usb location 1-6.1.2
最後の数字は、 指定するデバイスの USB topology。 lsusb -t
で探せます。
$ lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
|__ Port 6: Dev 8, If 0, Class=Hub, Driver=hub/4p, 5000M
|__ Port 1: Dev 9, If 0, Class=Hub, Driver=hub/4p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/3p, 480M
|__ Port 1: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M
|__ Port 2: Dev 6, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 2: Dev 3, If 0, Class=, Driver=, 12M
|__ Port 6: Dev 21, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 22, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 2: Dev 30, If 0, Class=Vendor Specific Class, Driver=, 12M
|__ Port 3: Dev 33, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 3: Dev 33, If 1, Class=Vendor Specific Class, Driver=ftdi_sio, 480M
|__ Port 7: Dev 7, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 7: Dev 7, If 1, Class=Wireless, Driver=btusb, 12M
|__ Port 8: Dev 9, If 1, Class=Video, Driver=uvcvideo, 480M
|__ Port 8: Dev 9, If 0, Class=Video, Driver=uvcvideo, 480M
調べ方
他のデバイスの場合は、 OpenOCD のコードから探してください。基本的に TCL で設定できるようになっているので、ドライバーコードにある command_registration
型の変数に入っている .handler
をチェックすると良いです。