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.
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 :-(
La libIris está formada por tres módulos:
Además de los módulos anteriores, la libIris viene con tres utilidades para consola, que también sirven de ejemplo de utilización:
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:
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.
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)
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 >>>
| 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. |
| Fichero | Descripción |
|---|---|
| libIris-1.0.tgz | Versión 1.0. Acceso a su página: libiris-1.0 |
svn co http://svn.iearobotics.com/libIris/
svn co http://svn.iearobotics.com/libIris/libiris-1.2
Los cambios con respecto a la versión 1.0 son:
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.