Desbrickear una N-GO con un USB Blaster usando linux

Como he tenido que hacerlo para mi N-GO lo pongo aquí para que no se me olvide cómo hacerlo la próxima vez. Está basado en el artículo que publico Fernando Mosquera (benitoss) en forofpga.es, y del que fusilaré párrafos enteros.

 

PASO 1. Hacerse con un USB Blaster y 6 cables dupont hembra-hembra

Este es el USB Blaster que he comprado. Lo compré en AliExpress por 2,68 euros, pero con el tiempo puede variar el precio.

Si no tenéis 6 cables dupont los podéis conseguir aquí. Ojo que hay varias combinaciones (macho-macho, macho-hembra y hembra-hembra). Los que necesitáis son hembra-hembra.

PASO 2. Descargar la última versión del programa OpenOCD

Para ello hay que tener instalado git en vuestra distribución y ejecutar la siguiente instruccion:

$ git clone https://github.com/xpack-dev-tools/openocd.git

Eso nos descargará el código fuente a un directorio openocd. Además debemos copiar dentro de ese directorio estos archivos que nos serán de utilidad más adelante:

Archivos adicionales desbrickeo N-GO.7z

 

PASO 3. Instalar las dependencias del programa

Para poder compilarlo es necesario tener instalados ciertos paquetes:

- make
- libtool
- pkg-config >= 0.23 (or compatible)

Additionally, for building from git:

- autoconf >= 2.64
- automake >= 1.14
- texinfo

USB-based adapters depend on libusb-1.0 and some older drivers require
libusb-0.1 or libusb-compat-0.1. A compatible implementation, such as
FreeBSD's, additionally needs the corresponding .pc files.

USB-Blaster, ASIX Presto and OpenJTAG interface adapter
drivers need:
  - libftdi: http://www.intra2net.com/en/developer/libftdi/index.php

Para una distribución basada en apt-get los paquetes necesarios se instalarían así:

3.1) Actualizar repositorios

$ sudo apt-get update
$ sudo apt-get upgrade -y

$ sudo apt-get dist-upgrade -y

3.2) Instalar dependencias

$ 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

                Nota: Yo en mi linux instalé manualmente el paquete para la librería libftdi

PASO 4. Compilar e instalar OpenOCD

Para compilar entramos en el directorio openocd y ejecutamos

$ ./bootstrap
$ ./configure --enable-usb_blaster_libftdi --enable-sysfsgpio --enable-bcm2835gpio

Si todo ha ido bien al final nos debe salir un resumen como este:

Ahora hacemos

$ make

Y si termina sin errores se instala con

$ sudo make install

Con lo que ya tendremos instalado el OpenOCD en nuestro equipo.

 

PASO 5. Permitir acceso al USB-Blaster a nivel de usuario

Para no tener que usar el USB Blaster con permisos de superusuario es necesario crear unas regla udev con estos sencillos pasos:

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

$ sudo nano /etc/udev/rules.d/92-usbblaster.rules

5.2) En el editor introducimos

#----------- Content of 92-usbblaster.rules ----------------------
# USB-Blaster
SUBSYSTEM=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", SYMLINK+="usb_blaster", MODE="0666"
#-------------------- End of file --------------------------------

Nota: Estos datos son para el USB-Blaster que he comprado yo . Otros USB-Blaster puede que tengan diferentes parametros idVendor e idProduct. Lo mejor es conectarlo a algún puerto USB y ejecutar  $ lsusb, y  debería aparecer una línea similar a esta en alguno de los dispositivos USB detectados

Bus 002 Device 005: ID 09fb:6001 Altera Blaster

Una vez introducido la configuracion anterior cerramos y salvamos

5.3) Aplicamos permisos al archivo generado

 $ sudo chmod 0644 /etc/udev/rules.d/92-usbblaster.rules

5.4) Ahora recargamos las reglas

 $ sudo udevadm control --reload-rules
$ sudo udevadm trigger
 $ sudo /etc/init.d/udev restart

5.5) Conectamos el USB-Blaster si no estaba ya conectado

Probamos si el sistema lo reconoce

$ ls -l /dev/usb_blaster

 lrwxrwxrwx 1 root root 15 Aug 30 22:04 /dev/usb_blaster -> bus/usb/003/004

Ahí vemos la asociacion del puerto. Perfecto !!! ya esta detectado y debería funcionar

 

PASO 6. Conectar el USB Blaster y la N-GO con los cables dupont

Ahora hay que conectar los 6 cables dupont a las señales VCC, TDI, TMS, TDO, TCK y GND del JTAG del N-GO.

Y al jtag del USB Blaster

Este es mi conexionado (ojo que mis colores no son los mismos que empleó Fernando) y que parece dibujado por un niño de 6 años 😉

 

PASO 7A. Grabar la SPI FLASH secundaria (ZX-DOS) de la N-GO

El siguiente paso es si queréis restaurar la SPI Flash secundaria (modo ZX-DOS) de la N-GO.

El switch de selección de la FLASH debe estar colocado en la posición ZX-DOS (hacia la  derecha  si se mira desde arriba a la placa). Una vez que el USB Blaster esta por una parte conectado al PC por el conector USB y a la placa N-GO con los cables dupont, se enciende la N-GO y se ejecuta el siguiente comando:

$ openocd -f ./altera-usb-blaster.cfg -f tcl/cpld/xilinx-xc6s.cfg -f tcl/cpld/jtagspi.cfg -c "init; jtagspi_init 0 bscan_spi_xc6slx16.bit; jtagspi_program FLASH_recovery_NGO-ZXDOS_0.77.bin 0x00000 ; exit"

Si todo va bien el proceso de grabación del fichero en la flash comenzará y en poco más de un minuto habrá terminado de grabarse.

El que tarde tan poco tiene truco. No graba los 16 MB de la SPI Flash sino solo el primer mega donde ya se encuentra el firmware, las roms y el core de Spectrum de mcleod_ideafix.

Si todo ha ido bien el contenido de la memoria flash secundaria ya ha sido restaurada y el modo ZX-DOS volverá a estar operativo.

 

PASO 7B. Grabar la SPI FLASH principal  (ZX Next) de la N-GO

El siguiente paso es si queréis restaurar la SPI Flash principal (modo ZX Next) de la N-GO.

El switch de selección de la FLASH debe estar colocado en la posición ZX Next (hacia la  izquierda  si se mira desde arriba a la placa). Una vez que el USB Blaster esta por una parte conectado al PC por el conector USB y a la placa N-GO con los cables dupont, se enciende la N-GO y se ejecuta el siguiente comando:

$ openocd -f ./altera-usb-blaster.cfg -f tcl/cpld/xilinx-xc6s.cfg -f tcl/cpld/jtagspi.cfg -c "init; jtagspi_init 0 bscan_spi_xc6slx16.bit; jtagspi_program FLASH_recovery_NGO-NEXT.bin 0x00000 ; exit"

Si todo va bien el proceso de grabación del fichero en la flash comenzará y en poco más de un minuto habrá terminado de grabarse. Si todo ha ido bien el contenido de la memoria flash principal ya ha sido restaurada y el modo ZX Next volverá a estar operativo.

 

PASO 8. Comprobar que se ha recuperado correctamente la SPI Flash del N-GO

Solo queda apagar y encendar la N-GO y ya debería arrancar correctamente en el modo restaurado.

 

Esta entrada fue publicada en N-GO, Sin categoría y etiquetada . Guarda el enlace permanente.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *