Diferencia entre revisiones de «LibIris»

De WikiRobotics
Saltar a: navegación, buscar
(Descarga de un firmware)
(Versión 1.2)
Línea 112: Línea 112:
 
* La descarga del firwmare vía web se ha sustituido por la utilización del módulo '''PIC16_Firmware'''. De esta manera se puede utilizar en ordenadores sin conexión a internet. La funcionalidad de descarga web se incluirá nuevamente en siguientes versiones.
 
* La descarga del firwmare vía web se ha sustituido por la utilización del módulo '''PIC16_Firmware'''. De esta manera se puede utilizar en ordenadores sin conexión a internet. La funcionalidad de descarga web se incluirá nuevamente en siguientes versiones.
 
* Creadas las aplicaciones '''hex-view''', '''hex2python''' y '''skypic-test''' que se distribuyen junto con la LibIris
 
* Creadas las aplicaciones '''hex-view''', '''hex2python''' y '''skypic-test''' que se distribuyen junto con la LibIris
 +
* Creados scripts para su instalación mediante ''python setup.py install''.
 +
* Empaquetado para Debian
 +
* Creada página man
 
* Creados programas de pruebas para la detección de errores
 
* Creados programas de pruebas para la detección de errores
 
* BUGs corregidos
 
* BUGs corregidos

Revisión del 04:21 9 sep 2007

Introducción

LibIris es la librería en python para descarga de programas en la tarjeta Skypic. Implementa el protocolo del PIC_Bootloader. Además, permite cargar directamente los servidores del Proyecto Stargate. Con esta libreria es muy fácil implementar aplicaciones de usuario en las que sea necesario descargar programas en la Skypic.
El nombre Iris viene de la película Stargate, donde se colocaba el Iris como 'interfaz' con la puerta Stargate.

Características

Módulos

La libIris está formada por tres módulos:

  • InteHex: Lectura y análisis de ficheros en formato .hex de Intel.
  • Pic16_Bootloader: Implementación de los servicios ofrecidos por el Bootloader. Es el empleado para descargar ficheros .hex o Firmware en la Skypic.
  • Pic16_Firmware: Este módulo contiene programas en código máquina listos para descargarse en la Skypic. Contiene lo siguiente:
    • Monitor (Servidor genérico). Permite acceder a todos los registros internos del PIC a traves de los servicios de Load/Store
    • Servos8. Posicionamiento de hasta 8 servos del tipo Futaba 3003 o compatibles.
    • Picp. Grabación a bajo nivel de microcontroladores PIC
    • Eco. Servidor de "Eco" para hacer pruebas. Se hace "eco" de todo lo recibido por el puerto serie
    • ledp1. Clásico programa del led parpadeante
    • ledp2. Led parpadeante pero a mayor frecuencia que ledp1.
    • ledon. Simplemente enciende el led

Utilidades

Además de los módulos anteriores, la libIris viene con tres utilidades para consola, que también sirven de ejemplo de utilización:

  • hex-view: Visualización de ficheros .hex. Permite ver el contenido de los ficheros .hex en diferentes formatos
  • hex2python: Convierte un fichero .hex a un script en python que contiene el código máquina en forma de una lista
  • skypic-test: Pruebas rápidas de la Skypic. Descarga el firmware ledp para hacer que el led de la skypic parpadee y comprobar de manera rápida si está funcionando.

Ejemplos de utilización

Lectura de un fichero .hex

El código para analizar un fichero .hex es muy sencillo. Basta con crear un objeto de la clase HexReader del módulo IntelHex, pasando como parámetro el nombre del fichero .hex. Si ocurre un error se produce una excepción. Este ejemplo abre y analiza el fichero ledp.hex:

import libIris.IntelHex 
try: hr = libIris.IntelHex.HexReader ("ledp.hex") except libIris.IntelHex.ReaderError,msg: print "Error: %s" % msg sys.exit(-1)

El objeto hr contiene el código máquina. Se puede acceder a él mediante listas que pueden estar en tres formatos. Para generarlas se invocan los siguientes métodos:

  • memory(): Devuelve una lista en la que cada elemento es la dirección y su contendido. El contenido es una tupla con el byte alto y luego el bajo.
  • dataBlocks(): Devuelve una lista de bloques. Cada bloque es a su vez una lista en la que el primer elemento indica la dirección de comienzo y los siguientes son las palabras
  • dataBlocks16(): Devuelve una lista de bloques en la que cada bloque tiene un tamaño no mayor de 16 palabras

