Como programar un UnAmiga con la Raspberry Pi (o Linux) con el USB-Blaster y OpenOCD

Cómo y cuándo actualizar el firmware y/o los cores, funcionalidades que se van añadiendo

Moderador: jepalza

Responder
benitoss
PLA
Mensajes: 29
Registrado: 07 Oct 2018, 04:53

Como programar un UnAmiga con la Raspberry Pi (o Linux) con el USB-Blaster y OpenOCD

Mensaje por benitoss » 24 Nov 2018, 18:19

Este tutorial es para programar el UnAmiga o cualquier FPGA Altera con el USB-Blaster desde Linux o Raspbian con el software OpenOCD
El proceso es muy similar al ya existente de la Pi viewtopic.php?f=141&t=62 (gracias a DaCarSoft), pero en vez de usar los GPIOs de la Pi, usaremos el USB-Blaster
Este es el USB-Blaster que uso
Imagen


Atencion: Se programa partiendo de un archivo SVF (tendras que convertirlo desde SOF o generarlo desde Quartus II)

1) Debes de descargar el OpenOCD e instalarlo en tu Raspberry Pi
Se necesita compilarlo para activar la libreria libfdi de nuestro USB-Blaster
1.1) Actualizar repositorios

Código: Seleccionar todo

$ sudo apt-get update
$ sudo apt-get upgrade -y
$ sudo apt-get dist-upgrade -y
1.2) Instalar dependencias

Código: Seleccionar todo

$ sudo apt-get install git autoconf libtool make pkg-config libusb-1.0-0 libusb-1.0-0-dev telnet
$ sudo apt-get install libtool autoconf texinfo libusb-dev
1.3) Vamos a clonar el repositorio de OpenOCD para usar la libreria libftdi del clon de USB-Blaster (dejamos las librerias para programarla mediante GPIOs tambien)

Código: Seleccionar todo

$ git clone http://git.code.sf.net/p/openocd/code openocd-code
$ cd openocd-code
$ ./bootstrap
$ ./configure --enable-usb_blaster_libftdi --enable-sysfsgpio --enable-bcm2835gpio
$ make
$ sudo make install
$ cd ..
Ya esta instalado el OpenOCD con la libreria libftdi para nuestro USB-Blaster

2) Creas el siguiente archivo de configuracion para el interface OpenOCD

Contenido del archivo altera-usb-blaster.cfg

Código: Seleccionar todo

#---------------------------------------- start here ---------------------------------------------------

# Altera USB-Blaster

interface usb_blaster
usb_blaster_lowlevel_driver ftdi

# Slow speed to be sure it will work
adapter_khz 1000

jtag newtap auto0 tap -irlen 2 -expected-id 0x020f10dd

#--------------------------------- end file --------------------------------------------------------------------
3) Necesitas un archivo SVF asi que si no lo tienes ya generado, convierte en windows o linux desde el archivo SOF a SVF mediante el mismo Quartus II.

4) Este es el commando final para programar el UnAmiga o una FPGA de Altera

Código: Seleccionar todo

    $ openocd -f altera-usb-blaster.cfg -c "init ; svf /home/benitoss/Desktop/tube_CycloneIV.svf ; shutdown"
    
En el ejemplo yo uso un archivo SVF que esta en la carpeta Downloads de mi perfil
Si este comando no te funciona puede ser porque necesitas ejeecutar el OpenOCD como sudo y no puede acceder al USB-Blaster por un problema de permisos (ver el Anexo: Permitir acceso a la USB-BLaster)


Anexo: Permitir acceso a la USB-Blaster

1) Creamos el archivo de reglas 92-usbblaster.rules

Código: Seleccionar todo

    $ sudo nano /etc/udev/rules.d/92-usbblaster.rules   
    
2) En el editor introducimos

Código: Seleccionar todo

