12
BootLoader para 18F2550 (Entrenador NeoTeo) ELECTRÓNICA etiquetas: tutoriales http://www.neoteo.com/19871-bootloader-para-18f2550-entrenador-neoteo/ Un BootLoader es un pequeño conjunto de instrucciones que forman un programa y se graban, en este caso en un microcontrolador, para permitir un posterior manejo y actualización de sus programas internos (firmware) sin necesidad de utilizar programadores (hardware) específicos. Es decir, utilizas un programador (o quemador) de microcontroladores una única vez para cargarle el mencionadoBootLoader al microcontrolador y luego te bastará con una sencilla aplicación en tu ordenador para cambiar a tu antojo el funcionamiento de tus sistemas. Todo mediante una vulgar conexión al puerto USB. Las plataformas modernas que se asemejan a Arduino (incluida ésta) utilizan este sistema de programación y NeoTeo no podía quedar afuera. Ahora la programación está al alcance de todos. Es imposible resumir en un sumario de pocas palabras las infinitas ventajas que posee un BootLoader. Sólo debes imaginarte la situación: tu hardware, tu ordenador y un cable de conexión USB entre ambos. Eso es todo lo que necesitas para transformar al entrenador NeoTeo en un voltímetro, en unvideojuego, en un operador de servomotores y en miles de cosas más. A pesar de que el conector ICSP es una de las herramientas maestras de las que dispone una persona que se dedica a experimentar con microcontroladores, la utilización de un BootLoader te ahorra el uso de un hardware adicional de trabajo como es el programador (o quemador).

BootLoader Para 18F2550 (Entrenador NeoTeo)

Embed Size (px)

DESCRIPTION

45

Citation preview

BootLoader para 18F2550 (Entrenador NeoTeo)

ELECTRÓNICA

etiquetas: tutoriales

http://www.neoteo.com/19871-bootloader-para-18f2550-entrenador-neoteo/

Un BootLoader es un pequeño conjunto de instrucciones que forman un programa y se graban, en este caso en un microcontrolador, para permitir un posterior manejo y actualización de sus programas internos (firmware) sin necesidad de utilizar programadores (hardware) específicos. Es decir, utilizas un programador (o quemador) de microcontroladores una única vez para cargarle el mencionadoBootLoader al microcontrolador y luego te bastará con una sencilla aplicación en tu ordenador para cambiar a tu antojo el funcionamiento de tus sistemas. Todo mediante una vulgar conexión al puerto USB. Las plataformas modernas que se asemejan a Arduino (incluida ésta) utilizan este sistema de programación y NeoTeo no podía quedar afuera. Ahora la programación está al alcance de todos.

Es imposible resumir en un sumario de pocas palabras las infinitas ventajas que posee un BootLoader. Sólo debes imaginarte la situación: tu hardware, tu ordenador y un cable de conexión USB entre ambos. Eso es todo lo que necesitas para transformar al entrenador NeoTeo en un voltímetro, en unvideojuego, en un operador de servomotores y en miles de cosas más. A pesar de que el conector ICSP es una de las herramientas maestras de las que dispone una persona que se dedica a experimentar con microcontroladores, la utilización de un BootLoader te ahorra el uso de un hardware adicional de trabajo como es el programador (o quemador).

Un ejemplo de las miles de ventajas que puedes tener sería este: Tú le has vendido a Max una aplicación y luego de un tiempo de uso él te expresa su lamento y pesar sobre algunas deficiencias del producto, mientras te comenta que desearía que hagas algunas mejoras para lograr un funcionamiento óptimo y acorde a sus necesidades. ¿Qué deberías hacer en esa situación? ¿Pedirle a Max que desarme todo el equipo y te lo envíe? Imposible. ¿Viajar tú de un país a otro para cambiar dos líneas de programa, conectar el hardware programador y demorar menos de cinco minutos en resolver el problema? ¡De locos! En cambio, si el sistema inicial posee la sencilla carga previa de unBootLoader, le envías a Max un pequeño archivo por correo electrónico y él mismo podrá actualizar la versión de firmware con un elemental cable USB conectado a su ordenador. Así trabajan Arduino, Amicus y todas las plataformas similares que compiten en la web. Así de sencillo y tentador. ¿Quieres verlo? Observa como se cambia de una aplicación a otra diferente en apenas algunos segundos:

