lunes, 5 de mayo de 2014

Bootloader para PIC en GNU/Linux

Para crear y compilar programas para PIC en Linux, disponemos de varias herramientas, algunas de ellas las mismas que en Windows, haciendo uso de Wine.

A continuación enumero algunas de las herramientas que se disponen:

Piklab-> Editor
Mplab->Editor + compiladores (con wine)
Mplabx ->Editor +  compiladores
CCS->Editor y compilador de C (con wine), pero también existe una versión sin IDE para Linux.
SDCC->Compilador para Lenguaje C.
GPUtils_>Conjunto de herramientas para pics (Compilador, simulador)



Personalmente yo recomiendo Piklab como IDE para programar, ya que es altamente personalizable y es compatible con casi todos los lenguajes y compiladores que se usan con PIC, y como Lenguaje/Compilador, pues con el que uno se sienta mas a gusto.

Para programar la memoria flash del PIC en Linux, existen muchas herramientas de Hardware/Software, prácticamente las mismas que en Windows, para el caso del Pickit2, se usa el paquete PK2CMD, coloco un link con un tutorial del blog desdelinux, de como usar PK2CMD:

http://blog.desdelinux.net/como-grabar-microcontroladores-pic-desde-linux-pk2cmd/

Para Windows casi todos los fabricantes de compiladores para PIC incluyen su propio bootloader, por ejemplo Mikroelectronica y CCS, en el caso de Linux una buena opción es el "Tiny Bootloader for Linux" de Ferezvi que es una versión de "Tiny PIC bootloader" de Claudiu Chiculita que ya existía para Windows.

Ahora describiré como usar el Tiny Bootloader en Linux, antes de ello debemos disponer de un circuito con PIC y un programador (solo se usa una vez para grabar el bootloader)

1) Descargar y descomprimir : http://www.etc.ugal.ro/cchiculita/software/tinybld198.zip

2) Acceder a la carpeta "picsource", en ella encontraremos el código fuente en assembler y los archivos "HEX" para diferentes combinaciones de PIC/Frecuencia de Reloj, si nuestro caso coincide con alguno de los archivos listados saltar al paso 7), de no ser el caso, toca modificar alguno de los archivos "ASM" que resulte mas compatible, en mi caso era un PIC16f877a @ 12MHZ, que si observamos las imágenes, no se encuentra listado.

Lista de archivos para la serie 16f


Lista de archivos para la serie 18f

4) Instalar MPLAB, se puede descargar de aquí:
http://download.informer.com/win-1192947495-b5455fc8-5c3f1fdb/mplab_ide_8_91.zip, se ejecuta usando wine.

3) Abrir y modificar el código fuente a nuestra necesidad (en caso de no estar el hex disponible en las listas de arriba), para mi caso (16f877a @ 12MHZ) yo usare el archivo "tinybld16f.asm", en este archivo debemos modificar las siguientes lineas:

Linea 2 (Escoger PIC):     LIST      P=16F877A, F=INHX8M  
Linea 3 (Frecuencia de Reloj):xtal EQU 12000000  
Linea 4 (Baud Rate): baud EQU 9600 

Modificar linea de código  Fuses de configuración:
    __CONFIG  _HS_OSC & _CP_OFF & _WRT_OFF & _BODEN_ON & _PWRTE_ON & _LVP_OFF & _DEBUG_OFF

Añadir la directiva include (de acuerdo al PIC):
#include "p16f877A.inc"

4) Copiar los siguientes archivos en una carpeta nueva, podemos nombrarla "Bootloader":
bankswitch.inc 
icdpictypes.inc
spbrgselect.inc

Estos archivos también se encuentran en la carpeta "picsources".
 tinybld16f.asm (Con las modificaciones hechas)


5) Crear un proyecto en MPLAB de acuerdo al PIC que se usara, usar la carpeta Bootloader y añadir todos los archivos que ella contiene al proyecto.

6) Compilar el proyecto, y si no hay errores se generara un archivo "tinybld16f.hex"

7) Grabar el archivo "tinybld16f.hex" en el pic, usando cualquier grabador, en mi caso tengo un pickit2 con pk2cmd.

8) Instalar  el bootloader para Linux, en el PC.

http://sourceforge.net/projects/tinybldlin/files/tinybldlin/tinybldlin-0.6/

En sourceforge disponemos de archivos de instalación, por código fuente y por paquete .deb.


Hasta aquí ya tenemos el bootloader grabado en el PIC y podemos montar el pic en nuestro circuito y proceder a probar el bootloader.

Para ello después de instalar,  abrimos TinyPIC bootloader for GNU/Linux, conectamos y energizamos nuestro circuito.
Con el boton "Browse ubicamos nuestro hex"
Con el boton "check pic" verificamos que el bootloader y el pic son reconocidos
Con el boton "write flash" escribimos el hex en el pic.
Tener en cuenta que inmediatamente antes de pulsar  en "check PIC" o en "write flash" se debe inducir un reset en el PIC.
Tener en cuenta también que al escribir nuestro programa la frecuencia de reloj es la misma a la que trabaja el bootloader, la velocidad de la comunicación serial si puede variar.


Pulsando "Check PIC"

 El resultado de pulsar check PIC debe ser "Found 16f876A/877A" (obviamente de acuerdo al tipo de PIC), es decir que la detección fue exitosa.

En la siguiente captura se muestra el resultado de grabar un archivo al PIC, por medio del Bootloader.



Por ahora es todo, como ventaja del bootloader debo decir que facilita bastante el proceso de depuración y evita el uso de un grabador.

Saludos y hasta una próxima entrada.

No hay comentarios:

Publicar un comentario