- Glider es un proyecto de código abierto para monitores EPD de baja latencia y alta tasa de refresco; este repositorio contiene el diseño de hardware y el firmware, mientras que el gateware que corre en el FPGA usa el diseño abierto Caster EPDC en un repositorio separado
- El soporte está dirigido a paneles de pantalla electroforética con interfaz paralela, y puede manejar tanto paneles en blanco y negro como pantallas a color basadas en arreglos de filtros de color como Kaleido
- La placa incluye un FPGA Xilinx Spartan-6 LX16, framebuffer DDR3-800, MCU STM32H750, entrada USB-C DisplayPort Alt Mode o DVI, y una fuente para E-paper capaz de entregar hasta 1A de corriente pico en rieles de ±15V
- Caster trata cada píxel como si fuera un área de actualización independiente y aplica early cancellation, reduciendo la latencia de procesamiento a menos de 20µs, con el objetivo de lograr baja latencia en modos binario y de escala de grises de 4 niveles
- El diseño de baja latencia exige mayor ancho de banda de memoria y interfaces de video realmente de baja latencia como DVI y DisplayPort; en el ejemplo de 1080p, el método tradicional requiere 120MB/s, mientras que el enfoque de Caster necesita 540MB/s
El papel de Glider y Caster
- Glider es un proyecto de hardware de código abierto para monitores EPD de baja latencia
- Este repositorio incluye el diseño de hardware y el código fuente del firmware, mientras que el RTL que se ejecuta en el FPGA corresponde al diseño Caster EPDC en otro repositorio
- El README no solo cubre Glider, sino también paneles E Ink, waveforms, visualización en color, dithering y pantallas compatibles
- Los usuarios interesados en comprar la placa pueden revisar la página del producto Modos Paper Monitor en Crowd Supply
- Las marcas y el contenido relacionados con E Ink no cuentan con respaldo de E Ink Corporation; se basan en información pública e investigación propia, por lo que puede haber errores o inexactitudes
Funciones principales
- La combinación Glider/Caster busca ser una solución integral para monitores EPD de baja latencia y alta tasa de refresco
- Funciones compatibles
- Soporte para paneles EPD con interfaz paralela
- Soporte para paneles de las familias E Ink, OED y DES
- Soporte para pantallas en blanco y negro y pantallas a color basadas en CFA como Kaleido
- Latencia de procesamiento menor a 20µs
- Modos de salida binario, escala de grises de 4 niveles y escala de grises de 16 niveles
- Modos de operación binario y de 4 niveles optimizados para latencia
- Modo híbrido automático binario + escala de grises de 16 niveles
- El software del host puede controlar en tiempo de ejecución las actualizaciones por región y el cambio de modo
- Dithering Bayer por hardware, dithering blue-noise y dithering por difusión de error sin latencia adicional
- Entrada HVsync estándar
- Soporte a nivel de placa para entrada USB-C DisplayPort Alt Mode y DVI
Configuración de hardware
- La placa fue diseñada con KiCad, y puede ser necesaria la versión estable más reciente para abrir los archivos fuente
- Componentes principales
- Ejecución de Caster en un FPGA Xilinx Spartan-6 LX16
- Memoria framebuffer DDR3-800
- Entrada Type-C DisplayPort Alt Mode a través de un puente PTN3460 DP-LVDS
- Entrada DVI mediante conector microHDMI con un decodificador ADV7611
- Etapa de alimentación para E-paper compatible con paneles grandes
- Hasta 1A de corriente pico en rieles de ±15V
- Soporte para medición de voltaje VCOM kick-back
- MCU STM32H750 para comunicación USB y actualización de firmware
- Rendimiento de hasta 133MP/s con dithering por difusión de error activado
- Rendimiento superior a 200MP/s con el dithering desactivado
Paneles E Ink y estructura del controlador
- E Ink es una marca de pantallas electroforéticas similares al papel, que funcionan aplicando campos eléctricos a partículas para producir blanco, negro o estados intermedios
- A diferencia de un LCD, un EPD tiene bistabilidad, por lo que conserva su estado incluso después de retirar el campo eléctrico y solo necesita actualizarse hasta que el píxel quede completamente conducido
- Ventajas y desventajas del EPD
- Como no emite luz y es reflectivo, consume poca energía y puede usarse en exteriores
- Mantiene la imagen incluso después de cortar la energía
- Frente a un LCD IPS moderno, queda en desventaja en calidad de imagen, gama de color y tiempo de respuesta
- En cifras de ejemplo, un EPD monocromo tiene un contraste de aproximadamente 17:1 y un tiempo de respuesta de alrededor de 150ms
- Un EPD a color basado en CFA tiene un contraste de aproximadamente 14:1, cerca de 1.5% de gama sRGB y un tiempo de respuesta de alrededor de 150ms
- Un controlador E Ink cumple un papel parecido al controlador de pantalla y al timing controller de un sistema LCD, convirtiendo los datos de imagen originales en señales de manejo para el panel
- El controlador determina el voltaje según el estado actual del píxel y el estado objetivo, y normalmente usa una LUT llamada waveform para seleccionar la secuencia de conducción adecuada para cada transición de estado
Paneles con controlador integrado y sin controlador
- Los paneles E-paper se dividen en dos grandes grupos según integren o no un controlador
- Paneles con controlador integrado
- Pueden conectarse a un MCU mediante interfaces comunes como SPI o I2C
- A menudo integran la etapa de alimentación, reduciendo el costo del sistema
- La latencia de actualización total puede ir de 100ms a varios segundos
- Paneles sin controlador
- Pueden manejarse con un controlador dedicado, un SoC con controlador E Ink integrado o un TCON por software en un MCU/SoC rápido
- Los controladores dedicados pueden aplicarse ampliamente a IoT, lectores electrónicos, teléfonos, monitores E Ink e incluso posibles laptops con E Ink
- Permiten diseñar una arquitectura de manejo rápida, pero el diseño del sistema debe garantizar baja latencia
- Entre los ejemplos previos de controladores dedicados de código abierto están Caster + Glider, el monitor de escritorio E-paper Paperback y un controlador E Ink basado en FPGA
- Caster + Glider es un controlador basado en FPGA que ofrece varios modos de actualización, procesamiento de latencia ultrabaja y amplio soporte para distintos tamaños de pantalla
Waveforms y escala de grises
- Un waveform es una tabla de consulta que determina cómo debe manejar el controlador E Ink cada píxel
- La entrada de la LUT se compone del número de frame, el nivel de escala de grises de origen y el nivel de escala de grises de destino
- El controlador consulta la LUT en cada frame para todos los píxeles y repite el proceso incrementando el contador de frames hasta que el píxel queda completamente conducido
- Los archivos de waveform solo tratan transiciones de un solo píxel, por lo que son independientes de la resolución
- El repositorio ofrece herramientas para trabajar con varios formatos de waveform
- Convertir de
iwfafwpara i.MX6/7 EPDC:./mxc_wvfm_asm v1/v2 input.iwf output.fw - Convertir de
fwaiwf:./mxc_wvfm_dump v1/v2 input.fw output_prefix - Convertir de
wbfaiwf:./wbf_wvfm_dump input.wbf output_prefix
- Convertir de
- Los paneles E Ink y DES normalmente admiten hasta 16 niveles de escala de grises según los waveforms proporcionados por el fabricante
- La escala de grises puede generarse cambiando la duración del frame o variando la cantidad de frames aplicados con una tasa fija
- En implementaciones comerciales, el manejo en escala de grises es más lento que la visualización en blanco y negro y puede producir parpadeo durante la actualización
EPD a color y dithering
- Las implementaciones de EPD a color se dividen principalmente en arreglo de filtros de color (CFA) o pantallas a color de múltiples pigmentos
- Método CFA
- E Ink Kaleido, E Ink Triton y color DES pertenecen a esta categoría
- El manejo de bajo nivel es igual al de un panel en escala de grises, por lo que puede usar tiempos de actualización del orden de 100~200ms y 16 niveles de escala de grises
- 16 niveles de escala de grises se traducen en 16³ = 4096 colores
- La desventaja es que el filtro de color bloquea parte de la luz y oscurece la pantalla
- Glider/Caster es compatible con color DES, E Ink Triton y E Ink Kaleido
- Pantallas a color de múltiples pigmentos
- Incluyen las familias E Ink Gallery y E Ink Spectra
- Al no usar CFA, no sufren reducción de resolución ni pérdida óptica, y pueden lograr mayor reflectancia y saturación
- Son más difíciles y más lentas de manejar; se menciona que Gallery de 1.ª y 2.ª generación tarda 30 segundos en actualizar y dispositivos Spectra 6 Plus tardan 7 segundos
- El dithering se usa para obtener mejores imágenes en visualización binaria o con pocos niveles de escala de grises
- El ordered dithering añade a la imagen una textura o ruido precalculado y luego aplica un umbral
- El error-diffusion dithering reparte el error de redondeo a los píxeles vecinos
- Se tratan métodos como Bayer, blue-noise, Floyd-Steinberg, Stucki y Sierra
- En pantallas a color basadas en CFA, la difusión de error convencional puede no encajar bien porque no considera el color de los píxeles vecinos; el kernel puede ajustarse para enviar el error a píxeles del mismo color
- La corrección gamma también es importante; si se redondea simplemente en espacio sRGB, la selección del color más cercano y el cálculo del error pueden salir mal
Arquitectura de Caster/Glider
- El gateware del FPGA está dividido en varios módulos, y
caster.ves el diseño de nivel superior del núcleo EPDC - El sistema completo de procesamiento de imagen se construye conectando componentes adicionales bajo
top.v - Principales dominios de reloj
clk_vi: dominio de reloj del video de entrada, a 1/2 de la velocidad de píxelclk_epdc: dominio de reloj del EPDC, a 1/4 de la velocidad de píxelclk_mem: dominio de reloj de memoria, a 1/4 de la velocidad de transferencia de memoria
- Flujo de procesamiento de píxeles
memiflee el estado local de píxeles desde la DDR SDRAM y lo coloca enbi_fifo- El stream de video de entrada entra en
vi_fifo - Cuando el generador local de timing del EPDC prepara la salida de píxeles, extrae y procesa juntos la entrada de video y los valores de estado
- La imagen de entrada de 8 bits se convierte mediante dithering a 1 bit y 4 bits
- En modo de escala de grises de 16 niveles se consulta el waveform
- Se determinan el nuevo estado y el valor de selección de voltaje
- El nuevo estado entra en
bo_fifoy el valor de selección de voltaje se envía a la pantalla
- El EPDC siempre procesa 4 píxeles por ciclo de reloj, y si el ancho de la interfaz de pantalla difiere, se añade un rate adapter en la salida
Funciones del firmware del MCU
- El MCU usa FreeRTOS y se encarga de las funciones de housekeeping de la placa
- Gestión de energía del EPD
- Proporciona alimentación común, de fuente y de compuerta
- Ajusta el voltaje VCOM y mide el voltaje VCOM óptimo del panel instalado
- Monitoreo de energía
- Supervisa voltajes y corrientes de varios rieles y verifica que estén dentro del rango esperado
- Carga del bitstream del FPGA
- El FPGA no tiene flash propia; al encender, el MCU le envía el bitstream por SPI
- Es posible actualizar juntos el bitstream del FPGA y el firmware del MCU
- Negociación USB-C
- USB-C DisplayPort Alt Mode permite tanto alimentación de la placa como entrada de video
- Mediante el protocolo USB PD informa al dispositivo fuente que admite entrada de video
- Controla el mux de señales Type-C según la orientación del cable
- Inicialización del decodificador de video
- Como el FPGA no cuenta con deserializadores de alta velocidad para conectarse directamente a interfaces de video rápidas como DisplayPort o DVI, inicializa un chip decodificador dedicado
- Comunicación con la PC
- Caster puede aplicar modos de actualización y actualizaciones forzadas o limpieza a nivel de píxel
- El MCU usa TinyUSB para funcionar como dispositivo HID y retransmitir mensajes entre la PC host y el FPGA
Método de operación de baja latencia
- El método de operación básico tradicional consulta la tabla de waveform con un contador global, lo que impone la limitación de recibir una nueva imagen solo después de que termine la actualización previa
- Si una actualización tarda unos 100ms, la tasa de imagen queda en 10Hz y una nueva imagen puede tener que esperar hasta 100ms antes de que el controlador la procese
- Caster trata todos los píxeles como si fueran áreas de actualización independientes
- El software no necesita definir regiones alineadas con bordes de texto ni reasignar una cantidad limitada de regiones
- Si un píxel que ya se está actualizando vuelve a cambiar, aplica early cancellation
- No espera a que el píxel quede completamente conducido
- Lo conduce hacia el nuevo estado solicitado y actualiza el contador de frames según el nuevo tiempo de conducción calculado
- Al combinar ambas técnicas, implementa modos binarios y de escala de grises de 4 niveles con baja latencia
- Caster también afirma que el compromiso entre tasa de frames y contraste deja de ser relevante, y que logra automáticamente tanto alta tasa de frames como alto contraste
Modo híbrido de escala de grises y limitaciones
- Caster cambia automáticamente por píxel entre un modo binario rápido y un modo de escala de grises lento
- Cuando la imagen de entrada cambia, actualiza en modo binario, y si la imagen permanece sin cambios por un tiempo, la vuelve a renderizar en escala de grises
- Este enfoque exige mayor ancho de banda de memoria
- En el ejemplo de un panel 1080p se calcula en unos 120MP/s
- El método tradicional requiere 120MB/s leyendo 1 byte por píxel
- Caster necesita leer 2 bytes por píxel y escribir 2 bytes por píxel solo para el buffer de estado de píxeles, además de otros 0.5 bytes por píxel para leer el nuevo valor de imagen
- Como resultado, se requieren 120MP/s × 4.5B/pixel = 540MB/s
- El hardware de Glider usa memoria DDR3-800 para soportar resoluciones más altas
- Cuando el controlador está dentro del monitor y no forma parte del CPU/GPU de la PC, se requieren interfaces de video realmente de baja latencia como DVI o DP, en lugar de interfaces simples pero lentas como USB o I80/SPI
- Se indica que estas técnicas no ayudan en casos de uso como la lectura de libros, por lo que las soluciones comerciales de lectores electrónicos tienen pocos motivos para implementarlas
Compilación y flasheo
- El PCB fue diseñado con KiCad 8.0, y el stackup recomendado de 4 capas es 1080 PP layer
- Compilación del bitstream del FPGA
- Se requiere Xilinx ISE 14.7
- No tiene soporte oficial en sistemas operativos modernos, y se recomienda usar la máquina virtual oficial de RHEL de Xilinx
- El repositorio de Caster puede descargarse con
git clone --recursive https://gitlab.com/zephray/Caster.git - En
rtl/spartan6/top.v,COLORMODEdebe elegirse entreMONO,RGBW,DES - En
rtl/defines.vh, definirOUTPUT_16Bcuando se use un panel de 16 bits - Los kits Modos de 6 y 13 pulgadas usan la configuración predeterminada
MONOy 8 bits
- Compilación del firmware del MCU
- Se requiere STM32CubeIDE
- El repositorio de Glider puede descargarse con
git clone --recursive https://gitlab.com/zephray/Glider.git - Abrir
Glider/fwcomo proyecto de STM32CubeIDE y compilar
- Flasheo
- Instalar
dfu-utily conectar el cable USB mientras se mantiene presionado el botón cercano al puerto USB - La herramienta de flasheo incluida usa Python 3 y el paquete
hidapi - El método manual consiste en escribir el firmware del MCU con
dfu-utily luego transferir el bitstream del FPGA por XMODEM desde la shell de la placa
- Instalar
Pantallas compatibles y límites de rendimiento
- El Modos Dev Kit ofrece opciones de pantalla de 13.3 pulgadas 1600×1200 y 6 pulgadas 1404×1072
- La placa puede manejar otros paneles, pero como cada pantalla tiene conectores distintos, se necesita un adaptador
- La placa principal usa conectores de 50 pines + 16 pines
- Un solo conector de 50 pines es suficiente para pantallas de 8 bits y 16 bits
- El conector de 16 pines añade soporte para pantallas LVDS y pantallas de 32 bits y 64 bits
- Las pantallas compatibles están limitadas por el protocolo de entrada, el rendimiento de procesamiento y la interfaz de memoria
- Rendimiento con dithering activado: 133MP/s
- Rendimiento con dithering desactivado: 280MP/s
- Rendimiento estimado del diseño 8-wide: 500MP/s
- Tasa máxima de píxel DVI basada en ADV7611: 165MP/s
- Tasa máxima de píxel DisplayPort basada en PTN3460: 224MP/s
- Ejemplo de interfaz de memoria DDR2/3-800 ×16: 360MP/s
- Ejemplos de tasa máxima de píxel según resolución común
- 1600×1200 de 13.3 pulgadas a 60Hz: 125MP/s
- 1600×1200 de 13.3 pulgadas a 85Hz: 178MP/s
- 2200×1650 de 13.3 pulgadas a 60Hz: 232MP/s
- 2560×1920 de 13.3 pulgadas a 60Hz: 313MP/s
- 3200×1800 de 25.3 pulgadas a 60Hz: 364MP/s
- El renderizado en escala de grises requiere refrescar la pantalla a 85Hz, y 85Hz es la frecuencia de refresco que soporta E Ink
- La placa no puede detectar automáticamente la resolución de la pantalla conectada, por lo que debe configurarse manualmente desde la shell de la placa o usando una herramienta de generación de configuración
- Para cálculos manuales puede usarse la Video Timings Calculator by Tom Verbeure
Licencia y materiales de referencia
- La documentación se publica en dominio público, excepto los materiales de referencia con licencias separadas explícitas
- El diseño de hardware se publica bajo CERN Open Source Hardware License, variante strongly-reciprocal, es decir, CERN-OHL-S
- El código del firmware usa licencia MIT, y la librería USB PD deriva del proyecto Chromium OS y de reclamier labs, con licencia BSD
- Entre los materiales de referencia se incluyen recursos de ingeniería inversa sobre manejo de EPD, proyectos DIY tempranos de E Ink, un driver de escala de grises basado en STM32, EPDiy basado en ESP32, y herramientas y parsers para el formato WBF
1 comentarios
Opiniones en Hacker News
Todos los controladores de tinta electrónica son bastante malos, así que esta persona decidió arreglarlo por su cuenta, publicó el resultado como hardware open source y ahora está a la altura de lo más avanzado.
Me encantan este tipo de personas y proyectos.
Solo con ver el README, impresiona la amplitud y profundidad de la información.
Cuando material así se publica de esta forma, parece que la comunidad puede generar innovación rápida y cambios disruptivos.
Vengo siguiendo el Discord y el avance es bastante lento; están sufriendo mucho incluso con cosas básicas.
Es mucho más detallado de lo que esperaba, al punto de cubrir incluso la teoría física de cómo funciona.
Uso Kindle desde hace más de 10 años, pero la falta de respuesta siempre me molestó.
No sé si es un problema de hardware o de software, pero me alegra que este proyecto se enfoque en reducir la latencia desde el lado del hardware.
Me pregunto si alguien sabe por qué el Kindle es un producto tan flojo. Lo uso porque la tinta electrónica es buena y el mercado de ebooks es amplio, pero no creo que sea realmente un buen dispositivo.
Puede hacer otras cosas, pero no fue diseñado ni comercializado para eso, así que mantuvieron bajo el costo en vez de innovar en capacidad de respuesta.
En cambio, mejoraron otros aspectos de facilidad de uso, como la forma de sostenerlo, la navegación y la luz de fondo.
El Kindle siempre fue el punto de referencia de los lectores de ebooks y es el producto con tecnología de tinta electrónica más común que realmente se puede comprar.
Visto desde las dimensiones importantes para el negocio, es difícil decir que sea un mal producto.
Después puedes cargarle libros con Calibre o por SFTP.
Algunos agotaban la batería en pocos días y no cumplían la promesa de larga autonomía; otros tenían una calidad pésima y se rompían a los pocos meses.
Con mi uso, de 1 a 2 horas de lectura al día, el Kindle dura semanas con una carga, y como es resistente al agua puedo leer en la tina, lo cual es valioso. Nunca tuve ningún problema especial.
La interfaz parece orientada a promocionar la Amazon Store, pero no la uso: envío libros por email, los leo y luego los borro, así que está bien.
Me gustaría que la biblioteca tuviera carpetas y que, como otros lectores de ebooks, pudiera conectarse como una memoria USB para organizarlo libremente desde la PC, pero no es imprescindible.
Puede que el Kindle sea un mal producto, pero el resto parece peor. No conozco ninguna marca de lectores de ebooks de la escala de Amazon, y todas parecen marcas chinas desconocidas que no invierten en calidad ni reputación.
Mejoraron en casi todo: velocidad de refresco, latencia, rendimiento de cómputo, capacidad de respuesta, etc.
Es una coincidencia divertida que se llame Glider.
Muchos pilotos de gliders, es decir, planeadores, usan pantallas de tinta electrónica porque se leen bien bajo luz solar intensa, normalmente con Kobo o Kindle rooteados ejecutando algo como XCSoar: https://www.xcsoar.org/hardware/
Me hace preguntarme qué otras tecnologías se estarán reutilizando dentro de medios de transporte de nicho.
Durante mucho tiempo me interesaron las soluciones de tinta electrónica por la fatiga visual y la sequedad ocular.
Resultó que tenía un astigmatismo muy leve. El oftalmólogo no recomendó corregirlo, pero al hacerlo desaparecieron por completo la sequedad ocular y la fatiga visual.
Así que, independientemente de las prácticas de graduación mínima de los oftalmólogos, conviene probar corregir un astigmatismo leve con lentes para computadora.
Tengo un astigmatismo muy leve en el ojo derecho, y al corregirlo con lentes de lectura personalizados en vez de lentes de aumento comunes, la diferencia en fatiga visual y dolores de cabeza fue total.
Incluso con lentes baratos se sentía aceptable, pero me sorprendió muchísimo darme cuenta de lo grande que era la diferencia.
La sequedad ocular y la fatiga visual suelen aparecer juntas, y también existe un foro dedicado a tratar la fatiga visual causada por pantallas basadas en LED.
Quienes tengan problemas parecidos podrían visitarlo: https://ledstrain.org/
Le agradezco mucho a zephray por publicar como open source todo ese conocimiento sobre E Ink que tenía en la cabeza.
El README tiene muchísima información excelente sobre tinta electrónica; ya leí bastante y creo que lo voy a consultar durante los próximos años.
Es un material realmente genial.
Desde hace mucho quería crear un dispositivo con pantalla de tinta electrónica con fines de aprendizaje, pero como solo he trabajado con software no sabía por dónde empezar.
Creo que este material va a ayudar bastante en ese aprendizaje.
El GitHub enlazado es un mirror del repositorio original en GitLab: https://gitlab.com/zephray/glider
Me pregunto si alguien habrá investigado la idea de agregar control por retroalimentación a las pantallas de tinta electrónica.
Me da la impresión de que el parpadeo y la latencia de la tinta electrónica se deben por completo a que el controlador funciona en lazo abierto.
Quiero crear un clon de Compact Mac con una de estas pantallas de tinta electrónica.
Me imagino lo genial que se vería.
Pero todavía no he visto una velocidad de refresco de tinta electrónica suficiente para manejar un cursor en movimiento. Quizá hoy sea posible con el driver correcto.
[1] https://engineersneedart.com/systemsix/systemsix.html
La batería probablemente también duraría semanas.