El principio de funcionamiento de un BootLoader es fácil de comprender. Se trata de un pequeño software, que se instala en un microcontrolador y ocupa un pequeño espacio de memoria dentro de él. Su única funcionalidad es servir de “anfitrión” para permitir la programación o re-programación del microcontrolador sin necesidad de un hardware específico, a veces costoso y que no es sencillo de armar ni utilizar. Toda la tarea de reinstalar un nuevo software para lograr diferentes trabajos por parte del microcontrolador, o al menos una actualización del firmware ya existente y funcional, se resume a un cable que une el microcontrolador con el ordenador. Puede ser una conexión por puerto serie (COM) o, lo que es mejor aún y que se utiliza en la actualidad, por puerto USB. Aquí tienes otro ejemplo de cómo funciona un sistema de carga con BootLoader (carga un programa que enciende el LED amarillo)

El resto del trabajo lo realiza una aplicación instalada en el ordenador que será la encargada dedetectar la petición de grabación desde el microcontrolador y cargarle un nuevo programa o, como mencionamos antes, actualizar el existente. Si el microcontrolador no realiza un llamado de solicitud anunciando una conexión para una grabación de datos, el ordenador interpretará la conexión como un hecho natural y atenderá a la aplicación existente y funcional dentro del microcontrolador trabajando en conjunto con este dispositivo y realizando las operaciones que la aplicación requiera. Por ejemplo, el Voltímetro NeoTeo. También puede suceder que no necesites conectar nunca tu aplicación a un ordenador para que realice su trabajo y cumpla una tarea.

Por ejemplo: algunos de los carteles de LEDs que indican el recorrido de un transporte de pasajeros. Ese es un claro ejemplo donde el desarrollo no se utiliza “enlazado” a un ordenador. El empleado que se encarga de diagramar los viajes conecta un ordenador portátil mediante un cable USB, ejecuta una aplicación y con un simple clic del ratón cambia los textos del cartel indicador. Otros sistemas más modernos y sofisticados le transmiten al cartel la actualización de información mediante un enlace Wi-Fi. ¿Y cómo cargan la información recibida dentro del microcontrolador? Mediante el BootLoader anfitrión que el microcontrolador ya posee en su interior.

La Ley De Moore al acecho Además, el camino irreversible de la miniaturización y la alta integración de los semiconductores nos entregan día a día dispositivos más pequeños y en encapsulados (package) muy difíciles de manipular. La mayoría de los microcontroladores “poderosos” del mercado comienzan a aparecer en encapsulados muy pequeños. Esto significa que retirarlos de una placa, colocarlos en un programador y luego restituirlos al PCB donde cumplen su función es un trabajo imposible de realizar sin destruir al menos una docena de pines y/o calcinar el dispositivo y/o las vías del PCB. Por lo tanto, amigos, los tiempos de gloria del 16F84A, del 16F628A y hasta del mismo 18F2550 (que utilizamos en nuestra placa de entrenamiento) están llegando a su final. Quizás la visión de quien escribe estas líneas pueda parecer algo pesimista. Pero si se detienen a observar la mayoría de (por no decir todas) las placas de entrenamiento que comercializan las marcas líderes en microcontroladores, notarán que poseen versiones de montaje superficial para sus MCU (microcontroladores) y los medios de programación son el ICSP (con hardware programador) y por medio de BootLoaders. Estos últimos pueden ser por puerto serie o por puerto USB.

Para muestra, basta el botón que acabas de ver: MPLAB Starter Kit for PIC 18F MCU (que sería el primer escalón para comenzar a trabajar en el mundo de Microchip – MPLAB utilizando los PIC de la línea 18F) trabaja mediante el uso de BootLoaders. Toda la intervención con el hardware se limita a conectar un cable USB y a cargar nuestros programas. El soldador (cautín) ya comienza a desaparecer de la mesa de trabajo del desarrollador. En su lugar comienzan a abundar otras herramientas virtualesque ayudarán a reducir en forma notoria muchos métodos de “prueba y error” utilizados hasta ahora. Ya no bastará con que el sistema funcione en el simulador dentro del ordenador sino que también deberá hacerlo en la placa de entrenamiento. Pues entonces si hacia allí vamos, adaptemos nuestra placa de entrenamiento NeoTeo con el 18F2550 e ingresemos al futuro nosotros también.

