INSTALLATION DES DRIVERS USB NECESSAIRES A L'UTILISATION DE LATTICE DIAMOND SOUS LINUX UBUNTU 14
MATERIEL:
Device sur la carte MachXO2 Pico: LCMXO2-1200ZE-2MG132CES1104RH01
PROBLEME:
Au premier lancement de Diamond:
Q: yoda@yoda-W253EU-SSD:~$ /usr/local/diamond/3.5_x64/bin/lin64/diamond
R:
yoda@yoda-W253EU-SSD:~$ libusb couldn't open USB device /dev/bus/usb/003/007: Permission denied.
libusb requires write access to USB device nodes.
Erreur de segmentation
(ceci est le problème du lancement non root, résolue par l'affectation au groupe 'usbdev')
Le problème résolu ici est celui de pouvoir ouvrir le mode 'programmer' depuis Diamond pour
downloader le Jedec dans le PLD.
SOLUTION:
- Listage des périphériques usb:
Q: yoda@yoda-W253EU-SSD:~$ lsusb
R:
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 046d:c03e Logitech, Inc. Premium Optical Wheel Mouse (M-BT58)
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 004: ID 0480:0201 Toshiba America Info. Systems, Inc.
Bus 003 Device 007: ID 0403:6010 Future Technology Devices International, Ltd FT2232C Dual USB-UART/FIFO IC
Bus 003 Device 005: ID 04a9:173a Canon, Inc.
Bus 003 Device 003: ID 1a40:0101 Terminus Technology Inc. 4-Port HUB
Bus 003 Device 002: ID 1a40:0101 Terminus Technology Inc. 4-Port HUB
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
- demande d'infos du périph concerné (chemin).
Q: yoda@yoda-W253EU-SSD:~$ sudo udevadm info -q path -n /dev/bus/usb/003/007
R: /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.1/3-2.1.3
- demande des caractéristiques complètes du périphérique.
Q: yoda@yoda-W253EU-SSD:~$ sudo udevadm info -a -p /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.1/3-2.1.3
R: Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.1/3-2.1.3':
KERNEL=="3-2.1.3"
SUBSYSTEM=="usb"
DRIVER=="usb"
ATTR{bDeviceSubClass}=="00"
ATTR{bDeviceProtocol}=="00"
ATTR{devpath}=="2.1.3"
ATTR{idVendor}=="0403"
... blablabla ...
ATTR{manufacturer}=="Lattice"
ATTR{removable}=="unknown"
ATTR{idProduct}=="6010"
ATTR{bDeviceClass}=="00"
ATTR{product}=="Lattice FTUSB Interface Cable"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.1':
... blablabla ...
ATTRS{bDeviceClass}=="09"
ATTRS{product}=="USB 2.0 Hub [MTT]"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb3/3-2':
... blablabla ...ATTRS{bDeviceClass}=="09"
ATTRS{product}=="USB 2.0 Hub [MTT]"
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb3':
... blablabla ...
ATTRS{bDeviceClass}=="09"
ATTRS{product}=="xHCI Host Controller"
looking at parent device '/devices/pci0000:00/0000:00:14.0':
KERNELS=="0000:00:14.0"
... blablabla ...
ATTRS{numa_node}=="-1"
ATTRS{d3cold_allowed}=="1"
looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS==""
yoda@yoda-W253EU-SSD:~$
- Mes recherches m'ont amené à créer un fichier:
/etc/udev/rules.d/90-usb-special-yoda.rules
(avec nano dans le répertoire en tant que 'root').
c'est la solution proposée la meilleure et la plus universelle.
Ce fichier contient:
(voir listing ci dessus, le périphérique posant problème est le "Lattice FTUSB Interface Cable")
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="0403", MODE="0666", GROUP="plugdev"
- Pour finaliser, il faut d'abord débrancher les périphériques concernés, puis lancer au choix l'une de ces commandes :
sudo udevadm control --reload-rules
ou
sudo service udev restart
- On peut alors rebrancher les périphériques et les utiliser.
Attention : les règles ne sont appliquées que pour les périphériques nouvellement détectés,
d'où la nécessité de débrancher préalablement, puis de rebrancher le périphérique usb.
(d'après la réponse dans forum: https://forum.ubuntu-fr.org/viewtopic.php?id=1217181)
- De plus il faut installer la librairie D2xx de chez FTDI pour linux 64bit car:
Sous Linux, le pilote D2XX (bitstream) et le pilote VCP (VirtualComPort) sont incompatibles les uns avec les autres.
Lorsqu'un périphérique FTDI est branché, la DRIVER du PCV doit être déchargé avant qu'une demande de D2XX ne puisse être exécuté.
Pour ce faire utilisez la commande de supression du module (rmmod) :
sudo rmmod ftdi_sio
sudo rmmod usbserial
Lorsque le périphérique usb FTDI est éteint, puis rallumé ou réinitialisé,
le pilote VCP sera rechargé.
Le processus de rmmod doit être répété chaque fois que cela se produit.
Il est possible d'écrire un script simple qui décharge le pilote VCP avant d'exécuter l'application de D2XX.
(voir la note FTDI: AN_220_FTDI_Drivers_Installation_Guide_for_Linux .pdf)
Conclusion provisoire:
Il faut lancer les deux commandes de dévalidation des drivers VCP comme ci dessus,
ou un script qui regroupe les deux, avant de lancer le soft "Lattice Diamond",
pour pouvoir programmer les cpld ou les fpga avec ce type de driver en mode bitstream (FTDI) (testé ok)
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.