Pour communiquer avec le scopus, le pic-osd, la matrice, le DTX1 et le module de puissance, j’utilise des convertisseurs USB-RS232. Dans le linux, ils sont renseigné comme ttyUSB0 jusque ttyUSB4. Seul hic, à chaque reboot du raspberry, les convertisseurs n’héritent pas du même ttyUSBx et c’est un réel problème. Je dois passer mon temps à les reconfigurer manuellement à chaque fois. Dans linux, il est possible de figer cela, en se basant sur le numéro de série par exemple.
Voilà la situation aujourd’hui :
root@ON0CTV-CMD:/home/pi# dmesg | grep ttyUSB
[ 8.376499] usb 1-1.3.4: pl2303 converter now attached to ttyUSB0
[ 8.380469] usb 1-1.3.6: pl2303 converter now attached to ttyUSB1
[ 8.384463] usb 1-1.3.7: pl2303 converter now attached to ttyUSB2
[ 9.774053] usb 1-1.3.2: FTDI USB Serial Device converter now attached to ttyUSB3
[ 9.775241] usb 1-1.3.3: FTDI USB Serial Device converter now attached to ttyUSB4
Avant, j’avais 4 convertisseurs pl2303 et un FTDI qui faisait du RS485, le FTDI, j’arrivais à le figer car il avait un numéro de série, les convertisseurs low cost basé sur le pl2303 n’ont pas de numéro de série et ont tous les mêmes infos.
Prenons par exemple le ttyUSB0 et demandons les infos : On a le même résultat pour tous les pl2303 !
root@ON0CTV-CMD:/home/pi# udevadm info –name=/dev/ttyUSB0 –attribute-walk
looking at device ‘/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.4/1-1.3.4:1.0/ttyUSB0/tty/ttyUSB0’:
KERNEL== »ttyUSB0″
SUBSYSTEM== »tty »
DRIVER== » »
looking at parent device ‘/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.4/1-1.3.4:1.0/ttyUSB0’:
KERNELS== »ttyUSB0″
SUBSYSTEMS== »usb-serial »
DRIVERS== »pl2303″
ATTRS{port_number}== »0″
looking at parent device ‘/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.4/1-1.3.4:1.0’:
KERNELS== »1-1.3.4:1.0″
SUBSYSTEMS== »usb »
DRIVERS== »pl2303″
ATTRS{bInterfaceClass}== »ff »
ATTRS{bInterfaceSubClass}== »00″
ATTRS{bInterfaceProtocol}== »00″
ATTRS{bNumEndpoints}== »03″
ATTRS{authorized}== »1″
ATTRS{supports_autosuspend}== »1″
ATTRS{bAlternateSetting}== » 0″
ATTRS{bInterfaceNumber}== »00″
looking at parent device ‘/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.4’:
KERNELS== »1-1.3.4″
SUBSYSTEMS== »usb »
DRIVERS== »usb »
ATTRS{bDeviceSubClass}== »00″
ATTRS{bDeviceProtocol}== »00″
ATTRS{devpath}== »1.3.4″
ATTRS{idVendor}== »067b »
ATTRS{speed}== »12″
ATTRS{bNumInterfaces}== » 1″
ATTRS{bConfigurationValue}== »1″
ATTRS{bMaxPacketSize0}== »64″
ATTRS{busnum}== »1″
ATTRS{devnum}== »8″
ATTRS{configuration}== » »
ATTRS{bMaxPower}== »100mA »
ATTRS{authorized}== »1″
ATTRS{bmAttributes}== »a0″
ATTRS{bNumConfigurations}== »1″
ATTRS{maxchild}== »0″
ATTRS{bcdDevice}== »0300″
ATTRS{avoid_reset_quirk}== »0″
ATTRS{quirks}== »0x0″
ATTRS{version}== » 2.00″
ATTRS{urbnum}== »516″
ATTRS{ltm_capable}== »no »
ATTRS{manufacturer}== »Prolific Technology Inc. »
ATTRS{removable}== »unknown »
ATTRS{idProduct}== »2303″
ATTRS{bDeviceClass}== »00″
ATTRS{product}== »USB-Serial Controller »
…
Faisons la même chose avec le FTDI :
root@ON0CTV-CMD:/home/pi# udevadm info –name=/dev/ttyUSB4 –attribute-walk
looking at device ‘/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.3/1-1.3.3:1.0/ttyUSB4/tty/ttyUSB4’:
KERNEL== »ttyUSB4″
SUBSYSTEM== »tty »
DRIVER== » »
looking at parent device ‘/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.3/1-1.3.3:1.0/ttyUSB4’:
KERNELS== »ttyUSB4″
SUBSYSTEMS== »usb-serial »
DRIVERS== »ftdi_sio »
ATTRS{port_number}== »0″
ATTRS{latency_timer}== »1″
looking at parent device ‘/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.3/1-1.3.3:1.0’:
KERNELS== »1-1.3.3:1.0″
SUBSYSTEMS== »usb »
DRIVERS== »ftdi_sio »
ATTRS{bInterfaceClass}== »ff »
ATTRS{bInterfaceSubClass}== »ff »
ATTRS{bInterfaceProtocol}== »ff »
ATTRS{bNumEndpoints}== »02″
ATTRS{authorized}== »1″
ATTRS{supports_autosuspend}== »1″
ATTRS{bAlternateSetting}== » 0″
ATTRS{bInterfaceNumber}== »00″
ATTRS{interface}== »USB Serial Converter »
looking at parent device ‘/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.3’:
KERNELS== »1-1.3.3″
SUBSYSTEMS== »usb »
DRIVERS== »usb »
ATTRS{bDeviceSubClass}== »00″
ATTRS{bDeviceProtocol}== »00″
ATTRS{devpath}== »1.3.3″
ATTRS{idVendor}== »0403″
ATTRS{speed}== »12″
ATTRS{bNumInterfaces}== » 1″
ATTRS{bConfigurationValue}== »1″
ATTRS{bMaxPacketSize0}== »8″
ATTRS{busnum}== »1″
ATTRS{devnum}== »7″
ATTRS{configuration}== » »
ATTRS{bMaxPower}== »44mA »
ATTRS{authorized}== »1″
ATTRS{bmAttributes}== »a0″
ATTRS{bNumConfigurations}== »1″
ATTRS{maxchild}== »0″
ATTRS{bcdDevice}== »0600″
ATTRS{avoid_reset_quirk}== »0″
ATTRS{quirks}== »0x0″
ATTRS{serial}== »FT92DEQJ »
ATTRS{version}== » 2.00″
ATTRS{urbnum}== »20745443″
ATTRS{ltm_capable}== »no »
ATTRS{manufacturer}== »FTDI »
ATTRS{removable}== »unknown »
ATTRS{idProduct}== »6001″
ATTRS{bDeviceClass}== »00″
ATTRS{product}== »USB Serial Converter »
…
Vérifions le résultat pour le FTDI RS485 :
root@ON0CTV-CMD:/home/pi# udevadm info –name=/dev/ttyUSB3 –attribute-walk
looking at device ‘/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.2/1-1.3.2:1.0/ttyUSB3/tty/ttyUSB3’:
KERNEL== »ttyUSB3″
SUBSYSTEM== »tty »
DRIVER== » »
looking at parent device ‘/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.2/1-1.3.2:1.0/ttyUSB3’:
KERNELS== »ttyUSB3″
SUBSYSTEMS== »usb-serial »
DRIVERS== »ftdi_sio »
ATTRS{port_number}== »0″
ATTRS{latency_timer}== »1″
looking at parent device ‘/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.2/1-1.3.2:1.0’:
KERNELS== »1-1.3.2:1.0″
SUBSYSTEMS== »usb »
DRIVERS== »ftdi_sio »
ATTRS{bInterfaceClass}== »ff »
ATTRS{bInterfaceSubClass}== »ff »
ATTRS{bInterfaceProtocol}== »ff »
ATTRS{bNumEndpoints}== »02″
ATTRS{authorized}== »1″
ATTRS{supports_autosuspend}== »1″
ATTRS{bAlternateSetting}== » 0″
ATTRS{bInterfaceNumber}== »00″
ATTRS{interface}== »USB-RS485 Cable »
looking at parent device ‘/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3/1-1.3.2’:
KERNELS== »1-1.3.2″
SUBSYSTEMS== »usb »
DRIVERS== »usb »
ATTRS{bDeviceSubClass}== »00″
ATTRS{bDeviceProtocol}== »00″
ATTRS{devpath}== »1.3.2″
ATTRS{idVendor}== »0403″
ATTRS{speed}== »12″
ATTRS{bNumInterfaces}== » 1″
ATTRS{bConfigurationValue}== »1″
ATTRS{bMaxPacketSize0}== »8″
ATTRS{busnum}== »1″
ATTRS{devnum}== »6″
ATTRS{configuration}== » »
ATTRS{bMaxPower}== »300mA »
ATTRS{authorized}== »1″
ATTRS{bmAttributes}== »80″
ATTRS{bNumConfigurations}== »1″
ATTRS{maxchild}== »0″
ATTRS{bcdDevice}== »0600″
ATTRS{avoid_reset_quirk}== »0″
ATTRS{quirks}== »0x0″
ATTRS{serial}== »FTYT79FN »
ATTRS{version}== » 2.00″
ATTRS{urbnum}== »7896370″
ATTRS{ltm_capable}== »no »
ATTRS{manufacturer}== »FTDI »
ATTRS{removable}== »unknown »
ATTRS{idProduct}== »6001″
ATTRS{bDeviceClass}== »00″
ATTRS{product}== »USB-RS485 Cable »
Donc, en créant un fichier /etc/udev/rules.d/99-usb-serial.rules, on peux figer les ports vers des numéros de série :
root@ON0CTV-CMD:/home/pi# cat /etc/udev/rules.d/99-usb-serial.rules
SUBSYSTEM== »tty », ATTRS{serial}== »FT92DEQJ », SYMLINK+= »ttySCOPUS »
SUBSYSTEM== »tty », ATTRS{serial}== »FTYT79FN », SYMLINK+= »ttySDM120″
Ce qu’on ne peut pas faire avec les modèles low cost Prolific.
Conclusion, on en a toujours pour son argent ! 5 EUR contre 15 EUR…