#-----------[b][color=#0000FF]Content of 92-usbblaster.rules[/color][/b] ----------------------
# USB-Blaster
SUBSYSTEM=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", SYMLINK+="usb_blaster", MODE="0666"
#-------------------- End of file --------------------------------
Inciso: Estos datos son para el USB-Blaster que recibimos con nuesto UnAmiga, otros USB-Blaster puede que tengan diferentes parametros idVendor y idProduct.
Si os interesa preguntarme como averiguarlo y os lo comento

Una vez introducido la configuracion anterior cerramos y salvamos

3) Aplicamos permisos al archivo generado

Código: Seleccionar todo

    $ sudo chmod 0644 /etc/udev/rules.d/92-usbblaster.rules
    
4) Ahora recargamos las reglas

Código: Seleccionar todo

    $ sudo udevadm control --reload-rules
    $ sudo udevadm trigger
    $ sudo /etc/init.d/udev restart
    
5) Conectamos el USB-Blaster si no estaba ya conectado
Probamos si el sistema lo reconoce

Código: Seleccionar todo

    $ ls -l /dev/usb_blaster
    lrwxrwxrwx 1 root root 15 Aug 30 22:04 /dev/usb_blaster -> bus/usb/003/004
    
Ahi vemos la asociacion del puerto. Perfecto !!! ya esta detectado y deberia funcionar

Espero que os ayude y simplifique la programacion desde vuestras Raspberries y sin tener que andar con cablecillos desde el GPIO

Cualquier cosa estoy a vuestra disposicion
Última edición por benitoss el 31 Jul 2019, 22:59, editado 10 veces en total.

Subcritical
GAL
Mensajes: 85
Registrado: 24 Ago 2018, 14:52

Re: Como programar un UnAmiga con la Raspberry Pi con el USB-Blaster y OpenOCD

Mensaje por Subcritical » 24 Nov 2018, 20:20

Siguiendo las instrucciones del tutorial sobre un raspbian actualizado:
Tengo la salida siguiente al programar un .SVF.

Código: Seleccionar todo

---------------------------------------------------------------------------------------
Open On-Chip Debugger 0.9.0 (2018-01-22-06:14)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
Warn : Adapter driver 'usb_blaster' did not declare which transports it allows; assuming legacy JTAG-only
Info : only one transport option; autoselect 'jtag'
adapter speed: 1000 kHz
Error: no lowlevel driver found for ftdi or lowlevel driver opening error
---------------------------------------------------------------------------------------
Al parecer si reconoce el usbblaster enciende tanto el diodo rojo de tensión como el verde y usando el comando

Código: Seleccionar todo

$ ls -l /dev/usb_blaster
obtengo la salida

Código: Seleccionar todo

lrwxrwxrwx 1 root root 15 Nov 24 18:38 /dev/usb_blaster -> bus/usb/001/021

benitoss
PLA
Mensajes: 29
Registrado: 07 Oct 2018, 04:53

Re: Como programar un UnAmiga con la Raspberry Pi con el USB-Blaster y OpenOCD

Mensaje por benitoss » 25 Nov 2018, 02:10

La USB-Blaster esta bien configurada y aplicaste las reglas correctamente, tu problema esta con el OpenOCD que tendras que compilarlo a mano con unas opciones determinadas que acabo de adicionar en el primer post.

Por favor, cuentanos tu experiencia
Saludos

Subcritical
GAL
Mensajes: 85
Registrado: 24 Ago 2018, 14:52

Re: Como programar un UnAmiga con la Raspberry Pi con el USB-Blaster y OpenOCD

Mensaje por Subcritical » 25 Nov 2018, 11:46

Cuando comento la siguiente linea en altera-usb-blaster.cfg:

Código: Seleccionar todo

#usb_blaster_lowlevel_driver ftdi
Lo reconoce como usbblaster II, y es fijo un 1:

Salida:

Código: Seleccionar todo

Open On-Chip Debugger 0.10.0+dev-00581-g1b864d6e (2018-11-25-02:00)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
Warn : Adapter driver 'usb_blaster' did not declare which transports it allows; assuming legacy JTAG-only
Info : only one transport option; autoselect 'jtag'
adapter speed: 1000 kHz
Info : No lowlevel driver configured, using ublast2
Info : Altera USB-Blaster II found (Firm. rev. = 6▒])
Info : This adapter doesn't support configurable speed