Descarga de firmware

Este es un ejemplo de código que descarga el firmware ledp que se encuentra en el módulo Pic16_Firmware. No es necesario leer ningún fichero. El usuario puede incluir su propio firmware en sus programas utilizando la herramienta hex2python.

import libIris.Pic16_Bootloader
import libIris.IntelHex
import libIris.Pic16_Firmware 
#-- Abrir puerto serie try: iris = libIris.Pic16_Bootloader.Iris("/dev/ttyUSB0") except libIris.Pic16_Bootloader.IrisError,msg: print msg sys.exit(-1)
#-- Obtener firmware a descargar. program = libIris.Pic16_Firmware.ledp2
#-- Realizar la descarga try: iris.download(program) except libIris.Pic16_Bootloader.IrisError,msg: print "\nError: %s" % msg sys.exit(-1)

Primero se crea un objeto de la clase Iris. Con ello se abre el puerto serie. Hay que especifica el nombre del dispositivo serie a emplear. En el caso de plataformas Windows se deben poner los nombres adecuados: COM1, COM2, etc.

A continuación se descarga el firmware usando el método download(). Si aparece un error se genera una excepción. En este ejemplo el firmware a descargar es el ledp2, obtenido de la librería PIC16_Firmware. Pero se podría utilizar uno del usuario.

Descarga de un fichero .hex

Este ejemplo es muy parecido al anterior, pero ahora el programa a descargar se obtiene a partir de un fichero .hex. Primero se abre el fichero. Luego se transforma al formato adecuado para su descarga. Se abre el puerto serie y finalmente se descarga:

import libIris.Pic16_Bootloader
import libIris.IntelHex
import libIris.Pic16_Firmware 
try: hr = libIris.IntelHex.HexReader ("ledp.hex") except libIris.IntelHex.ReaderError,msg: print "Error: %s" % msg sys.exit(-1)
#-- Obtener el programa en el formato adecuado para su descarga program = hr.dataBlocks16()
#-- Abrir puerto serie try: iris = libIris.Pic16_Bootloader.Iris("/dev/ttyUSB0") except libIris.Pic16_Bootloader.IrisError,msg: print msg sys.exit(-1)
#-- Realizar la descarga try: iris.download(program) except libIris.Pic16_Bootloader.IrisError,msg: print "\nError: %s" % msg sys.exit(-1)

Historia

Versión 1.2

Los cambios con respecto a la versión 1.0 son:

  • División de la librería en los tres módulos: IntelHex, PIC16_Bootloader y PIC16_Firmware. Cada uno resuelve un problema distinto. IntelHex para el parseo de ficheros .hex, PIC16_Bootloader para hacer clientes que descarguen firmware en la skypic y PIC16_Firmware donde está el código máquina de diferentes programas para el PIC, entre ellos todos los servidores del proyecto Stargate.
  • La descarga del firwmare vía web se ha sustituido por la utilización del módulo PIC16_Firmware. De esta manera se puede utilizar en ordenadores sin conexión a internet. La funcionalidad de descarga web se incluirá nuevamente en siguientes versiones.
  • Creadas las aplicaciones hex-view, hex2python y skypic-test que se distribuyen junto con la LibIris
  • Creados scripts para su instalación mediante python setup.py install.
  • Empaquetado para Debian
  • Creada página man
  • Creados programas de pruebas para la detección de errores
  • BUGs corregidos

Versión 1.0

La versión inicial fue la libiris-1.0, creada por Rafael Treviño. Estaba constituida por un único módulo con toda la funcionalidad. Además incluía la posibilidad de descargar automáticamente el firmware del proyecto Stargate a través de la web.

Descargas

Última versión: 1.2

Fichero Descripción
libIris-1.2.tgz En preparación


Versiones anteriores

Fichero Descripción
libIris-1.0.tgz Versión 1.0. Acceso a su página: libiris-1.0

Cambios

  • 2/Sep/2007: La versión 1.0 está obsoleta. Se ha llevado a esta página: Libiris-1.0
  • Junio/2007. Publicación de la version 1.0

Acceso al repositorio

svn co http://svn.iearobotics.com/libIris/