Close

Installer les drivers nécessaires à Diamond sous Linux.

euchcateuchcat wrote 02/14/2016 at 22:13 • 3 min read • Like

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:

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

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

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:~$

/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"

sudo udevadm control --reload-rules
ou
sudo service udev restart

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)

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)


Like

Discussions