sábado, 28 de septiembre de 2019

STM32F103 como JTAG - SVF player - CPLD Altera - Quartus - Parte 1

Introducción.

    En una entrada anterior, preparamos una Raspberry pi 3 como interfaz JTAG. 

    En esta ocasión prepararemos una placa de desarrollo con STM32F103 (aka BluePill).
   
Fuente: https://os.mbed.com/users/hudakz/code/STM32F103C8T6_Hello/

    Al igual que con la raspberry, podremos reproducir archivos SVF, los cuales nos permitirán, entre otros usos, la programación, de CPLD's.

    Todos los pasos detallados fueron realizados desde un Host (mi PC) con distro Debian 9.

Preparación de la placa.

   Para la realización utilizaremos el firmware DirtyJtag que nos permitirá utilizar nuestra placa como un adaptador JTAG.

   Primero descargamos el firmware:

   https://github.com/jeanthom/dirtyjtag/releases


Descargaremos dirtyjtag.bluepill.bin
 La programación de este firmware en nuestra placa, es trivial, así que solo pondré el comando con openocd para la grabación, usando un STLink V2:

usuario@debian:~ $ openocd -f ../scripts/interface/stlink-v2.cfg -f ../scripts/target/stm32f1x.cfg -c init -c "reset halt" -c "flash write_image erase /home/usuario/Descargas/dirtyjtag/dirtyjtag.bluepill.bin 0x08000000" -c "reset"


Luego de finalizado el proceso de grabación, conectamos la placa por medio de un cable mini USB a nuestra PC, ejecutamos el siguiente comando:

usuario@debian:~ $ lsusb


Item 8: Debian reconoce nuestra placa como InterBiometrics
El pinout de la placa es el siguiente:

PA0 => TDI
PA1 => TDO
PA2 => TCK
PA3 => TMS
PA4 => TRST
PA5 => SRST

Una vez conectada nuestra placa tanto al target como a la PC y reconocida por el OS, lanzamos urjtag como root (el tema de los permisos excede a esta entrada, por eso lanzamos como root).

usuario@debian:~ # jtag

Luego:


jtag> cable dirtyjtag
jtag> bsdl path /home/usuario/bsdl-altera
jtag> detect

Solo falta decirle donde está el BSDL,... como ya se explicó en la anterior entrada.

T'T.

miércoles, 11 de septiembre de 2019

STM32F4 Discovery - Analizador lógico (Logic Analyzer)

Introducción. 

Con los pasos descriptos en esta entrada, crearemos un analizador lógico por medio de una placa STM32F4 Discovery.

Los datos adquiridos será representados por un cliente OLS.

Todos los pasos detallados fueron realizados desde un Host (mi PC) con distro Debian 9.

Preparación de la STM32F4 Discovery 

Primero descargaremos el binario necesario desde la siguiente página:

https://code.google.com/archive/p/logicdiscovery/downloads

Para los ensayos que realicé, utilicé el último de la lista (el mas antiguo)
El cual funcionó correctamente. En breve testearé el resto.

LogicDiscovery.bin, el que utilicé al momento de crear esta entrada.
Una vez descargado, programamos la placa Discovery, yo utilizo openOcd para estos menesteres, en Window$ hay también utilidades de ST.

usuario@debian:~ openocd  -f ../scripts/board/stm32f4discovery.cfg -c init -c "reset halt" -c "flash write_image erase /home/usuario/Documentos/logicAnalizer/LogicDiscovery.bin 0x08000000" -c "reset" -c "exit" 

Luego de finalizado el proceso, reseteamos la placa y conectamos un cable micro USB al conector para tal fin, y Linux lo reconoce como puerto serie. (/dev/ttyACMx).

Cliente OLS 

Decargamos el siguiente programa, el cual está creado en Java, así que lo podrán correr desde las plataformas mas populares.

https://lxtreme.nl/projects/ols/

En mi caso descargué el mas nuevo, con extensión tar.gz:

OLS v0.9.7 SP2, released 2015-01-02, Es el que descargué.
Lo descomprimimos y lanzamos:

usuario@debian:~/Documentos/logicAnalizer/ols-0.9.7.2$ ./run.sh

Programa Iniciado

Analizando.

Primero debemos tener la Discovery conectada por medio del puerto micro USB, y luego identificar como fue numerado por Linux, ($ ls /dev), en mi caso es /dev/ttyACM1.

Dentro del programa seleccionamos Capture->Begin Capture y nos saldrá la siguiente pantalla:

Captura de mi configuración en la pestaña "Connection"

Luego para verificar la conectividad y el correcto funcionamiento de la Discovery, presionamos el botón "Show Device Metada", y nos devolverá una imagen similar a esta:

El software se pudo conectar con nuestra placa, lástima que no es FPGA, :(

Posteriormente pasamos a la pestaña "Acquisition", siempre verificar el valor de Sampling Rate, ya que por default está en 200MHz, la Discovery según el desarrollador está preparada para 20MHz como máximo:

Pestaña "Acquisition" con la configuración utilizada en este caso

Por último la pestaña "Trigger", seteada para iniciar la captura desde channel0 (PD0)



Los puertos de entrada son desde PD0 (channel 0) hasta PD7 (channel 7), PD5 me dió algunos problemas, probablemente por algún componente de la discovery que está conectado a dicho puerto.

Protagonistas: Raspberry PI3 como SSH - Jtag, placa de ensayos con EPM570 como contador de 4 bits, protoboard con algunos leds como monitor, Blue-pill como generador de clock, y STM32 Discovery como Analizador Lógico. HP48 como actor invitado :)


