Glider, o monitor eInk open source com foco em baixa latência
(github.com/Modos-Labs)- Glider é um projeto open source para monitores EPD de baixa latência e alta taxa de atualização; este repositório reúne o design de hardware e o firmware, enquanto o gateware executado no FPGA usa separadamente o projeto open source Caster EPDC
- O suporte é voltado a painéis de display eletroforético com interface paralela, cobrindo tanto painéis monocromáticos quanto telas coloridas baseadas em matriz de filtros de cor, como Kaleido
- A placa inclui FPGA Xilinx Spartan-6 LX16, framebuffer DDR3-800, MCU STM32H750, entrada USB-C DisplayPort Alt Mode ou DVI, e alimentação para E-paper com pico de corrente de 1A em trilhos de até ±15V
- O Caster trata cada pixel como uma área de atualização independente e aplica early cancellation, reduzindo a latência de processamento para menos de 20µs e visando baixa latência nos modos binário e de 4 níveis de cinza
- O design de baixa latência exige maior largura de banda de memória e interfaces de vídeo realmente de baixa latência, como DVI e DisplayPort; no exemplo em 1080p, a abordagem tradicional exige 120MB/s, enquanto a abordagem do Caster requer 540MB/s
Papéis do Glider e do Caster
- Glider é um projeto de hardware open source para monitores EPD de baixa latência
- Este repositório contém o design de hardware e o código-fonte do firmware, enquanto o RTL executado no FPGA está no projeto Caster EPDC em um repositório separado
- O README inclui não só o Glider, mas também informações sobre painéis E Ink, formas de onda, exibição colorida, dithering e telas compatíveis
- Usuários interessados em comprar a placa podem consultar a página do produto Modos Paper Monitor no Crowd Supply
- As marcas e o conteúdo relacionados a E Ink não são endossados pela E Ink Corporation; como o material se baseia em informações públicas e pesquisa própria, pode conter erros ou imprecisões
Principais recursos
- A combinação Glider/Caster busca ser uma solução completa para monitores EPD de baixa latência e alta taxa de atualização
- Recursos suportados
- Suporte a painéis EPD com interface paralela
- Suporte a painéis das famílias E Ink, OED e DES
- Suporte a telas monocromáticas e a telas coloridas baseadas em CFA, como Kaleido
- Latência de processamento inferior a 20µs
- Modos de saída binário, 4 níveis de cinza e 16 níveis de cinza
- Modos binário e de 4 níveis de cinza otimizados para latência
- Modo híbrido automático entre binário e 16 níveis de cinza
- O software do host pode controlar atualizações por região e troca de modo em tempo de execução
- Dithering Bayer por hardware, dithering blue-noise e dithering por difusão de erro sem latência adicional
- Entrada HVsync padrão
- Suporte, no nível da placa, a entrada USB-C DisplayPort Alt Mode e DVI
Configuração de hardware
- A placa foi projetada em KiCad, e pode ser necessária a versão estável mais recente do KiCad para abrir os arquivos-fonte
- Componentes principais
- Execução do Caster em FPGA Xilinx Spartan-6 LX16
- Memória framebuffer DDR3-800
- Entrada Type-C DisplayPort Alt Mode via ponte DP-LVDS PTN3460
- Entrada DVI via conector microHDMI com decoder ADV7611
- Subsistema de alimentação para E-paper com suporte a painéis grandes
- Pico de corrente de até 1A em trilhos de ±15V
- Suporte à medição da tensão de kick-back do VCOM
- MCU STM32H750 para comunicação USB e atualização de firmware
- Taxa de processamento de até 133MP/s com difusão de erro ativada
- Taxa de processamento acima de 200MP/s com dithering desativado
Painéis E Ink e estrutura do controlador
- E Ink é uma marca da família de displays eletroforéticos, que funcionam aplicando um campo elétrico às partículas para produzir preto, branco ou estados intermediários
- Diferentemente do LCD, o EPD tem bistabilidade, mantendo o estado mesmo após a remoção do campo elétrico; assim, só precisa ser atualizado até que o pixel esteja completamente acionado
- Vantagens e desvantagens do EPD
- Como reflete a luz em vez de emiti-la, consome pouca energia e pode ser usado ao ar livre
- Mantém a imagem mesmo sem alimentação
- Em comparação com LCDs IPS modernos, fica atrás em qualidade de imagem, gama de cores e tempo de resposta
- Nos valores de exemplo, um EPD monocromático tem contraste de cerca de 17:1 e tempo de resposta de cerca de 150ms
- Um EPD colorido baseado em CFA tem contraste de cerca de 14:1, gama de cerca de 1,5% de sRGB e tempo de resposta de cerca de 150ms
- O controlador E Ink exerce um papel próximo ao controlador de display e ao timing controller de um sistema LCD, convertendo os dados brutos da imagem em sinais de acionamento do painel
- O controlador determina a tensão com base no estado atual e no estado-alvo de cada pixel, normalmente usando uma LUT chamada forma de onda para selecionar a sequência de acionamento de cada transição de estado
Painéis com e sem controlador embutido
- Os painéis E-paper se dividem em duas grandes categorias conforme tenham ou não controlador embutido
- Painéis com controlador embutido
- Podem ser conectados a MCUs por interfaces comuns, como SPI ou I2C
- Muitas vezes já integram o subsistema de alimentação, reduzindo o custo do sistema
- A latência de atualização total pode variar de 100ms a vários segundos
- Painéis sem controlador
- Podem ser acionados por um controlador dedicado, por um SoC com controlador E Ink embutido, ou por um TCON em software rodando em MCU/SoC rápido
- Controladores dedicados têm aplicação ampla, cobrindo IoT, e-readers, celulares, monitores E Ink e até possíveis notebooks com E Ink
- Permitem projetar uma arquitetura de acionamento rápida, mas o sistema precisa ser desenhado para garantir baixa latência
- Exemplos existentes de controladores dedicados open source incluem Caster + Glider, o monitor desktop E-paper Paperback e um controlador E Ink baseado em FPGA
- Caster + Glider é um controlador baseado em FPGA que oferece vários modos de atualização, processamento de latência ultrabaixa e amplo suporte a tamanhos de tela
Formas de onda e níveis de cinza
- Forma de onda (waveform) é a tabela de consulta que define como o controlador E Ink vai acionar os pixels
- As entradas da LUT são o número do frame, o nível inicial de cinza e o nível-alvo de cinza
- O controlador consulta a LUT para todos os pixels a cada frame e repete o processo, incrementando o contador de frames até que o pixel esteja completamente acionado
- Como o arquivo de forma de onda trata apenas transições de um único pixel, ele é independente da resolução
- O repositório oferece ferramentas para trabalhar com vários formatos de forma de onda
- Conversão de
iwfparafwdo EPDC i.MX6/7:./mxc_wvfm_asm v1/v2 input.iwf output.fw - Conversão de
fwparaiwf:./mxc_wvfm_dump v1/v2 input.fw output_prefix - Conversão de
wbfparaiwf:./wbf_wvfm_dump input.wbf output_prefix
- Conversão de
- Painéis E Ink e DES normalmente suportam até 16 níveis de cinza com base nas formas de onda fornecidas pelo fabricante
- Os níveis de cinza podem ser produzidos alterando o tempo de frame ou variando, em taxa de frame fixa, a quantidade de frames aplicados
- Em implementações comerciais, o acionamento em níveis de cinza é mais lento que a exibição em preto e branco e pode apresentar cintilação durante a atualização
EPD colorido e dithering
- As implementações de EPD colorido se dividem principalmente entre matriz de filtros de cor (CFA) e displays coloridos de múltiplos pigmentos
- Método CFA
- E Ink Kaleido, E Ink Triton e color DES pertencem a essa categoria
- O acionamento de baixo nível é igual ao de painéis em tons de cinza, permitindo tempo de atualização na faixa de 100 a 200ms e 16 níveis de cinza
- 16 níveis de cinza resultam em 16³ = 4096 cores
- A desvantagem é que o filtro de cor bloqueia parte da luz e escurece a tela
- Glider/Caster suporta color DES, E Ink Triton e E Ink Kaleido
- Displays coloridos de múltiplos pigmentos
- Incluem as famílias E Ink Gallery e E Ink Spectra
- Como não usam CFA, não sofrem perda de resolução nem de luz, e podem obter refletância e saturação maiores
- O acionamento é mais difícil e mais lento; Gallery de 1ª e 2ª geração é descrito com atualização de 30 segundos, e dispositivos Spectra 6 Plus com atualização de 7 segundos
- O dithering é usado para obter imagens melhores em exibição binária ou com poucos níveis de cinza
- Ordered dithering adiciona à imagem uma textura ou ruído pré-calculado e depois aplica limiarização
- Dithering por difusão de erro propaga o erro de arredondamento para pixels vizinhos
- São abordados métodos como Bayer, blue-noise, Floyd-Steinberg, Stucki e Sierra
- Em telas coloridas baseadas em CFA, a difusão de erro comum, que não considera a cor dos pixels vizinhos, pode não funcionar bem; o kernel pode ser ajustado para enviar o erro a pixels da mesma cor
- A correção de gama também é importante, pois um arredondamento simples no espaço sRGB pode escolher a cor mais próxima de forma incorreta e calcular mal o erro
Arquitetura do Caster/Glider
- O gateware do FPGA é dividido em vários módulos, e
caster.vé o design de nível superior do núcleo EPDC - O sistema completo de processamento de imagem é montado abaixo de
top.v, conectando componentes adicionais - Principais domínios de clock
clk_vi: domínio de clock do vídeo de entrada, em 1/2 da taxa de pixelsclk_epdc: domínio de clock do EPDC, em 1/4 da taxa de pixelsclk_mem: domínio de clock da memória, em 1/4 da taxa de transferência da memória
- Fluxo de processamento de pixels
memiflê do DDR SDRAM o estado local dos pixels e o coloca embi_fifo- O stream de vídeo de entrada entra em
vi_fifo - Quando o gerador local de temporização do EPDC prepara a saída de pixels, o fluxo de vídeo e os valores de estado são retirados juntos para processamento
- A imagem de entrada de 8 bits é convertida por dithering para 1 bit e 4 bits
- A consulta da forma de onda é executada no modo de 16 níveis de cinza
- O novo estado e o valor de seleção de tensão são definidos
- O novo estado entra em
bo_fifo, e o valor de seleção de tensão é enviado à tela
- O EPDC sempre processa 4 pixels por clock; se a largura da interface da tela for diferente, um rate adapter é ligado após a saída
Funções do firmware da MCU
- A MCU usa FreeRTOS e cuida das funções de housekeeping da placa
- Gerenciamento de energia do EPD
- Fornece alimentação comum, alimentação de source e alimentação de gate
- Faz ajuste da tensão VCOM e mede a tensão VCOM ideal do painel instalado
- Monitoramento de energia
- Monitora tensão e corrente em vários trilhos e verifica se estão dentro da faixa esperada
- Carregamento do bitstream do FPGA
- O FPGA não tem flash própria; ao ligar, a MCU transfere o bitstream para o FPGA via SPI
- O bitstream do FPGA e o firmware da MCU podem ser atualizados em conjunto
- Negociação USB-C
- O USB-C DisplayPort Alt Mode fornece alimentação para a placa e entrada de vídeo
- O protocolo USB PD informa ao dispositivo de origem a capacidade de entrada de vídeo
- Controla o mux de sinais Type-C conforme a orientação do cabo
- Inicialização do decoder de vídeo
- Como o FPGA não tem deserializadores rápidos para ligação direta com interfaces de vídeo de alta velocidade como DisplayPort ou DVI, a MCU inicializa chips decodificadores dedicados
- Comunicação com o PC
- O Caster pode aplicar modos de atualização e forçar atualização/limpeza em nível de pixel
- A MCU atua como dispositivo HID usando TinyUSB e encaminha mensagens entre o PC host e o FPGA
Método de acionamento de baixa latência
- O método de acionamento básico tradicional consulta a tabela de forma de onda com um contador global, o que impõe a limitação de só aceitar uma nova imagem depois que a atualização anterior termina
- Se uma atualização leva cerca de 100ms, a taxa de imagem fica em 10Hz, e uma nova imagem pode esperar até 100ms antes de começar a ser processada pelo controlador
- O Caster trata todos os pixels como áreas de atualização independentes
- O software não precisa definir regiões alinhadas aos limites dos caracteres nem reatribuir um número limitado de regiões
- Quando um pixel que já está em atualização muda novamente, aplica-se early cancellation
- Não espera o pixel ser completamente acionado
- Ele passa a ser acionado em direção ao novo estado solicitado, e o contador de frames é atualizado conforme o novo tempo de acionamento calculado
- A combinação dessas duas técnicas implementa modos binário e de 4 níveis de cinza com baixa latência
- O Caster também afirma que o trade-off entre taxa de frames e taxa de contraste deixa de ser relevante, alcançando automaticamente alta taxa de frames e alta taxa de contraste
Modo híbrido em níveis de cinza e limitações
- O Caster faz troca automática por pixel entre modo binário rápido e modo lento em níveis de cinza
- Quando a imagem de entrada muda, ela é atualizada em modo binário; se a imagem permanecer inalterada por algum tempo, ela é renderizada novamente em níveis de cinza
- Esse método exige maior largura de banda de memória
- No exemplo de um painel 1080p, o cálculo usa cerca de 120MP/s
- No método tradicional, ler 1 byte por pixel exige 120MB/s
- No Caster, só o buffer de estado dos pixels requer leitura de 2 bytes por pixel e escrita de 2 bytes por pixel, além de 0,5 byte por pixel para ler o novo valor da imagem
- Como resultado, são necessários 120MP/s × 4.5B/pixel = 540MB/s
- Para resoluções mais altas, o hardware do Glider usa memória DDR3-800
- Quando o controlador fica dentro do monitor, e não como parte da CPU/GPU do PC, são necessárias interfaces de vídeo realmente de baixa latência, como DVI ou DP, em vez de interfaces simples, porém lentas, como USB ou I80/SPI
- O texto observa que essas técnicas não ajudam em casos de uso como leitura de livros, então soluções comerciais de e-reader têm pouco motivo para implementá-las
Build e gravação
- A PCB foi projetada no KiCad 8.0, e a pilha de 4 camadas recomendada é a camada 1080 PP
- Build do bitstream do FPGA
- Requer Xilinx ISE 14.7
- Não há suporte oficial a sistemas operacionais atuais, e recomenda-se usar a máquina virtual RHEL oficial da Xilinx
- O repositório do Caster pode ser obtido com
git clone --recursive https://gitlab.com/zephray/Caster.git - Em
rtl/spartan6/top.v,COLORMODEdeve ser escolhido entreMONO,RGBWeDES - Em
rtl/defines.vh, definaOUTPUT_16Bao usar painéis de 16 bits - Os kits Modos de 6 e 13 polegadas usam a configuração padrão
MONOe 8 bits
- Build do firmware da MCU
- Requer STM32CubeIDE
- O repositório do Glider pode ser obtido com
git clone --recursive https://gitlab.com/zephray/Glider.git - Abra
Glider/fwcomo projeto no STM32CubeIDE e faça o build
- Gravação
- Instale
dfu-utile conecte o cabo USB mantendo pressionado o botão próximo à porta USB - A ferramenta de gravação fornecida usa Python 3 e o pacote
hidapi - No método manual, o firmware da MCU é gravado com
dfu-util, e o bitstream do FPGA é enviado via XMODEM a partir do shell da placa
- Instale
Telas compatíveis e limites de desempenho
- O Modos Dev Kit oferece opções de tela de 13,3 polegadas em 1600×1200 e de 6 polegadas em 1404×1072
- A placa pode acionar outros painéis, mas como cada tela usa conectores diferentes, é necessário um adaptador
- A placa principal usa conectores de 50 pinos + 16 pinos
- Um único conector de 50 pinos é suficiente para telas de 8 bits e 16 bits
- O conector de 16 pinos adiciona suporte a telas LVDS e a telas de 32 bits e 64 bits
- As telas suportadas são limitadas pelo protocolo de entrada, pela taxa de processamento e pela interface de memória
- Taxa de processamento com dithering ativado: 133MP/s
- Taxa de processamento com dithering desativado: 280MP/s
- Taxa estimada do design 8-wide: 500MP/s
- Taxa máxima de pixels do DVI baseado em ADV7611: 165MP/s
- Taxa máxima de pixels do DisplayPort baseado em PTN3460: 224MP/s
- Exemplo de interface de memória DDR2/3-800 ×16: 360MP/s
- Exemplos de pico de taxa de pixels por resolução comum
- 1600×1200 13,3 polegadas 60Hz: 125MP/s
- 1600×1200 13,3 polegadas 85Hz: 178MP/s
- 2200×1650 13,3 polegadas 60Hz: 232MP/s
- 2560×1920 13,3 polegadas 60Hz: 313MP/s
- 3200×1800 25,3 polegadas 60Hz: 364MP/s
- A renderização em níveis de cinza exige atualização da tela a 85Hz, frequência suportada pela E Ink
- A placa não detecta automaticamente a resolução da tela conectada; por isso, ela deve ser configurada manualmente no shell da placa ou com uma ferramenta de geração de configuração
- Para cálculos manuais, pode-se usar o Video Timings Calculator by Tom Verbeure
Licença e materiais de referência
- A documentação é publicada em domínio público, exceto pelos materiais de referência com licença própria explicitamente indicada
- O design de hardware é disponibilizado sob a CERN Open Source Hardware License, variante strongly-reciprocal, CERN-OHL-S
- O código do firmware usa licença MIT, e a biblioteca USB PD deriva do projeto Chromium OS e da reclamier labs, seguindo licença BSD
- Os materiais de referência incluem recursos de engenharia reversa de acionamento de EPD, projetos DIY iniciais com E Ink, um driver em níveis de cinza baseado em STM32, o EPDiy baseado em ESP32 e ferramentas e parsers para o formato de arquivo WBF
1 comentários
Opiniões no Hacker News
Todos os controladores de e-ink são ruins, então essa pessoa decidiu consertar por conta própria, publicou o resultado como hardware open source e agora ele está no estado da arte
Gosto muito de pessoas e projetos assim
Só de olhar o README, a amplitude e profundidade das informações impressionam
Quando um material desse fica disponível assim, parece que a comunidade pode gerar inovação rápida e mudanças disruptivas
Tenho acompanhado pelo Discord, mas o progresso é bem lento, e eles estão sofrendo bastante até com partes básicas
É muito mais detalhado do que eu esperava, a ponto de cobrir até a teoria física de funcionamento
Uso Kindle há mais de 10 anos, mas a falta de responsividade sempre me incomodou
Não sei se é um problema de hardware ou de software, mas fico feliz que este projeto foque em reduzir a latência pelo lado do hardware
Tenho curiosidade se alguém sabe por que o Kindle é um produto tão fraco. Uso porque o e-ink é bom e o mercado de e-books é abrangente, mas não acho que seja, de fato, um bom dispositivo
Ele até pode fazer outras coisas, mas não foi criado nem divulgado para isso; em vez de inovar em responsividade, manteve o custo baixo
Em compensação, melhorou outras conveniências de uso, como a forma de segurar, de navegar e a iluminação de fundo
O Kindle sempre foi a referência entre leitores de e-books e é o produto com tecnologia e-ink mais comum que dá para comprar de fato
Considerando as dimensões importantes do ponto de vista de negócios, é difícil chamá-lo de produto ruim
Depois disso, dá para colocar livros pelo Calibre ou por SFTP
Alguns aparelhos descarregavam em poucos dias e não cumpriam a promessa de longa duração de bateria; outros tinham qualidade tão ruim que quebraram em poucos meses
No meu uso, lendo 1 a 2 horas por dia, o Kindle dura semanas com uma carga, e ser à prova d'água é valioso porque posso ler na banheira. Nunca tive nenhum problema especial
A UI parece voltada para promover a Amazon Store, mas eu não a uso; envio livros por e-mail, leio e depois apago, então tudo bem
Seria bom ter pastas na biblioteca, e também seria bom poder conectá-lo como um pendrive USB e organizar tudo livremente pelo PC, como em outros leitores de e-book, mas não é essencial
O Kindle pode até ser um produto ruim, mas os demais parecem piores. Não conheço nenhuma marca de leitores de e-book na escala da Amazon, e todas parecem marcas chinesas desconhecidas que não investem em qualidade e reputação
Melhoraram em praticamente tudo: taxa de atualização, latência, desempenho de processamento, responsividade etc.
É uma coincidência interessante o nome ser Glider
Bastante pilotos de glider, isto é, de planadores, usam telas de e-ink pela boa legibilidade sob sol forte, normalmente rodando algo como o XCSoar em um Kobo ou Kindle com root: https://www.xcsoar.org/hardware/
Fico curioso para saber que outras tecnologias estão sendo reaproveitadas em meios de transporte de nicho
Por causa de fadiga visual e olho seco, tive interesse por soluções de e-ink durante muito tempo
Descobri que tinha um astigmatismo bem leve. O oftalmologista não recomendou correção, mas, quando corrigi, o olho seco e a fadiga visual desapareceram completamente
Portanto, independentemente da prática dos oftalmologistas quanto ao grau mínimo de prescrição, vale a pena tentar corrigir astigmatismo leve com óculos para computador
Tenho um astigmatismo bem leve no olho direito e, quando o corrigi com óculos de leitura sob medida em vez de usar óculos de leitura comuns, a diferença em fadiga visual e dores de cabeça foi total
Mesmo com óculos baratos eu já achava aceitável, mas fiquei realmente surpreso ao perceber o tamanho da diferença
Olho seco e fadiga visual costumam aparecer juntos, e há até um fórum específico sobre fadiga visual causada por telas baseadas em LED
Quem tiver problemas parecidos pode querer visitar: https://ledstrain.org/
Sou muito grato ao zephray por disponibilizar em open source tanto conhecimento sobre E Ink que tinha na cabeça
O README tem muita informação excelente sobre e-ink, já li bastante e acho que vou consultá-lo pelos próximos anos
É um material realmente incrível
Há muito tempo eu queria construir, para fins de aprendizado, um dispositivo que usasse display de e-ink, mas, como só mexi com software, não sabia por onde começar
Acho que este material vai ajudar bastante nesse aprendizado
O GitHub linkado é um espelho do repositório GitLab original: https://gitlab.com/zephray/glider
Fico curioso se alguém já investigou a ideia de adicionar controle por feedback a displays de e-ink
Tenho a impressão de que a cintilação e a latência do e-ink existem inteiramente porque o controlador funciona em malha aberta
Quero fazer um clone do Compact Mac com um display de e-ink desses
Dá para imaginar como ficaria bonito
Mas ainda não vi uma taxa de atualização de e-ink suficiente para dar conta de um cursor em movimento. Talvez hoje em dia seja possível com o driver correto
[1] https://engineersneedart.com/systemsix/systemsix.html
A duração da bateria provavelmente seria da ordem de semanas