Una solución de código abierto Microchip posee herramientas gratuitas que se pueden descargar desde su sitio web y nos pueden ayudar a desarrollar aplicaciones con un mínimo de inversión y con la posibilidad de adquirir un aprendizaje muy importante. Dentro de las posibilidades que ofrece el sitio para trabajar conBootLoaders encontramos una aplicación dedicada a la familia del PIC 18F4550 mediante la conectividad USB que este microcontrolador brinda. Sobre esta plataforma basaremos nuestro trabajoadaptando el “programa base” que Microchip ofrece para satisfacer nuestras necesidades de uso dentro de la placa de entrenamiento NeoTeo.

Por ejemplo: en el BootLoader ofrecido (para el 18F4550) se utiliza el puerto D para colocar un LED indicador de estado. El 18F2550 no posee puerto D y en consecuencia tendremos que efectuar alteraciones allí. Por otro lado, un pulsador ubicado en el pin 4 del puerto B (en el desarrollo de Microchip para el 18F4550) nos resulta incómodo ya que el puerto B de nuestro entrenador estaría dedicado a un LCD alfanumérico y al bus I2C. Esta sería entonces otra variante a realizar sobre el programa original. Dicho nuevamente: partiendo de un sistema “base” reformaremos el BootLoaderoriginal para migrar desde un 18F4550 a un 18F2550. Atención!: Esto no termina aquí. Avanza a la siguiente página y comencemos a trabajar. ¡Manos a la obra!

Dentro de las cosas necesarias para desarrollar la aplicación de este artículo encontramos el

software que utilizaremos para armar nuestro BootLoader “a medida”. Para esto necesitamos tener

instalado en nuestro ordenador el entorno de trabajo MPLAB en su última versión (8.50 al momento

de escribir este artículo), el compilador MPLAB C para PIC18 (que en realidad es una versión de

evaluación por 60 días que puede desinstalarse y reinstalarse en forma indefinida) y por último

necesitaremos la libreríaMicrochip Applications Library donde encontraremos una cantidad muy

generosa de material para desarrollar programas y aplicaciones. Por supuesto, dentro de este

paquete se halla la aplicación (USB Framework) que utilizaremos en este artículo, esto es, el

conjunto de archivos BootLoader para diversas familias de microcontroladores, entre ellas, la que

utiliza nuestra placa entrenadora. Un detalle a destacar en este punto es que creemos que no es

necesario detallar un tutorial con todos los pasos para que instales estos programas. Lo fundamental

que debes saber es que son gratuitos y que si tienes alguna duda durante el proceso, la instalación

completa de todas las opciones presentadas es la mejor alternativa.

Comienza el trabajo de reforma

Una vez instaladas las aplicaciones, encontraremos dentro de nuestro ordenador y en la

ruta“C:Microchip SolutionsUSB Device – BootloadersHID – BootloaderHID Bootloader – Firmware for

PIC18 Non – J Devices” el código fuente a utilizar para nuestro propósito. Pero antes debemos

saber qué vamos a reformar y por qué lo haremos. En nuestro caso particular, realizaremos una

adaptación del hardware y software original para que se transforme en un instrumento compatible

con nuestra placa entrenadora. Cabe aclarar que el conjunto de archivos encontrados en la ruta

indicada están preparados con las placas de entrenamiento de Microchip, por lo tanto nos

cruzaremos con múltiples asignaciones y reservas de hardware que para nuestro objetivo son

innecesarias. Por ejemplo, dentro de uno de los ficheros a reformar existen pines del PIC18F4550

asignados a conexiones con el bus SPI, entre tantos pines reservados que para nuestro objetivo

primario no tienen utilidad. En otros casos, pines reservados del puerto D no existen dentro del

PIC18F2550.

El Hardware

El programa básico que viene para trabajar con el 18F4550 posee un interruptor en el pin 4 del

puerto B que se utiliza para indicarle a la placa de entrenamiento que deseamos iniciar el sistema

