Como programar la SPI FLASH con OpenOCD y USB-Blaster desde Windows o Linux (BIN Files)

Discursiones en general sobre esta placa que no tienen cabida en otro foro
Responder
benitoss
PLA
Mensajes: 43
Registrado: 07 Oct 2018, 04:53

Como programar la SPI FLASH con OpenOCD y USB-Blaster desde Windows o Linux (BIN Files)

Mensaje por benitoss » 11 Oct 2020, 18:02

Este articulo explica como programar la SPI Flash tanto del ZX NEXT original como la SPI Flash secundaria del N-Go.
Asimismo es comun a otras placas que tengan la FPGA Spartan X16 de Xilinx y una SPI Flash. Para otros modelos de Xilinx es muy similar.
El procedimiento es el mismo , hay que partir de una imagen BIN de la SPI Flash a programar.

Comentare el caso de la SPI Flash secundaria del N-Go y la instalacion del core de Spectrum de McLeod para ZXDos (adaptado al ZX Next) junto con las ROMS del sistema, y el firmware.
Como introduccion la distribucion de la SPI Flash para el ZXDOS , que es el core que vamos a portar , esta es la disposicion de la SPI Flash

Código: Seleccionar todo

000000-004000 Boot Header Xilinx
004000-0BC000 Firmware-ROMs (44 ROMs)
     --(004000-006000) ESXDOS
     --(006000-008000) ROM Directory
     --(008000-00C000) Firmware-BIOS
     --(00C000-098000) 35 Spectrum ROMs
0098000 - Bitstream 1
010C000 - Bitstream 2 
---------------------------
Como la imagen SPI Flash que vamos a usar es la minima con solo el Core inicial de Spectrum, el cual acaba en la direccion (010C000 o sea 1097728 bytes)
Esos 1097728 bytes sera nuestro tamaño de la imagen bin a flashear.
FLASH_empty_ZXUNO_0.77.bin
(1.05 MiB) Descargado 480 veces
Despues de esta aclaracion vamos a empezar entonces

Necesitamos un USB Blaster como este
USB-Blaster.jpg
USB-Blaster.jpg (7.53 KiB) Visto 8920 veces
Actualmente yo me he encontrado 2 tipos de USB-Blaster

1) El que usa un controlador Microchip PIC18F14 y no tiene buffers (solo soporta señales de 5 V)
USB-Blaster-mini_pic_front.jpg
USB-Blaster-mini_pic_front.jpg (11.96 KiB) Visto 8920 veces
USB-Blaster-mini_pic_back.jpg
USB-Blaster-mini_pic_back.jpg (7.78 KiB) Visto 8920 veces
2) El que usa un controlador ST STM32F101 (STM32F103 con soporte USB) y un 74HC244 octal-buffer (para señales entre 2.0 a 6.0 V)
USB-Blaster-mini_stm32_front.jpg
USB-Blaster-mini_stm32_front.jpg (12.38 KiB) Visto 8920 veces
USB-Blaster-mini_stm32_back.jpg
USB-Blaster-mini_stm32_back.jpg (13.09 KiB) Visto 8920 veces
Pasos

1) Conectar los cables del JTAG , son 6 cables (VCC, TDI, TMS, TDO, TCK y GND)
Del lado del conector ZX NEXT tenemos este esquema (visto desde arriba, del lado de los componentes)
JTAG_ZX_Next.jpg
JTAG_ZX_Next.jpg (45.6 KiB) Visto 8920 veces
Y del lado del USB-Blaster
jtag_USB_BLASTER.png
jtag_USB_BLASTER.png (10.37 KiB) Visto 8920 veces
Capture2.jpg
Capture2.jpg (98.19 KiB) Visto 8920 veces
Una vez hayamos realizado las conexiones a los dos conectores , procedemos con el siguiente punto