benitoss
PLA
Mensajes: 29
Registrado: 07 Oct 2018, 04:53

Re: Como programar un UnAmiga con la Raspberry Pi con el USB-Blaster y OpenOCD

Mensaje por benitoss » 25 Nov 2018, 15:45

Normalmente no funciona por estos dos problemas

1) De compilacion.
Asegurate de que introduces esta linea en la compilacion

Código: Seleccionar todo

     $ ./configure --enable-usb_blaster_libftdi --enable-sysfsgpio --enable-bcm2835gpio
     
2) Con los permisos del puerto USB del USB-Blaster. Asegurate de escribir correctamente el archivo del Udev.
Prueba a ejecutar el OpenOCD como sudo, si funciona asi y no con otro usuario es que tienes un problema con los permisos en el Udev, Repasa la parte del Anexo: Permitir acceso a la USB-Blaster

Subcritical
GAL
Mensajes: 85
Registrado: 24 Ago 2018, 14:52

Re: Como programar un UnAmiga con la Raspberry Pi con el USB-Blaster y OpenOCD

Mensaje por Subcritical » 25 Nov 2018, 15:54

Funciona tanto por GPIO como con el USB-Blaster en la misma pi, se puede tener la pi para reprogramar 2 jtag sabiendo lo que se hace, Un pi multicore multipropósito para placas altera.

No se si se podría poner un zxuno y un unamiga...

Genial el tutorial muy útil.

benitoss
PLA
Mensajes: 29
Registrado: 07 Oct 2018, 04:53

Re: Como programar un UnAmiga con la Raspberry Pi con el USB-Blaster y OpenOCD

Mensaje por benitoss » 26 Nov 2018, 03:54

Gracias.

El ZXUno podria estar conectado al GPIO de la Pi y ser programado con el UrJTAG y por otro lado el UnAmiga por la USB-Blaster y seria programado con el OpenOCD

benitoss
PLA
Mensajes: 29
Registrado: 07 Oct 2018, 04:53

Re: Como programar un UnAmiga con la Raspberry Pi con el USB-Blaster y OpenOCD

Mensaje por benitoss » 31 May 2019, 20:56

Subcritical escribió:
25 Nov 2018, 15:54
Funciona tanto por GPIO como con el USB-Blaster en la misma pi, se puede tener la pi para reprogramar 2 jtag sabiendo lo que se hace, Un pi multicore multipropósito para placas altera.

No se si se podría poner un zxuno y un unamiga...

Genial el tutorial muy útil.
Si con openOCD y USB Blaster se puede programar tambien bit files en (windows y linux) tanto una Spartan3, Spartan6 y Artix7 (ZXUno, ZXdos, Pano Logic G1, Pano Logic G2, etc.)
Vete a la seccion Logic Pano y veras como se hace en un post que puse hace tiempo

benitoss
PLA
Mensajes: 29
Registrado: 07 Oct 2018, 04:53

Re: Como programar un UnAmiga con la Raspberry Pi (o Linux) con el USB-Blaster y OpenOCD

Mensaje por benitoss » 31 Jul 2019, 22:58

benitoss escribió:
24 Nov 2018, 18:19
Este tutorial es para programar el UnAmiga o cualquier FPGA Altera con el USB-Blaster desde Linux o Raspbian con el software OpenOCD
El proceso es muy similar al ya existente de la Pi viewtopic.php?f=141&t=62 (gracias a DaCarSoft), pero en vez de usar los GPIOs de la Pi, usaremos el USB-Blaster
Este es el USB-Blaster que uso
Imagen


Atencion: Se programa partiendo de un archivo SVF (tendras que convertirlo desde SOF o generarlo desde Quartus II)

1) Debes de descargar el OpenOCD e instalarlo en tu Raspberry Pi
Se necesita compilarlo para activar la libreria libfdi de nuestro USB-Blaster
1.1) Actualizar repositorios

Código: Seleccionar todo