de carga de una nueva aplicación al PIC mediante el uso del BootLoader. En nuestra aplicación

(nuestra entrenadora) el puerto B estaría reservado para la conexión de un display LCD y para

el bus de datos I2C, por lo que sería apropiado utilizar otros pines libres para colocar este

pulsador. El pin 2 del puerto C es una buena opción para este propósito. Por otro lado, el LED que

indica la entrada en funcionamiento del PIC en el modo de carga de una nueva aplicación se ubica

en el pin 1 del puerto D en los archivos que corresponden al 18F4550.

Nuestro PIC no posee puerto D; por lo tanto no tenemos otra opción que cambiar la ubicación de

este indicador luminoso hacia el pin 1 del puerto C. De este modo, podemos notar y observar que

necesitamos construir una pequeña placa con un pulsador y un par de LEDs para adaptar nuestra

entrenadora al trabajo con un sistema de pre-carga o BootLoader. El aspecto del circuito y la placa

es muy sencillo: se destaca el pulsador para activar el modo BootLoader y los LEDs indicadores de

estado. Gracias al uso de conectores hembra utilizados en la placa entrenadora NeoTeo, es muy

simple organizar un pequeño circuito impreso para que el sistema final resulte cómodo, agradable y

eficaz. Por lo tanto, queda claro entonces que hemos utilizado los pines RC0, RC1, RC2 y GND para

conectar la nueva placa en nuestra entrenadora. Estas asignaciones de pines debemos trasladarlas

al Software en el próximo paso .

Nuestra entrenadora con la flamante placa instalada

La misma situación pero ensayando con un LCD

El turno del Software

Sólo un archivo del código ejemplo que ofrece Microchip deberá ser cambiado por las razones

mencionadas en los textos anteriores. Este archivo se encuentra en la ruta de acceso que

mencionamos antes y es io_cfg.h. El nombre del archivo es muy explícito en su función: io_cfg es

donde se configuran los pines de entrada y salida del proyecto. Todos los demás archivos

involucrados en el directorio son compatibles para una gran cantidad de microcontroladores PIC 18F,

entre ellos el que utiliza nuestra placa entrenadora, el 18F2550. Los modelos soportados

son PIC18F4553/4458/2553/2458, PIC18F4550/4455/2550/2455, PIC18F4450/2450 y

PIC18F14K50/13K50. Por lo tanto, cualquiera de estos microcontroladores que utilice nuestro

proyecto final podrá funcionar con este programa BootLoader siempre que tengamos en cuenta

una correcta distribución de pines de acuerdo a nuestra necesidad de aplicación en el Hardware.

