LATTUINO, UN ARDUINO RECONFIGURABLE
S. E. Tropea INTI Micro y Nanoelectrónica del Bicentenario
salvador@inti.gob.ar
Introducción
Lattuino es una implementación de Arduino UNO utilizando lógica programable (FPGAs). Esto le confiere una característica única: su circuito puede adaptarse a las necesidades del proyecto donde se aplique. Su implementación fue realizada utilizando la placa Kéfir I, también desarrollada por nuestro laboratorio.
Objetivo
El principal objetivo de Lattuino es agregarle valor a las placas del proyecto Kéfir (Kit Educativo con FPGA, Inclusivo y Reciclable). De manera tal que las mismas no solo se puedan usar para enseñar lógica programable (FPGA) sino también electrónica general basada en Arduino. El principal objetivo del proyecto Kéfir es el de crear placas de desarrollo y educativas de bajo costo para la difusión de la lógica programable. Sus pilares son:
• Inclusivo: buscando un costo que lo haga accesible, y que pueda ser construido utilizando las tecnologías de soldadura disponibles en la región.
• Reciclable: buscando que el kit propiamente dicho, y el cable de configuración, puedan ser reusados para fines diferentes al de difundir la tecnología FPGA.
Así Lattuino contribuye a poder reciclar las placas Kéfir como placas Arduino.
Descripción
Para el proyecto Kéfir se seleccionaron FPGAs de bajo costo. Al mismo tiempo se seleccionaron encapsulados de fácil soldadura. La FPGA seleccionada fue la ICE40HX4KTQ144. El diseño del circuito impreso se realizó de manera tal que fuera simple de fabricar. Ver figura 1.
Durante la concepción de Kéfir se buscó utilizar un circuito para el cable de configuración que estuviera ampliamente soportado por el software disponible en el mercado. Se seleccionó el FT2232H. Al mismo tiempo, se decidió no integrar la funcionalidad de configuración en Kéfir I, dejándola por separado. Así nació el proyecto Milk (Multiple Interface Light Kit). Milk, figura 2, fue diseñado siguiendo un esquema de plug-ins. Dichos
agregados permiten reusar Milk para varias otras tareas.
Figura 1: Kéfir I, placa de desarrollo con FPGA iCE40HX4K-TQ144
Figura 2: Milk, placa de configuración y comunicación
Otro detalle al que se le dio importancia durante el desarrollo de Kéfir fue al de minimizar la cantidad de funcionalidad que se incluía en la placa principal. Esto redunda en un costo bajo. Al mismo tiempo se debió tener mucho cuidado en no omitir funcionalidad que luego limitara los usos de Kéfir I. Por esta razón se pensó en que la placa fuera expansible. El Arduino es probablemente el circuito embebido programable más popular del mundo. A su alrededor se ha creado un enorme ecosistema de placas compatibles y accesorios. Con la idea de poder aprovechar dicho ecosistema se agregaron a Kéfir conectores compatibles con Arduino. La elección de dichos conectores abrió una nueva posibilidad. Dado que Kéfir I posee una FPGA, que puede configurarse para que funcione de la manera que queramos, nada impide que funcione como la CPU y los periféricos de un Arduino. Así es que nace el proyecto Lattuino.
De esta manera las placas Kéfir I pueden ser usadas para desarrollar y/o enseñar lógica programable, pero también utilizando el flujo de trabajo de Arduino.
A los fines de maximizar la compatibilidad con Arduino se incluyó un conversor A/D de 10 bits, indispensable para poder implementar las entradas analógicas de Arduino.
La implementación de Lattuino implica varias cosas:
• La descripción de hardware necesaria para que la FPGA de Kéfir I se comporte como una CPU de Arduino, junto con sus periféricos principales.
• Un conjunto de drivers de software que permiten resolver cualquier diferencia entre el hardware de Arduino y el implementado en la FPGA.
• El software que corre en Lattuino para comunicarse con la PC (bootloader).
• Una configuración para que el entorno de trabajo de Arduino reconozca a la placa como un Arduino.
Todos estos componentes fueron desarrollados y combinados para obtener Lattuino.
Resultados
Se obtuvieron dos placas de fácil fabricación y montaje. Ambas de solo dos capas y con componentes de paso mayor o igual a 0,5 mm.
La implementación separada de Milk, junto con su esquema de plug-ins, permitió que se pudiera usar para la configuración de FPGAs iCE40, FPGAs de Xilinx, CPUs AVR (p.e. Arduino), depuración de CPUs ARM, lectura y escritura de memorias SPI y comunicación RS232 (bipolar y unipolar)
La CPU compatible con AVR, junto con los periféricos necesarios para implementar la API (Application Programming Interface, interfaz de programación de aplicaciones) de Arduino ocupó menos de 65% de los recursos de la FPGA usada en Kéfir I.
El bootloader implementado ocupó 652 bytes de memoria.
La adaptación de la API de Arduino a la CPU y periféricos implementados en la FPGA fue exitosa. Se logró un soporte completo de la API, así como de la biblioteca estándar SPI.
La integración de Lattuino con la IDE (Integrated Development Environment, entorno de desarrollo integrado) de Arduino fue exitosa.
Se tomó como referencia a la versión 1.8.1 de la misma.
Como verificación final se conectó un shield de Arduino que posee una pantalla sensible al tacto. Luego se adaptó uno de los programas demostrativos de dicho shield que permite dibujar en la pantalla táctil. Dicho programa se puede observar en la figura 3, donde se muestra a las placas Milk y Kéfir I interconectadas, junto con el shield mencionado.
Figura 3: Lattuino en la Kéfir I. Incluyendo un shield de Arduino con pantalla táctil.
Conclusiones
Kéfir I: Se obtuvo un diseño simple y de gran flexibilidad. La inclusión de conectores compatibles con Arduino permitió utilizar shields económicos disponibles en el mercado y abrió la puerta a Lattuino. Todos los periféricos incluidos funcionaron correctamente. Milk: Su diseño independiente de Kéfir I permitió que buena parte del circuito pueda usarse para otras tareas. Uno de los resultados interesantes fue la posibilidad de reemplazar costosos cables de configuración con excelentes prestaciones. Lattuino: Es la primer implementación abierta de Arduino en FPGA, y solo existe otra implementación cerrada utilizando FPGAs más costosas. Si bien Lattuino posee algunas limitaciones de memoria su funcionamiento ha probado ser confiable y se pudo integrar completamente con las herramientas de Arduino. Cumplió con el objetivo de agregar un valor importante a Kéfir.
Bibliografía
TROPEA, S.E. (2016). Kéfir (Kit Educativo con FPGA, Inclusivo y Reciclable). http://fpgalibre.sourceforge.net/Kefir/
TROPEA, S.E. (2016). MILK (Multiple Interface Light Kit). http://fpgalibre.sourceforge.net/Milk/
TROPEA, S.E. (2017). Lattuino. http://fpgalibre.sourceforge.net/Lattuino/
Ver+/-