$ sudo apt-get update
$ sudo apt-get upgrade -y
$ sudo apt-get dist-upgrade -y
1.2) Instalar dependencias

Código: Seleccionar todo

$ sudo apt-get install git autoconf libtool make pkg-config libusb-1.0-0 libusb-1.0-0-dev telnet
$ sudo apt-get install libtool autoconf texinfo libusb-dev
1.3) Vamos a clonar el repositorio de OpenOCD para usar la libreria libftdi del clon de USB-Blaster (dejamos las librerias para programarla mediante GPIOs tambien)

Código: Seleccionar todo

$ git clone http://git.code.sf.net/p/openocd/code openocd-code
$ cd openocd-code
$ ./bootstrap
$ ./configure --enable-usb_blaster_libftdi --enable-sysfsgpio --enable-bcm2835gpio
$ make
$ sudo make install
$ cd ..
Ya esta instalado el OpenOCD con la libreria libftdi para nuestro USB-Blaster

2) Creas el siguiente archivo de configuracion para el interface OpenOCD

Contenido del archivo altera-usb-blaster.cfg

Código: Seleccionar todo

#---------------------------------------- start here ---------------------------------------------------

# Altera USB-Blaster

interface usb_blaster
usb_blaster_lowlevel_driver ftdi

# Slow speed to be sure it will work
adapter_khz 1000

jtag newtap auto0 tap -irlen 2 -expected-id 0x020f10dd

#--------------------------------- end file --------------------------------------------------------------------
3) Necesitas un archivo SVF asi que si no lo tienes ya generado, convierte en windows o linux desde el archivo SOF a SVF mediante el mismo Quartus II.

4) Este es el commando final para programar el UnAmiga o una FPGA de Altera

Código: Seleccionar todo

    $ openocd -f altera-usb-blaster.cfg -c "init ; svf /home/benitoss/Desktop/tube_CycloneIV.svf ; shutdown"
    
En el ejemplo yo uso un archivo SVF que esta en la carpeta Downloads de mi perfil
Si este comando no te funciona puede ser porque necesitas ejeecutar el OpenOCD como sudo y no puede acceder al USB-Blaster por un problema de permisos (ver el Anexo: Permitir acceso a la USB-BLaster)


Anexo: Permitir acceso a la USB-Blaster

1) Creamos el archivo de reglas 92-usbblaster.rules

Código: Seleccionar todo

    $ sudo nano /etc/udev/rules.d/92-usbblaster.rules   
    
2) En el editor introducimos

Código: Seleccionar todo

#-----------[b][color=#0000FF]Content of 92-usbblaster.rules[/color][/b] ----------------------
# USB-Blaster
SUBSYSTEM=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", SYMLINK+="usb_blaster", MODE="0666"
#-------------------- End of file --------------------------------
Inciso: Estos datos son para el USB-Blaster que recibimos con nuesto UnAmiga, otros USB-Blaster puede que tengan diferentes parametros idVendor y idProduct.
Si os interesa preguntarme como averiguarlo y os lo comento

Una vez introducido la configuracion anterior cerramos y salvamos

3) Aplicamos permisos al archivo generado

Código: Seleccionar todo

    $ sudo chmod 0644 /etc/udev/rules.d/92-usbblaster.rules
    
4) Ahora recargamos las reglas

Código: Seleccionar todo

    $ sudo udevadm control --reload-rules
    $ sudo udevadm trigger
    $ sudo /etc/init.d/udev restart
    
5) Conectamos el USB-Blaster si no estaba ya conectado
Probamos si el sistema lo reconoce

Código: Seleccionar todo

    $ ls -l /dev/usb_blaster
    lrwxrwxrwx 1 root root 15 Aug 30 22:04 /dev/usb_blaster -> bus/usb/003/004
    
Ahi vemos la asociacion del puerto. Perfecto !!! ya esta detectado y deberia funcionar

Espero que os ayude y simplifique la programacion desde vuestras Raspberries y sin tener que andar con cablecillos desde el GPIO

Cualquier cosa estoy a vuestra disposicion

Responder

Volver a “Firmware”