Hay muchas definiciones (#define) dentro del archivo indicado que escapan del uso sencillo y

didáctico que deseamos brindar en este artículo. Por ejemplo, las utilizadas para el uso de un

potenciómetro (reóstato, resistor variable) o de tarjetas FLASH de almacenamiento masivo de datos

(SD / MMC). Todas esas definiciones y asignación de pines fueron comentadas ya que sólo estamos

detrás de un objetivo simple: Cargar un archivo BootLoader y manejar nuestro desarrollo libre

de programadores de PICs únicamente con un cable USB. Esto es ideal para actualizaciones de

firmware en tareas de campo. Las ampliaciones que la experiencia nos exija pueden esperar.

Primero debemos comprender bien qué estamos haciendo y el potencial que tiene este desarrollo de

manejar las actualizaciones de software de la manera más sencilla a la que se pueda acceder con

elementos de uso diario. Este razonamiento de comprensión y familiarización con las herramientas

es válido tanto para nosotros como para nuestros “clientes” o aquellas personas a las que les

brindamos nuestros desarrollos.

Resumiendo los cambios de Software: Sólo un archivo hay que reformar: io_cfg.h. Si utilizas la

placa entrenadora NeoTeo, te darás cuenta de manera muy fácil cómo y dónde hemos realizado la

reforma si husmeas en el archivo indicado. Notarás muchas líneas comentadas con la clásica doble

barra inclinada (//).

Resumiendo el Hardware: Una elemental placa pequeña que puedes realizar en pocas horas

utilizando elementos de uso habitual en cualquier desarrollo. Resistores un pulsador, un

capacitor, un impreso sencillo y algunos pines de conexión.

Comencemos

Esto es el inicio del trabajo con BootLoaders en las aplicaciones ofrecidas a terceros. Como en todo

orden de la vida, existe gente convencida de que se trata de lo mejor en actualización de Firmware

a distancia (con posibilidad de ejecución por el mismo cliente) y otros insisten con que la técnica

del ICSP(In Circuit Serial Program) es la mejor ya que es uno mismo el que supervisa el trabajo de

actualización y puede solucionar cualquier “accidente” que por error pueda generar el cliente. Como

mencionamos más arriba, Microchip ofrece en la actualidad sistemas que son capaces de

conectarse a la web de manera automática y actualizar su firmware sin que el usuario se entere.

Es decir, hay muchos métodos y formas de trabajar con pre-cargadores de archivos

o BootLoaders.Nosotros te traemos el inicio de cómo lograr resultados exitosos desde el primer

intento. Es por esto que te ofrecemos al final del artículo dos archivos donde encontrarás todo lo

necesario para comenzar. En el fichero “Archivos_Unicos” encontrarás el HEX que debes grabar

en el PIC con un grabador convencional de PICs (quemador = PicKit2/Pickit3/ICD2/ICD3/GTP-USB

+, etc) y al finalizar su grabación conectarás tu desarrollo (o nuestra placa entrenadora) a cualquier

puerto USB de tu ordenador para que el trabajo sea identificado como una interfaz HID. Importante:

Para que esta operación se realice con éxito, deberás insertar el conector USB manteniendo pulsado

el botón SW (BootLoader). La imagen obtenida muestra el comienzo del proceso mientras

el BootLoader se instala en la raíz de Dispositivos de Interfaz de Usuario (HID)

Una vez conectado el sistema con el BootLoader pre-grabado en el PIC, detectado por el ordenador,

instalado y “listo para ser utilizado”, los LEDs comenzarán a encender en forma alternada. Esta es

la señal de que el BootLoader está listo para recibir el programa principal de trabajo. Ese será el

momento en que todo estará preparado para iniciar el funcionamiento del pequeño software que

utilizarás para cargar los resultados de tus "firmwares" en el PIC con sólo usar un cable USB. Un

software gratuito, muy sencillo de utilizar y muy intuitivo (a pesar de estar desarrollado en inglés)

elHIDBootLoader es un programa que podrás ofrecer a terceros para que ellos mismos actualicen el

firmware del desarrollo que le has vendido, entregado, regalado o prestado (este programa está

incluído en los archivos que te ofrecemos para descargar). En primera instancia, el programa

detectará la conexión al dispositivo y su estado de BootLoader iniciado presentando una pantalla

como la siguiente, donde el botón para abrir una fila del tipo HEX se habilita.

Lo que continúa es muy fácil de intuir. Pulsando el botón “Open Hex File” accederás al archivo a

cargar dentro del PIC para programarlo con la real aplicación del desarrollo, por ejemplo, con el

programa para hacer funcionar un termómetro I2C o un reloj en tiempo real RTC. El paso siguiente

es programar el PIC con el botón “Program / Verify” y allí comenzará el proceso de grabación.

Primero se borrará cualquier dato contenido en la zona a programar dentro del PIC y una vez limpios

los registros de memoria se dará paso a la programación del dispositivo. Por último, el programa

efectúa un control y verificación de las tareas realizadas emitiendo un mensaje satisfactorio

cuando todo transcurrió con normalidad.

Además de este fichero HEX pre-armado por nosotros y separado en un archivo aparte para que no

te confundas (Archivos_Unicos), en el fichero “BOOTLOADER_NEOTEO” está todo lo necesario

para trabajar y modificar este desarrollo, es decir, todo lo que MPLAB necesita para que puedas

reformar la aplicación a tu medida. Claro está, los archivos anteriores también están allí. Ahora sólo

restan conceptos que tú serás el único capacitado para resolver. Saber cuándo te encuentras frente

a una aplicación que necesita actualizaciones con tu presencia o no. Saber cuándo se justifica

utilizar unBootLoader o cuándo un conector ICSP es suficiente. Luego de toda esta explicación con

palabras y gráficos, ¿deseas ver todo lo explicado en un video para que no te queden dudas?

Aquí lo tienes.

Fascinante ¿verdad? Pues esto no termina aquí, continúa hasta la próxima página y entérate de los

secretos que nadie cuenta y son los que hacen posible que el sistema funcione a la

perfección. Avanza hacia la próxima página.

Tal como mencionamos al principio, el BootLoader es un programa anfitrión que reside dentro del

microcontrolador y se utiliza para facilitar la programación de estos dispositivos. A pesar de ser un

programa pequeño, ocupa espacio de memoria interna en el microcontrolador que no podrá

sobrescribirse ya que de ese modo estaríamos pisoteando y arruinando las líneas de código del

programa BootLoader con nuestro código de aplicación. Para evitar esta catástrofe debemos

“reservar” un espacio para que el BootLoader se acomode dentro del microcontrolador y sólo sea

activado mediante el pulsador (SW) dedicado a este propósito. Este pequeño programa anfitrión que

se desarrolla con esta aplicación se ubicará en la parte más baja del mapa de memoria del PIC

ocupando hasta la dirección 0xFFF. Por lo tanto todos los programas que intentemos

cargar deberán grabarse desde la posición 0x1000 en adelante. De lo contrario, romperemos el

programa BootLoadery el sistema desarrollado no funcionará.

¿Cómo se realiza esto? El los programas escritos en lenguaje ASM se utilizan las directivas ORG

para indicar el posicionamiento de los vectores de inicio de programas. En C o en C18 también se

hacen llamadas a lenguaje ASM para “mapear” los vectores de RESET, es decir, a partir de qué

posición dememoria comenzará a funcionar el PIC si el botón SW (BootLoader) no es activado al

momento de conectar el desarrollo al puerto USB. En el caso de cualquier lenguaje BASIC bastará

con una declaración ubicada en una única línea. Por ejemplo en Proton sería “DECLARE

PROTON_START_ADDRESS = $1000”

Hay sistemas que utilizan menos espacio de memoria interna para el programa BootLoader, en los

que el vector de reset de una aplicación se ubica en 0x0800. Como habrás observado siempre,

nuestra intención es guiarte, ayudarte y recorrer juntos el camino que resulte más sencillo y cómodo

para el inicio. MPLAB posee una herramienta para visualizar la cantidad de memoria ocupada por el

programa y nuestro BootLoader (ejemplo extraído de la librería de Microchip) ofrece la siguiente

imagen entrando en la vista de este parámetro.

Resumen final

Antes de lanzarnos a diseñar aplicaciones con un sistema de BootLoader debemos tener en claro si

la aplicación justifica su uso. La experiencia nos dirá si es necesario o no. Vender un sistema

de letreros luminosos a una empresa de vehículos de transporte de larga distancia con sede en

Estambul merece utilizar este sistema de actualización a distancia realizado por algún técnico local o

directivo de la empresa. Construir una pequeña central que controle la temperatura y la humedad de

nuestra habitación no justifica este trabajo ya que el ICSP nos soluciona todo el problema en

cuestión de minutos. Es decir, a partir de ahora y con las herramientas en la mano, el que sabe y

decide eres tú.

Por último, y como es lógico entender, el pulsador y los LEDs indicadores de funcionamiento

deberán estar integrados en tu construcción final de manera permanente si deseas utilizar el

método de pre-cargador (BootLoader). RC2 (para nuestra aplicación) siempre debe estar polarizada

en un estado alto al encender el sistema o al conectarlo al puerto USB. Caso contrario, el programa

interpretará un estado bajo y de ese modo creerá que queremos cargar un nuevo programa. Por lo

tanto, esto no es algo que se pueda utilizar sólo para cargar el programa al microcontrolador sino

que es parte del Hardware final y definitivo. En cambio, los pines que operan

los LEDs indicadores pueden ser reutilizados dentro del Hardware para otras funciones. Comparte

tus experiencias, mejora nuestro desarrollo y cuéntanos tus resultados. Cerramos con la frase que

siempre te decimos: tú y tu ingenio sabrán hacerlo mejor.

HEX y CargadorDownload

Proyecto completoDownload

MPLABPágina de Microchip

C18Página de Microchip

Librerías completasPágina de Microchip