jueves, 18 de junio de 2015

Programando un Maple Mini clónico (2)

Siguiendo la serie de artículos sobre la programación de un microcontrolador Maple Mini clónico, en esta entrada vamos a describir como programar estos microcontroladores utilizando el IDE de Arduino y las librerías desarrolladas por la comunidad de software libre.

Como en la entrada anterior, el punto de partida será un ordenador con Linux Debian 8 64bits recién instalado. Además, deberá estar instalado el programa sudo tal y como se describió en la entrada anterior. Los pasos a seguir son los siguientes:

1. Descargamos el IDE de Arduino de su página web http://www.arduino.cc/en/Main/Software. El fichero descargado llamado arduino-1.6.4-linux64.tar.xz, lo descomprimimos en la carpeta donde queramos instalar este software (en este caso, por ejemplo, nuestro home).
cd
tar xvJf arduino-1.6.4-linux64.tar.xz
2. En la siguiente dirección:
Se encuentra la página principal de la biblioteca STM32 que permite desarrollar programas para tarjetas basadas en microcontroladores STM32F103. La mayor parte de este artículo se basa en el proceso de instalación descrito en esta página. Desde ella descargamos la librería STM32. El fichero descargado Arduino_STM32-master.zip se decomprime y obtenemos la carpeta Arduino_STM32-master que debemos copiar dentro de la carpeta Harware que se encuentra dentro de la carpeta con el IDE de Arduino.

3. Ahora es necesario instalar los compiladores cruzados para STM32. Para ello tenemos dos opciones: la primera es instalarlos desde los repositorios de Debian y adaptar la configuración del IDE de Arduino para que utilice estos compiladores; la segunda, y más sencilla, es instalar el soporte para ARM en el IDE y que descargue automáticamente el software necesario. Para ello ejecutamos el IDE de Arduino que acabamos de instalar y buscamos en los menús Herramienta -> Placa -> Boards Manager.


Elegimos Arduino SAM Boards (32-bits ARM Cortes-M3) y pulsamos la opción de instalar. Ahora podemos ver como han aparecido las nuevas placas STM32 en el menú del IDE:

4. Al igual que el IDE de Maple, las aplicaciones que trae son para una arquitectura de 32 bits. Así que hay que habilitar la ejecución de aplicaciones de 32 bits en nuestro Linux. Para ello, ejecutamos los siguientes comandos:
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libstdc++6:i386
5. Vamos a utilizar una interfaz USB a Serie TTY para programar esta placa, por lo que es necesario dar permiso a nuestro usuario para acceder a los puertos serie. Esto se consigue añadiendo nuestro usuario al grupo dialout:
sudo addgroup usuario dialout
Donde usuario es el nombre de nuestro usuario.

6. Para descargar el programa al microcontrolador en este caso utilizaremos un adaptador USB a Serie TTY.

Las conexiones que hay que hacer son:
FTDI   <---->   Maple
GND    <---->     GND
3.3V   <---->     Vcc
RXC    <---->     RX1
TXC    <---->     TX1

Dependiendo del modelo de adaptador es posible que sea necesario cruzar las línea RXC y TXC de la siguiente forma:
RXC    <---->     TX1
TXC    <---->     RX1

Pero tranquilos, que no se va a quemar nada si se conectan al revés. Simplemente no cargará el programa y bastará con cambiar la conexión para que funcione. 
Otra opción es utilizar la salida de 5V del adaptador en lugar de la de 3.3V. En ese caso, en lugar de conectar la salida de 3.3V a Vcc hay que conectar la salida de 5V a VIn. Por alguna razón, algunas veces el microcontrolador se resiste a cargar el programa cuando se utiliza la alimentación a 3.3V y funciona cuando se utiliza la de 5V.

7. Una vez conectado el adaptador, configuramos el IDE de Arduino para la placa y puerto serie. Para ello elegimos la placa Generic STM32F103C en Herramientas -> Placa; Upload method = Serial; Variant = STM32F103CB y el puerto serie /dev/ttyUSB0 (o el que corresponda a nuestro adaptador) como podemos ver en la siguiente imagen:


8. Una vez escrito el programa, para subirlo hay que poner el microcontrolador en modo programación. Esto se realiza dejando pulsado el botón But32 mientras pulsamos y soltamos el botón de Reset. La placa quedará en modo programación y no se encenderá ni parpadeará ningún led. A continuación, solo hay que pulsar el botón de carga del programa del IDE de Arduino y el programa se enviará al microcontrolador.

Este proceso cargará el programa en nuestro microcontrolador, pero eliminará el Bootloader. Si solo vamos a utilizar este método para cargar el programa no es un problema y el bootloader realmente no es necesario. Pero si, por alguna razón, queremos volver a tener instalado el bootloader en nuestro microcontrolador, podemos instalarlo siguiendo un proceso muy sencillo. Para ello se utiliza el adaptador USB a Serie TTY. En la siguiente página hay instrucciones sobre como cargar el bootloader en un Maple Mini http://leaflabs.com/docs/bootloader.html

También es posible utilizar este IDE para programar el microcontrolador utilizando el puerto USB. Para ello es necesario que el microcontrolador tenga cargado el Bootloader que viene con el IDE. Podemos encontrar este bootloader en la carpeta 

arduino-1.6.4/hardware/Arduino_STM32-master/usb_bootloader/STM32F1/binaries

El fichero se llama maple_mini_boot20.bin. Y para cargarlo podemos seguir el proceso descrito en la web http://leaflabs.com/docs/bootloader.html

No es posible cargar los programas utilizando este método si el microcontrolador tiene instalado alguno de los bootloaders originales de Maple.

Los pasos para configurar el sistema para poder conectar el Maple clónico a nuestro sistema Linus son:

1. Configuramos el dispositivos USB.
cd $HOME/arduino-1.6.4/hardware/Arduino_STM32-master/tools/linux
./install-udev-rules.sh
Después de este paso es necesario reiniciar el equipo para que se activen las reglas.

2. Instalamos la utilidad dfu-util
sudo apt-get install dfu-util
Y ya podemos cargar programas a nuestro microcontrolador siguiendo los pasos descritos en la entrega anterior de esta serie: pulsando el botón de reset y, antes de que el led termine de parpadear rápido, pulsar y mantener el botón 1 de la placa pulsado hasta que el led comienza a parpadear lentamente. En este momento podemos pulsar el botón de carga del programa que hay en el IDE y el proceso de carga comenzará. Al finalizar el proceso de carga es necesario pulsar de nuevo el botón de reset del microcontrolador.