domingo, 20 de julio de 2014

msp430 toolchain en Ubuntu 14.04 - parte II: mspdebug

Actualización: hice un resumen para ejecutar todo desde la consola utilizando comandos, si quieren ahorrarse el palabrerío: mspdebug

Con mspdebug vamos a poder programar y depurar prácticamente cualquier herramienta de desarrollo y microcontrolador msp430. El reloj Chronos (ez430), launchpad, fet target boards, placas de Olimex, programador/depurador FET etc, etc.
Antes del proyecto mspgcc había otro proyecto llamado mspgcc4 que trabajaba con un programa gdb-proxy.

Pero el mspdebug realiza las funciones del gdb-proxy, además de la interfaz con el depurador o el microcontrolador.

El sitio es:
http://mspdebug.sourceforge.net/
La última versión se encuentra en:
http://sourceforge.net/projects/mspdebug/files/

La última versión a la fecha es la 0.22:
http://sourceforge.net/projects/mspdebug/files/mspdebug-0.22.tar.gz/download
Descomprimir, make, sudo make install y listo.
Puede ser necesario compilar con
make WITHOUT_READLINE=1
si no está instalado el paquete libreadline-dev (verificar con synaptic).
make 2>&1 | tee mo
sudo make install 2>&1 | tee moi

Agregado 2 de Julio de 2014:
Si sale error:
In file included from util/usbutil.c:22:0:
util/usbutil.h:22:17: fatal error: usb.h: No such file or directory

Es porque falta instalar el paquete libusb-dev (que no es lo mismo que libusb-1.0.0-dev !!!):
sudo apt-get install libusb-dev

Vamos a comprobar si mspdebug funciona:
Al enchufar el launchpad deberíamos poder comunicarnos con él ejecutando
sudo mspdebug rf2500
Nos va a aparecer algo como esto:

Desde allí ya podemos escribir/leer programas al msp430. Generalmente en este punto lo único que hago es ejecutar el comando gdb y comandarlo a través del eclipse.
Podemos salir con exit y ya podemos desenchufar el launchpad.

No queremos estar llamando a mspdebug con sudo todo el tiempo, por eso agregamos reglas a udev para que nuestro usuario de ubuntu tenga permisos de lectura y escritura.

udev


/etc/udev/rules.d$ sudo gedit 61-TI.rules

udev se encarga entre otras cosas de manejar lo que enchufamos al puerto usb y decidir los permisos de acceso que tiene nuestro usuario. Las reglas se aplican secuencialmente y una puede anular a la otra. El orden de aplicación de la regla viene dado por el número al principio del nombre de archivo. Elegí 61 arbitrariamente, he visto que algunos usan 40, otros 90... en fin; no deberíamos tener problema con ninguna de esas opciones.
El resto del nombre de archivo también es a elección.
Mi archivo contiene las siguientes líneas:
ATTRS{idVendor}=="0451", ATTRS{idProduct}=="f432", MODE="0660", GROUP="plugdev" #Launchpad v1.5
ATTRS{idVendor}=="2047", ATTRS{idProduct}=="0010", MODE="0660", GROUP="plugdev" #msp-fet430uif


Para más información sobre udev hay buena información en hackaday:
http://hackaday.com/2010/08/11/how-to-launchpad-programming-with-linux/
http://hackaday.com/2009/09/18/how-to-write-udev-rules/

¿Y de donde obtengo idVendor y idProduct?.
Al enchufar el launchpad (o el FET, o el reloj Chronos...), podemos verlo con:
lsusb


En la línea resaltada aparece la entrada del launchpad, 0451 es el VID (vendor ID) y f432 el PID (product ID).
Si queremos ver información adicional del dispositivo (interfaces, endpoints...), podemos hacer
lsusb -s 004:003 -v

Agregamos una línea por herramienta de desarrollo.
Luego de eso debemos agregarnos al grupo groupdev:
sudo addgroup tu_nombre_de_usuario plugdev.

Y reiniciamos el servicio udev:
sudo service udev restart

TILIB v3

Guía:
https://rtime.felk.cvut.cz/hw/index.php/MSP430F5529_Launchpad#MSP430.DLLv3

Si queremos usar la librería tilib que provee TI para depurar:
http://processors.wiki.ti.com/index.php/MSP_Debug_Stack
Debemos bajar el archivo slac460 (actualmente versión "i"):
http://processors.wiki.ti.com/index.php/MSPDS_Open_Source_Package
http://www-s.ti.com/sc/techzip/slac460.zip

Descomprimir e ir a la carpeta MSPDebugStack_OS_Package.
Según README-BUILD es necesario bajar/compilar/instalar libboost, yo instalé el paquete libboost-all-dev con synaptic para ahorrarme la espera (versión 1.54.0.1ubuntu1). Y aprovechando el synaptic abierto, instalamos dependencias:
libudev-dev (agrega una parva de paquetes para instalar), libfox-1.6-0 (debería estar dentro del conjunto anterior), autotools-dev, autoconf, automake, libtool.

Luego bajamos
https://github.com/signal11/hidapi/downloads
La versión actual es la 0.7.0. Descomprimir y editar el archivo
/hidapi-0.7.0/linux/Makefile
Reemplazar
CFLAGS   ?= -Wall -g
por
CFLAGS   ?= -Wall -g -fPIC

CXXFLAGS ?= -Wall -g
por
CXXFLAGS ?= -Wall -g -fPIC

LIBS      = `pkg-config libusb-1.0 libudev --libs`
por
LIBS      = `pkg-config libusb-1.0 libudev --libs` -lpthread

Guardar y compilar:
/hidapi-0.7.0/linux$ make

Copiar /hidapi-0.7.0/linux/hid-libusb.o
a /MSPDebugStack_OS_Package/ThirdParty/lib/

y /hidapi-0.7.0/hidapi/hidapi.h
a /MSPDebugStack_OS_Package/ThirdParty/include/

Ahora sí podemos compilar tilib con make:
daniel@daniel-desktop:~/Install/mspgcc/tilib/MSPDebugStack_OS_Package$ make

Copiar libmsp430.so a /usr/local/lib:
daniel@daniel-desktop:/usr/local/lib$ sudo cp /home/daniel/Install/mspgcc/tilib/MSPDebugStack_OS_Package/libmsp430.so


Vamos a probarlo. Enchufar el msp-fet430uif y ejecutar
mspdebug tilib --allow-fw-update
para actualizar el firmware.

Entonces ahora sí debería funcionar al ejecutar
mspdebug tilib

O casi... usualmente tengo que ejecutar 3 o 4 veces antes de que el mspdebug pueda conectarse:



Bueno... quizás más veces :(
Desconozco si se debe a algún error de instalación o estoy haciendo algo mal.
El último error es porque no nay nada enchufado al depurador.



Fuentes:
  1. Instalación mspdebug-0.20:
    http://energy.eecs.umich.edu/wiki/doku.php?id=msp430:mspgcc:start
  2. msdebug-0.21:
    http://richardnaud.wordpress.com/2013/10/02/installation-of-eclipse-cdt-msp430-gcc-4-7-0-mspdebug-0-21-and-more-on-ubuntu/
  3. https://rtime.felk.cvut.cz/hw/index.php/MSP430F5529_Launchpad

No hay comentarios:

Publicar un comentario