Captura de la configuración anterior.
Done!

T'T.

martes, 10 de septiembre de 2019

Raspberry PI 3 JTAG - SVF player - CPLD Altera - Quartus - Parte 1

Introducción.


    Con los pasos descriptos en esta entrada, prepararemos una raspberry pi 3, para que funcione como interfaz jtag. Con ello podremos reproducir archivos SVF, los cuales nos permitirán, entre otros usos, la programación, de CPLD's.

    Todos los pasos detallados fueron realizados desde un Host (mi PC) con distro Debian 9.

Preparación de Raspberry.


     Descargaremos la imagen de Raspbian sin escritorio, ya que no será necesario, desde el siguiente enlace:

https://www.raspberrypi.org/downloads/raspbian/



     A la fecha de esta entrada descargaremos Raspbian Buster Lite.

    Luego descargaremos balenaEtcher para grabar la imagen en una tarjeta SD (Utilicé una de 4GB).

https://www.balena.io/etcher/



    Balena Etcher es muy simple de usar y no necesita mayores explicaciones, que las que el propio programa da.




    Insertamos la SD en nuestra raspberry, y dejamos que realice el proceso de inicialización. (Recordar conectar un monitor, un cable de red y un teclado para el primer arranque).

Nos logueamos con:

    user: pi
    password: raspberry

    Una vez inicada la sesión creamos el archivo "ssh" sin contenido en el directorio "/boot" (sudo nano ssh), luego reiniciamos y ya deberíamos tener acceso remoto por SSH.

Para activar el wi-fi, desde nuestra sesión SSH hacemos:

    pi@raspberrypi:~ $ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Nos colocamos al final del archivo e insertamos:

network={
   ssid="My Wifi"
   psk="MyPass"
}

Posteriormente podremos asignar una IP estática (recomendado para este uso) a la conexión Wi-Fi.

Para ello editamos el archivo:

    pi@raspberrypi:~ $ sudo nano /etc/dhcpcd.conf 

y al final del archivo insertamos:

interface wlan0
static ip_address=10.0.0.240/24
static routers=10.0.0.1
static domain_name_servers=10.0.0.1 8.8.8.8 

Por supuesto cada quien asignará las IP acorde a su configuración.

Finalmente, siempre es bueno realizar:

    pi@raspberrypi:~ $ sudo apt update

    pi@raspberrypi:~ $ sudo apt upgrade

UrJtag


Primero instalamos los siguientes paquetes:

    pi@raspberrypi:~ $ sudo apt install git
    pi@raspberrypi:~ $ sudo apt install autoconf
    pi@raspberrypi:~ $ sudo apt install autopoint
    pi@raspberrypi:~ $ sudo apt install libtool
    pi@raspberrypi:~ $ sudo apt install libusb-1.0
    pi@raspberrypi:~ $ sudo apt install libreadline-dev
    pi@raspberrypi:~ $ sudo apt install python-dev

Descargamos con:

    pi@raspberrypi:~ $ git clone git://git.code.sf.net/p/urjtag/git urjtag-git

    pi@raspberrypi:~ $ wget https://ufpr.dl.sourceforge.net/project/urjtag/urjtag/2018.09/urjtag-2018.09.tar.xz

Descomprimimos:

    pi@raspberrypi:~ $ tar -xf urjtag-2018.09.tar.xz

Ingresamos:

    pi@raspberrypi:~ $ cd urjtag-2018.09

Editamos el fichero cmd_bfin.c: 

    pi@raspberrypi:~/urjtag-2018.09 $  nano src/cmd/cmd_bfin.c

Insertamos al inicio del fichero:

    #define _SYS_UCONTEXT_H

Guardamos y salimos.

Luego hacemos:

    pi@raspberrypi:~/urjtag-2018.09 $ ./configure

    pi@raspberrypi:~/urjtag-2018.09 $ make 

    (Esperamos un tiempo, no mucho mas que el que toma preparse un café)

    pi@raspberrypi:~/urjtag-2018.09 $ sudo make install

Finalmente lanzamos con:

    pi@raspberrypi:~ $ sudo jtag




Una vez lanzado el programa, inicializamos los gpio a utilizar:

jtag> cable gpio tdi=13 tdo=19 tck=26 tms=6

Los GPIO corresponden a los siguientes pines de la raspberry

GPIO13 = PIN 33
GPIO19 = PIN 35
GPIO26 = PIN 37
GPIO6 = PIN 31
GND = PIN 39

Conectamos nuestra placa target, la mía es una placa para testeo que fabriqué en torno a una CPLD Altera EPM570, obtenida de equipos dañados.







Hacemos:

jtag> detect

Y en mi caso me devuelve:


Que según el datasheet el valor devuelto es el correcto:


    No obstante para poder grabar la CPLD, urjtag necesita del archivo BSDL correspondiente. Para la CPLD de mi prototipo lo descargué del siguiente enlace:

https://www.intel.com/content/www/us/en/programmable/support/support-resources/download/board-layout-test/bsdl/max2.html



Lo colocamos en alguna carpeta con una ruta simple:

pi@raspberrypi:~/bsd $ 

Nuevamente dentro de jtag:

jtag> cable gpio tdi=13 tdo=19 tck=26 tms=6
jtag> bsdl path /home/pi/bsd
jtag> detect  



Tenemos respuesta.

T'T.