LibIris

Logo de la libIris

Contenido

 [ocultar] 

Introducción

LibIris es la librería en python para descarga de programas en la tarjeta Skypic. Implementa el protocolo del PIC_Bootloader. Es necesario, por tanto, que el PIC_Bootloader haya sido grabado previamente en la Skypic. 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

Autores

Agradecimientos

Muchas gracias por las pruebas realizadas en Plataformas Windows a:

Muchas gracias a David, el autor de este estupendo artículo sobre cómo empaquetar un script python para Debian. En su blog sólo figura el nombre de David, no sé sus apellidos :-(

Módulos

La libIris está formada por tres módulos:

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:

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:

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)

Prueba rápida en modo interactivo

También se pueden hacer pruebas directamente usando el modo interactivo de python. Con muy pocos comandos se pueden hacer pruebas de descarga. En este ejemplo se descargará el Firmware ledp2 que se encuentra en el módulo libIris.Pic16_Firmware y que hace que el led se ponga a parpadear.

El usuario debe sustituir el nombre del dispositivo serie por el correspondiente. En este ejemplo se usa el /dev/ttyUSB0 en Linux. En el caso de Windows habría que poner COM1, COM2, etc.

Los comandos tecleados por el usuario se han puesto en negrita

Python 2.4.4 (#2, Apr  5 2007, 20:11:18)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from libIris.Pic16_Bootloader import * >>> from libIris.Pic16_Firmware import * >>> iris = Iris("/dev/ttyUSB0") Serial port /dev/ttyUSB0 opened. >>> iris.download(ledp2) Reset Skypic Esperando Bootloader Bootloader OK
Descargando: *** OK Ejecutando programa >>>

Descargas

Última versión: 1.2

Fichero Descripción
Libiris-1.2.zip Fuentes
python-libiris_1.2-5_i386-ubuntu-10.04.deb Paquete para Ubuntu 10.04
python-libiris_1.2-5_i386-ubuntu-9-04.deb Paquete para Ubuntu 9.04 (Jaunty Jackalope)
Python-libiris_1.2-5_i386.deb Paquete para Debian/Etch y Ubuntu 7.04
Python-libiris_1.2-5_arm.deb Paquete para arquitectura arm. Probado en un NSLU2
libIris-1.2.win32.exe Windows XP. Autoinstalable.

Versiones anteriores

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

Cambios

Acceso al repositorio

svn co http://svn.iearobotics.com/libIris/
svn co http://svn.iearobotics.com/libIris/libiris-1.2

Historia

Versión 1.2

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

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.