2 pontos por GN⁺ 2024-05-15 | 1 comentários | Compartilhar no WhatsApp
  • 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 iwf para fw do EPDC i.MX6/7: ./mxc_wvfm_asm v1/v2 input.iwf output.fw
    • Conversão de fw para iwf: ./mxc_wvfm_dump v1/v2 input.fw output_prefix
    • Conversão de wbf para iwf: ./wbf_wvfm_dump input.wbf output_prefix
  • 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 pixels
    • clk_epdc: domínio de clock do EPDC, em 1/4 da taxa de pixels
    • clk_mem: domínio de clock da memória, em 1/4 da taxa de transferência da memória
  • Fluxo de processamento de pixels
    • memif lê do DDR SDRAM o estado local dos pixels e o coloca em bi_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, COLORMODE deve ser escolhido entre MONO, RGBW e DES
    • Em rtl/defines.vh, defina OUTPUT_16B ao usar painéis de 16 bits
    • Os kits Modos de 6 e 13 polegadas usam a configuração padrão MONO e 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/fw como projeto no STM32CubeIDE e faça o build
  • Gravação
    • Instale dfu-util e 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

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

 
GN⁺ 2024-05-15
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

    • Espero que o pessoal do Pine Note veja isso
      Tenho acompanhado pelo Discord, mas o progresso é bem lento, e eles estão sofrendo bastante até com partes básicas
    • Pelo menos isto é papel eletrônico de verdade, não aquele tipo de coisa de antigamente que insistia em chamar LCD monocromático de e-paper de baixa latência
    • Não era exagero
      É 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

    • O Kindle tem responsividade suficiente para aquilo para que foi feito desde o início: ler livros
      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
    • Fico curioso para saber que tipo de uso, por causa do tempo lento de atualização, levou você a considerar o Kindle um produto ruim
      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 de fazer jailbreak e instalar algo como o KOReader, ele vira um dispositivo muito mais estável
      Depois disso, dá para colocar livros pelo Calibre ou por SFTP
    • Já usei vários leitores de e-book, e só o Kindle funcionou corretamente como eu esperava
      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
    • Nos últimos 10 anos, os dispositivos de e-ink melhoraram bastante no geral
      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/

    • Submarinos são pilotados com controles Logitech, e planadores usam leitores de e-ink como display
      Fico curioso para saber que outras tecnologias estão sendo reaproveitadas em meios de transporte de nicho
    • Pilotos de parapente também usam exatamente a mesma combinação
  • 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

    • Concordo com isso
      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
    • Que bom que você encontrou uma solução
      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/
    • Fico curioso sobre o que são “óculos para computador”
  • 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

    • Poderia ficar bonito [1]
      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
    • Um dispositivo no formato de um MacBook de 12 polegadas, com display de e-ink, glowlight laranja opcional à noite e rodando algo parecido com o Classic Mac OS, poderia ser uma máquina de escrever muito calma e portátil
      A duração da bateria provavelmente seria da ordem de semanas
    • Eu já ficaria satisfeito só com um Newton de e-ink
    • Ou então poderiam ressuscitar o Palm Pilot