2) (Solo para windows.)
Primero tenemos que cambiar los drivers de la USB-Blaster a LibUSB
Descarga la utilidad USBTool desde https://visualgdb.com/UsbDriverTool/
El archivo a descargar es este: http://sysprogs.com/getfile/413/UsbDriverTool-2.0.exe
Instalalo y ejecutalo el UsbDriver
selecciona el dispositivo Altera USB-Blaster y presiona el boton derecho del raton sobre el.
Selecciona la opcion “Install Libusb-WinUSB"
openocd_w1.png
openocd_w1.png (47.67 KiB) Visto 8920 veces
Al final se mostrara esta ventana
openocd_w2.png
openocd_w2.png (44.43 KiB) Visto 8920 veces
3) Descarga ahora el openOCD desde aqui https://github.com/gnu-mcu-eclipse/openocd/releases
La version de 64 bits para windows esta aqui https://github.com/gnu-mcu-eclipse/open ... -win64.zip

Si quieres descargar la ultima version para Windows puedes hacerlo desde aqui https://gnutoolchains.com/arm-eabi/openocd/

Ve a la carpeta de instalacion del \OpenOCD\0.10.0-11-20190118-1134\bin> (Ojo la version de 64 bits no funciona bien)
y copia a ese directorio los siguientes ficheros que he adjuntado en este post como "config_files.zip"
config_files.zip
(11.16 KiB) Descargado 455 veces
-Altera-usb-blaster.cfg
-Xilinx-xc6s.cfg
-bscan_spi_xc6slx16.bit

Copia tambien en el mismo directorio tu fichero BIN
FLASH_empty_ZXUNO_0.77.bin
(1.05 MiB) Descargado 480 veces
y executa el siguiente comando

Código: Seleccionar todo

openocd -f altera-usb-blaster.cfg -f xilinx-xc6s.cfg -f jtagspi.cfg -c "init; jtagspi_init 0 bscan_spi_xc6slx16.bit;
 jtagspi_program FLASH_empty_ZXUNO_0.77.bin 0x00000 ; fpga_program ;  exit"
En la captura podras observar como va grabando los sectores de la SPI Flash y como al finalizar lee de nuevo los datos de la SPI Flash para chequear posibles errores.
Como observareis el proceso tarda en total entre minuto y medio y dos minutos, bastante mas rapido que programar una SPI Flash entera de 16 MB , lo cual dura 16 veces mas.
Capture1.JPG
Capture1.JPG (143.36 KiB) Visto 8920 veces
Nota Importante: (Solo para Windows)
Si quieres usar el USB-Blaster para programar tarjetas Altera en Quartus necesitas restaurar el driver original de esta manera
Ejecuta de nuevo UsbDriver Tools
selecciona el dispositivo Altera USB-Blaster y presiona el boton derecho del raton sobre el.
Selecciona la opcion “Restore default driver"
openocd_w3.png
openocd_w3.png (48.1 KiB) Visto 8920 veces
Asi es como se tiene que mostrar la ventana al final del proceso
openocd_w4.png
openocd_w4.png (43.85 KiB) Visto 8920 veces
Espero que este tutorial os sirva
Un Saludo

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

Re: Como programar la SPI FLASH con OpenOCD y USB-Blaster desde Windows o Linux (BIN Files)

Mensaje por benitoss » 15 Nov 2020, 19:18

Si quereis recuperar la SPI del la parte del ZX NEXT con la imagen del N-Go solo teneis que selecionar con el switch en que SPI Flash vais a grabarlo y substituir el fichero FLASH_empty_ZXUNO_0.77.bin por este
NGO_final-Sel.bin
(976 KiB) Descargado 446 veces
Saludos

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

Re: Como programar la SPI FLASH con OpenOCD y USB-Blaster desde Windows o Linux (BIN Files)

Mensaje por benitoss » 03 Feb 2021, 21:52

DesUBIKado ha creado un tutorial basado en el mio pero desde Linux, os recomiendo que le echeis un vistazo

http://www.retrowiki.es/viewtopic.php?f=110&t=200036411

Responder

Volver a “General”