jueves, 22 de octubre de 2009

Karmic Koala: Spartan 3E Starter Kit y cable usb

El problema fue que al actualizar a Karmic Koala, me dejo de detectar la tarjeta. Que es lo que pasa cuando conectamos la Tarjeta a la PC:

1.- Cuando conectamos la tarjeta a un puerto USB, udev detecta el dispositivo.
2.- Ya que lo detecto el siguiente paso es que le actualize el firmware con fxload (según las reglas que tenga para dicho dispositivo, y se encuentran en el archivo /etc/udev/rules.d/xusbdfwu.rules).
3- Si tuvo exito se enciende un led de color verde que se encuentra a lado derecho del conector usb de la tarjeta y además al hacer lusb veremos que que el dispositivo lo identifica como 03fd:0008, en el caso contrarío veremos 03fd:000d.

¿Como solucionar este problema?

En caso de que hicieron una actualización de Jaunty a Karmic:

1.- Tienen que editar el archivo de reglas, que se encuentra en /etc/udev/rules.d

sudo gedit /etc/udev/rules.d/xusbdfwu.rules

Y reemplazar todos los $TEMPNODE por $tempnode

2.- Reinicar el servicio udev

sudo service udev restart o sudo /etc/init.d/udev restart

En caso de ser una instalación nueva:

0.- Requisitos: Tener instaldo el ISE Webpack y los paquetes fxload, libusb-dev y el build-essential.

sudo apt-get install fxload libusb-dev build-essential


1.- Suponiendo que ya tenemos instalado el ISE Webpack 11.1 (ó el 10.x), nos movemos al la ruta donde quedó instalado.

cd /ruta_instalación_Xilinx/11.1/ISE/bin/lin/ o cd /ruta_instalación_Xilinx/11.1/ISE/bin/lin64/

Ahí encontraremos los siguientes archivos

$ ls *.hex
xusbdfwu.hex xusb_emb.hex xusb_xlp.hex xusb_xp2.hex xusb_xpr.hex xusb_xse.hex xusb_xup.hex

Los cuales copiaremos a /usr/share

sudo cp xusb*.hex /usr/share/

2.- Enseguida editamos el archivo xusbdfwu.rules

gedit xusbdfwu.rules
# version 0003
SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0008", MODE="666"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0007", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D $TEMPNODE"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0009", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xup.hex -D $TEMPNODE"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="000d", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_emb.hex -D $TEMPNODE"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="000f", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xlp.hex -D $TEMPNODE"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0013", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xp2.hex -D $TEMPNODE"
BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0015", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xse.hex -D $TEMPNODE"


Cambiando $TEMPNODE por $tempnode, si lo dejan tan y como esta, no les va a funcionar. El contenido les debe de quedar algo como:

# version 0003 SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0008", MODE="666" BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0007", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D $tempnode" BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0009", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xup.hex -D $tempnode" BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="000d", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_emb.hex -D $tempnode" BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="000f", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xlp.hex -D $tempnode" BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0013", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xp2.hex -D $tempnode" BUS=="usb", ACTION=="add", SYSFS{idVendor}=="03fd", SYSFS{idProduct}=="0015", RUN+="/sbin/fxload -v -t fx2 -I /usr/share/xusb_xse.hex -D $tempnode"

3.- Ya que lo modificamos lo copiamos a /etc/

sudo cp xusbdfwu.rules /etc/udev/rules.d/

4.- reiniciamos el servicio udev

sudo service udev restart o sudo /etc/init.d/udev restart

5.- Ahora nos movemos al $HOME creamos una carpeta tmp

cd
mkdir tmp

cd tmp

Vamos a http://www.rmdir.de/~michael/xilinx/

Y descargamos de ahí el archivo usb-driver-HEAD.tar.gz en la carpeta que acabamos de crear

6.- estando en tmp descomprimimos el archivo y entramos al directorio recién creado y ejecutamos el make

tar -xvzf usb-driver-HEAD.tar.gz
cd usb-driver
make

7.- Lo anterior nos generará dos archivos, libusb-driver-DEBUG.so y libusb-driver.so los cuales copiaremos a /usr/lib/

sudo cp *.so /usr/lib/

8.- Ya podemos conectar nuestra tarjeta al la PC con el Karmic Kola y ver

$ lsusb | grep Xilinx Bus 001 Device 007: ID 03fd:0008 Xilinx, Inc.

en lugar del

$ lsusb | grep Xilinx
Bus 001 Device 007: ID 03fd:000d Xilinx, Inc.


Que al actualizar de versión me venía saliendo

En la versión 11.1 para que el impact use el libusb-driver.so en vez de los windrvr, ya no es necesario hacer lo de "export LD_PRELOAD=/ruta/libusb-driver.so" antes de ejecutarlo.