- Glider adalah proyek open source untuk monitor EPD berlatensi rendah dan refresh rate tinggi. Repositori ini berisi desain hardware dan firmware, sementara gateware yang berjalan di FPGA menggunakan desain open source terpisah Caster EPDC
- Target dukungannya adalah panel display elektroforesis dengan antarmuka paralel, serta dapat menangani panel monokrom dan layar warna berbasis color filter array seperti Kaleido
- Board mencakup FPGA Xilinx Spartan-6 LX16, framebuffer DDR3-800, MCU STM32H750, input USB-C DisplayPort Alt Mode atau DVI, serta catu daya E-paper yang menghasilkan arus puncak 1A pada rail hingga ±15V
- Caster memperlakukan tiap piksel seperti area update independen dan menerapkan early cancellation, sehingga menurunkan latensi pemrosesan hingga di bawah 20µs dan menargetkan latensi rendah pada mode biner serta grayscale 4 tingkat
- Desain berlatensi rendah membutuhkan bandwidth memori yang lebih besar dan antarmuka video berlatensi rendah sungguhan seperti DVI atau DisplayPort. Pada contoh 1080p, metode tradisional membutuhkan 120MB/s, sedangkan metode Caster membutuhkan 540MB/s
Peran Glider dan Caster
- Glider adalah proyek hardware open source untuk monitor EPD berlatensi rendah
- Repositori ini berisi desain hardware dan source firmware, sementara RTL yang berjalan di FPGA adalah desain Caster EPDC dari repositori terpisah
- README ini tidak hanya membahas Glider, tetapi juga panel E Ink, waveform, tampilan warna, dithering, dan layar yang kompatibel
- Pengguna yang tertarik membeli board dapat melihat halaman produk Modos Paper Monitor di Crowd Supply
- Merek dagang dan konten terkait E Ink tidak dijamin oleh E Ink Corporation; informasi ini didasarkan pada informasi publik dan riset mandiri sehingga dapat mengandung kesalahan atau ketidakakuratan
Fitur utama
- Kombinasi Glider/Caster menargetkan solusi lengkap untuk monitor EPD berlatensi rendah dan refresh rate tinggi
- Fitur yang didukung
- Dukungan panel EPD dengan antarmuka paralel
- Dukungan panel keluarga E Ink, OED, dan DES
- Dukungan layar monokrom dan layar warna berbasis CFA seperti Kaleido
- Latensi pemrosesan di bawah 20µs
- Mode output biner, grayscale 4 tingkat, dan grayscale 16 tingkat
- Mode penggerak biner dan grayscale 4 tingkat yang dioptimalkan untuk latensi
- Mode hybrid biner dan grayscale 16 tingkat otomatis
- Software host dapat mengontrol update area dan pergantian mode saat runtime
- Dithering Bayer hardware, dithering blue-noise, dan dithering error-diffusion tanpa latensi tambahan
- Input HVsync standar
- Dukungan input USB-C DisplayPort Alt Mode dan DVI pada level board
Konfigurasi hardware
- Board dirancang dengan KiCad, dan versi stabil terbaru KiCad mungkin diperlukan untuk membuka file sumbernya
- Komponen utama
- Caster berjalan pada FPGA Xilinx Spartan-6 LX16
- Memori framebuffer DDR3-800
- Input Type-C DisplayPort Alt Mode melalui bridge PTN3460 DP-LVDS
- Input DVI berbasis konektor microHDMI melalui decoder ADV7611
- Bagian catu daya E-paper yang mendukung panel besar
- Arus puncak hingga 1A pada rail ±15V
- Dukungan pengukuran tegangan VCOM kick-back
- MCU STM32H750 untuk komunikasi USB dan upgrade firmware
- Throughput hingga 133MP/s saat dithering error-diffusion diaktifkan
- Throughput di atas 200MP/s saat dithering dinonaktifkan
Struktur panel E Ink dan controller
- E Ink adalah merek dari keluarga display elektroforesis yang menyerupai kertas, bekerja dengan memberikan medan listrik pada partikel untuk menghasilkan kondisi hitam, putih, atau kondisi antara
- Berbeda dari LCD, EPD memiliki bistabilitas yang mempertahankan kondisi bahkan setelah medan listrik dihilangkan, sehingga piksel hanya perlu di-refresh sampai sepenuhnya digerakkan
- Kelebihan dan kekurangan EPD
- Karena memantulkan cahaya dan tidak memancarkannya, konsumsi dayanya rendah dan dapat digunakan di luar ruangan
- Gambar tetap dipertahankan setelah daya dimatikan
- Dibandingkan LCD IPS modern, EPD kalah dalam kualitas tampilan, gamut warna, dan waktu respons
- Dalam angka contoh, EPD hitam-putih memiliki rasio kontras sekitar 17:1 dan waktu respons sekitar 150ms
- EPD warna berbasis CFA memiliki rasio kontras sekitar 14:1, gamut warna sekitar 1,5% sRGB, dan waktu respons sekitar 150ms
- Controller E Ink berperan mirip display controller dan timing controller pada sistem LCD, mengubah data gambar asli menjadi sinyal penggerak panel
- Controller menentukan tegangan berdasarkan status piksel saat ini dan status target, dan biasanya menggunakan LUT yang disebut waveform untuk memilih urutan penggerak untuk tiap transisi status
Panel dengan controller bawaan dan tanpa controller bawaan
- Panel E-paper secara garis besar terbagi menjadi dua jenis berdasarkan ada tidaknya controller bawaan
- Panel dengan controller bawaan
- Dapat terhubung ke MCU melalui antarmuka umum seperti SPI atau I2C
- Sering kali memiliki bagian catu daya terintegrasi sehingga biaya sistem lebih rendah
- Latensi update penuh bisa berkisar dari 100ms hingga beberapa detik
- Panel tanpa controller
- Dapat digerakkan dengan controller khusus, SoC dengan controller E Ink bawaan, atau TCON software pada MCU/SoC cepat
- Controller khusus dapat diterapkan luas untuk IoT, e-reader, ponsel, monitor E Ink, hingga kemungkinan laptop E Ink
- Struktur penggerak cepat dapat dirancang, tetapi desain sistem harus menjamin latensi rendah
- Contoh controller khusus open source yang sudah ada mencakup Caster + Glider, monitor E-paper desktop Paperback, dan FPGA E Ink controller
- Caster + Glider adalah controller berbasis FPGA yang menyediakan berbagai mode update, pemrosesan latensi sangat rendah, dan cakupan dukungan layar yang luas
Waveform dan grayscale
- Waveform adalah tabel lookup yang menentukan bagaimana controller E Ink menggerakkan piksel
- Input LUT terdiri dari nomor frame, level grayscale awal, dan level grayscale target
- Controller melakukan lookup LUT untuk semua piksel pada setiap frame, lalu mengulang sambil menaikkan frame counter hingga piksel sepenuhnya digerakkan
- File waveform hanya menangani transisi satu piksel sehingga independen dari resolusi
- Repositori menyediakan alat untuk bekerja dengan beberapa format waveform
- Konversi dari
iwfkefwuntuk i.MX6/7 EPDC:./mxc_wvfm_asm v1/v2 input.iwf output.fw - Konversi dari
fwkeiwf:./mxc_wvfm_dump v1/v2 input.fw output_prefix - Konversi dari
wbfkeiwf:./wbf_wvfm_dump input.wbf output_prefix
- Konversi dari
- Panel E Ink dan DES biasanya mendukung hingga 16 tingkat grayscale berdasarkan waveform yang disediakan vendor
- Grayscale dapat dibuat dengan mengubah waktu frame atau mengubah jumlah frame yang diterapkan pada frame rate tetap
- Penggerak grayscale pada implementasi komersial lebih lambat daripada tampilan hitam-putih, dan kedipan dapat muncul selama refresh
EPD warna dan dithering
- Implementasi EPD warna terutama terbagi menjadi color filter array (CFA) atau display warna multi-pigmen
- Metode CFA
- E Ink Kaleido, E Ink Triton, dan color DES termasuk metode ini
- Penggerak level rendahnya sama seperti panel grayscale, sehingga dapat memakai waktu refresh sekitar 100–200ms dan grayscale 16 tingkat
- Grayscale 16 tingkat menghasilkan 16³ = 4096 warna
- Kekurangannya, filter warna menyaring cahaya sehingga layar menjadi lebih gelap
- Glider/Caster mendukung color DES, E Ink Triton, dan E Ink Kaleido
- Display warna multi-pigmen
- Mencakup keluarga E Ink Gallery dan E Ink Spectra
- Karena tidak menggunakan CFA, tidak ada penurunan resolusi maupun kehilangan cahaya, dan reflektansi serta saturasi yang lebih tinggi dapat diperoleh
- Lebih sulit dan lebih lambat untuk digerakkan; Gallery generasi 1 dan 2 disebut memiliki refresh 30 detik, sementara perangkat Spectra 6 Plus refresh 7 detik
- Dithering digunakan untuk membuat gambar lebih baik pada tampilan grayscale terbatas atau biner
- Ordered dithering menambahkan tekstur atau noise yang sudah dihitung sebelumnya ke gambar lalu melakukan thresholding
- Error-diffusion dithering meneruskan error pembulatan ke piksel sekitar
- Metode seperti Bayer, blue-noise, Floyd-Steinberg, Stucki, dan Sierra dibahas
- Pada layar warna berbasis CFA, error diffusion biasa yang tidak mempertimbangkan warna piksel tetangga bisa kurang cocok, dan kernel dapat disesuaikan agar error dikirim ke piksel dengan warna yang sama
- Koreksi gamma juga penting; pembulatan sederhana di ruang sRGB dapat membuat pemilihan warna terdekat dan perhitungan error menjadi keliru
Arsitektur Caster/Glider
- Gateware FPGA dibagi menjadi beberapa modul, dengan
caster.vsebagai desain tingkat atas untuk core EPDC - Sistem pemrosesan gambar secara keseluruhan dibentuk dengan menghubungkan komponen tambahan di bawah
top.v - Domain clock utama
clk_vi: domain clock video input, 1/2 dari kecepatan pikselclk_epdc: domain clock EPDC, 1/4 dari kecepatan pikselclk_mem: domain clock memori, 1/4 dari laju transfer memori
- Alur pemrosesan piksel
memifmembaca status piksel lokal dari DDR SDRAM dan memasukkannya kebi_fifo- Stream video input masuk ke
vi_fifo - Ketika generator timing lokal EPDC menyiapkan output piksel, input video dan nilai status diambil bersama untuk diproses
- Gambar input 8-bit didither menjadi 1-bit dan 4-bit
- Pada mode grayscale 16 tingkat, lookup waveform dilakukan
- Status baru dan nilai pemilihan tegangan ditentukan
- Status baru masuk ke
bo_fifo, dan nilai pemilihan tegangan dikirim ke layar
- EPDC selalu memproses 4 piksel per clock, dan jika lebar antarmuka layar berbeda, rate adapter ditempatkan setelah output
Fitur firmware MCU
- MCU menggunakan FreeRTOS untuk menangani fungsi housekeeping pada board
- Manajemen daya EPD
- Menyediakan catu daya common, source, dan gate
- Melakukan pengaturan tegangan VCOM serta pengukuran tegangan VCOM optimal pada panel yang terpasang
- Monitoring daya
- Memantau tegangan dan arus pada berbagai rail serta memastikan semuanya berada dalam rentang yang diharapkan
- Pemuatan bitstream FPGA
- FPGA tidak memiliki flash sendiri, sehingga saat power-on MCU mengirim bitstream ke FPGA melalui SPI
- Bitstream FPGA dan firmware MCU dapat digabung untuk update bersama
- Negosiasi USB-C
- Mendukung daya board dan input video melalui USB-C DisplayPort Alt Mode
- Mengumumkan kemampuan input video ke perangkat sumber melalui protokol USB PD
- Mengontrol mux sinyal Type-C sesuai orientasi kabel
- Inisialisasi decoder video
- Karena FPGA tidak memiliki deserializer berkecepatan tinggi untuk terhubung langsung ke antarmuka video berkecepatan tinggi seperti DisplayPort atau DVI, chip decoder khusus diinisialisasi
- Komunikasi PC
- Caster dapat menerapkan mode update serta forced update/clear pada level piksel
- MCU menggunakan TinyUSB untuk beroperasi sebagai perangkat HID dan meneruskan pesan antara PC host dan FPGA
Metode penggerak latensi rendah
- Metode penggerak dasar tradisional memiliki keterbatasan karena menggunakan global counter untuk lookup tabel waveform, sehingga gambar baru baru dapat diterima setelah update sebelumnya selesai
- Jika update memakan waktu sekitar 100ms, image rate menjadi 10Hz, dan gambar baru bisa menunggu hingga 100ms sebelum diproses controller
- Caster memperlakukan semua piksel seperti area update independen
- Software tidak perlu menetapkan area sesuai batas karakter atau merealokasi jumlah area yang terbatas
- Jika piksel yang sedang di-update berubah lagi, early cancellation diterapkan
- Tidak menunggu hingga piksel sepenuhnya digerakkan
- Piksel digerakkan menuju status baru yang diminta, dan frame counter diperbarui berdasarkan waktu penggerak yang baru dihitung
- Kedua teknik ini digabungkan untuk menerapkan mode biner dan grayscale 4 tingkat berlatensi rendah
- Caster menyatakan bahwa trade-off antara frame rate dan rasio kontras juga tidak lagi relevan, dan frame rate tinggi serta rasio kontras tinggi dicapai secara otomatis
Mode grayscale hybrid dan batasannya
- Caster otomatis beralih antara mode biner cepat dan mode grayscale lambat per piksel
- Saat gambar input berubah, update dilakukan dalam mode biner; jika gambar tidak berubah untuk beberapa waktu, gambar dirender ulang dalam grayscale
- Metode ini membutuhkan bandwidth memori yang lebih besar
- Pada contoh panel 1080p, dihitung sekitar 120MP/s
- Metode tradisional membutuhkan 120MB/s dengan pembacaan 1 byte per piksel
- Caster membutuhkan pembacaan 2 byte dan penulisan 2 byte per piksel hanya untuk buffer status piksel, ditambah 0,5 byte per piksel untuk membaca nilai gambar baru
- Hasilnya, dibutuhkan 120MP/s × 4,5B/pixel = 540MB/s
- Hardware Glider menggunakan memori DDR3-800 untuk resolusi yang lebih tinggi
- Jika controller berada di dalam monitor dan bukan bagian dari CPU/GPU PC, diperlukan antarmuka video latensi rendah sungguhan seperti DVI atau DP, bukan antarmuka sederhana tetapi lambat seperti USB atau I80/SPI
- Teknik ini tidak membantu untuk use case seperti membaca buku, sehingga solusi e-reader komersial disebut tidak punya banyak alasan untuk mengimplementasikannya
Build dan flashing
- PCB dirancang dengan KiCad 8.0, dan stackup 4-layer yang direkomendasikan adalah layer 1080 PP
- Build bitstream FPGA
- Membutuhkan Xilinx ISE 14.7
- Sistem operasi terbaru tidak didukung secara resmi, dan penggunaan virtual machine RHEL resmi dari Xilinx direkomendasikan
- Repositori Caster dapat diambil dengan
git clone --recursive https://gitlab.com/zephray/Caster.git COLORMODEpadartl/spartan6/top.vdipilih dariMONO,RGBW, atauDESOUTPUT_16Bpadartl/defines.vhdidefinisikan saat menggunakan panel 16-bit- Kit Modos 6 inci dan 13 inci cocok dengan default
MONOdan pengaturan 8-bit
- Build firmware MCU
- Membutuhkan STM32CubeIDE
- Repositori Glider dapat diambil dengan
git clone --recursive https://gitlab.com/zephray/Glider.git - Buka
Glider/fwsebagai proyek STM32CubeIDE lalu build
- Flashing
- Instal
dfu-util, lalu sambungkan kabel USB sambil menekan tombol dekat port USB - Tool flashing yang disediakan menggunakan Python 3 dan paket
hidapi - Metode manual adalah menulis firmware MCU dengan
dfu-util, lalu mengirim bitstream FPGA melalui XMODEM dari shell board
- Instal
Layar kompatibel dan batasan performa
- Modos Dev Kit menyediakan opsi layar 13,3 inci 1600×1200 dan 6 inci 1404×1072
- Board dapat menggerakkan panel lain, tetapi tiap layar memiliki konektor berbeda sehingga adaptor diperlukan
- Mainboard menggunakan konektor 50-pin + 16-pin
- Satu konektor 50-pin cukup untuk layar 8-bit dan 16-bit
- Konektor 16-pin menambahkan dukungan untuk layar LVDS serta layar 32-bit dan 64-bit
- Layar yang dapat didukung dibatasi oleh protokol input, throughput, dan antarmuka memori
- Throughput saat dithering aktif: 133MP/s
- Throughput saat dithering nonaktif: 280MP/s
- Estimasi throughput desain 8-wide: 500MP/s
- Pixel rate maksimum DVI berbasis ADV7611: 165MP/s
- Pixel rate maksimum DisplayPort berbasis PTN3460: 224MP/s
- Contoh antarmuka memori DDR2/3-800 ×16: 360MP/s
- Contoh peak pixel rate untuk resolusi umum
- 1600×1200 13,3 inci 60Hz: 125MP/s
- 1600×1200 13,3 inci 85Hz: 178MP/s
- 2200×1650 13,3 inci 60Hz: 232MP/s
- 2560×1920 13,3 inci 60Hz: 313MP/s
- 3200×1800 25,3 inci 60Hz: 364MP/s
- Rendering grayscale mengharuskan layar di-refresh pada 85Hz, dan 85Hz adalah frekuensi refresh yang didukung E Ink
- Board tidak dapat mendeteksi resolusi layar yang terhubung secara otomatis, sehingga harus diatur manual dari shell board atau menggunakan tool pembuat konfigurasi
- Untuk perhitungan manual, Video Timings Calculator by Tom Verbeure dapat digunakan
Lisensi dan referensi
- Dokumen dirilis sebagai public domain, kecuali materi referensi yang memiliki lisensi terpisah sebagaimana dinyatakan
- Desain hardware dirilis di bawah CERN-OHL-S, varian strongly-reciprocal dari CERN Open Source Hardware License
- Kode firmware berlisensi MIT, sementara library USB PD diturunkan dari proyek Chromium OS dan reclamier labs serta mengikuti lisensi BSD
- Referensi mencakup materi reverse engineering penggerak EPD, proyek DIY E Ink awal, driver grayscale berbasis STM32, EPDiy berbasis ESP32, serta tool dan parser format file WBF
1 komentar
Pendapat di Hacker News
Semua controller e-ink selama ini kurang bagus, lalu orang ini memutuskan untuk memperbaikinya sendiri, merilis hasilnya sebagai hardware open source, dan sekarang sudah menjadi yang mutakhir
Saya benar-benar suka orang dan proyek seperti ini
Dari README saja, cakupan dan kedalaman informasinya sudah mengesankan
Kalau materi seperti ini dibuka ke publik, rasanya komunitas bisa menghasilkan inovasi cepat dan perubahan yang disruptif
Saya mengikuti Discord mereka, tetapi progresnya cukup lambat, dan mereka masih banyak kesulitan bahkan pada hal-hal dasar
Jauh lebih detail dari yang saya perkirakan, sampai membahas teori fisika tentang cara kerjanya
Saya sudah memakai Kindle lebih dari 10 tahun, tetapi kurangnya responsivitas selalu mengganggu
Entah ini masalah hardware atau software, tetapi senang melihat proyek ini berfokus mengurangi latensi dari sisi hardware
Saya penasaran apakah ada yang tahu kenapa Kindle adalah produk yang seburuk ini. Saya memakainya karena e-ink bagus dan pasar e-book-nya komprehensif, tetapi saya tidak benar-benar menganggapnya perangkat yang bagus
Memang bisa dipakai untuk hal lain, tetapi produk ini tidak dibuat atau dipasarkan untuk itu, jadi alih-alih melakukan inovasi responsivitas, mereka menjaga biaya tetap rendah
Sebagai gantinya, mereka memperbaiki kenyamanan penggunaan lain seperti cara memegang, cara navigasi, dan backlight
Kindle selalu menjadi tolok ukur perangkat e-book dan merupakan produk teknologi e-ink yang paling umum bisa dibeli
Dilihat dari dimensi yang penting secara bisnis, sulit menyebutnya produk buruk
Setelah itu, buku bisa dimasukkan lewat Calibre atau SFTP
Ada perangkat yang baterainya habis hanya dalam beberapa hari sehingga tidak memenuhi janji daya tahan baterai panjang, dan ada yang kualitasnya buruk sekali sampai rusak dalam beberapa bulan
Dengan pemakaian saya, Kindle bertahan beberapa minggu sekali isi daya untuk membaca 1–2 jam per hari, dan karena tahan air saya bisa membacanya di bak mandi, jadi itu berharga. Saya tidak pernah mengalami masalah khusus
UI-nya terasa disesuaikan untuk mempromosikan Amazon Store, tetapi saya tidak memakainya; saya mengirim buku lewat email, membacanya, lalu menghapusnya, jadi tidak masalah
Akan bagus kalau ada folder di library, dan kalau bisa disambungkan seperti USB flash drive seperti perangkat e-book lain sehingga saya bisa menata sesuka hati dari PC, tetapi itu tidak wajib
Kindle mungkin saja produk buruk, tetapi yang lain tampaknya lebih buruk. Saya tidak tahu satu pun merek perangkat e-book berskala Amazon, dan semuanya terlihat seperti merek Tiongkok tanpa nama yang tidak berinvestasi pada kualitas dan reputasi
Hampir semuanya meningkat, termasuk kecepatan refresh, latensi, performa komputasi, dan responsivitas
Kebetulan yang menarik bahwa namanya Glider
Cukup banyak pilot glider, alias sailplane, memakai layar e-ink karena mudah dibaca di bawah sinar matahari terik, biasanya dengan menjalankan sesuatu seperti XCSoar di Kobo atau Kindle yang sudah di-root: https://www.xcsoar.org/hardware/
Jadi penasaran teknologi apa lagi yang didaur ulang di dalam moda transportasi niche
Saya sudah lama tertarik pada solusi e-ink karena mata lelah dan mata kering
Ternyata saya punya astigmatisme yang sangat ringan. Dokter mata tidak menyarankan koreksi, tetapi setelah dikoreksi, mata kering dan mata lelah saya benar-benar hilang
Jadi, terlepas dari praktik dokter mata soal kekuatan resep minimum, ada baiknya mencoba mengoreksi astigmatisme ringan dengan kacamata untuk komputer
Saya punya astigmatisme sangat ringan di mata kanan, dan setelah dikoreksi dengan kacamata baca khusus alih-alih kacamata baca biasa, perbedaannya sangat besar untuk mata lelah dan sakit kepala
Kacamata murah pun terasa cukup baik, tetapi saya benar-benar terkejut saat menyadari seberapa besar perbedaannya
Mata kering dan mata lelah sering muncul bersamaan, dan ada juga forum khusus yang membahas ketegangan mata akibat layar berbasis LED
Orang yang punya masalah serupa layak mampir ke sana: https://ledstrain.org/
Saya sangat berterima kasih karena zephray membuka pengetahuan E Ink yang ada di kepalanya sebagai open source seperti ini
README-nya berisi banyak informasi bagus tentang e-ink, dan saya sudah membaca cukup banyak; sepertinya akan saya jadikan referensi selama beberapa tahun ke depan
Ini materi yang sangat keren
Sejak lama saya ingin membuat perangkat yang memakai display e-ink untuk tujuan belajar, tetapi karena selama ini hanya mengerjakan software, saya tidak tahu harus mulai dari mana
Materi ini sepertinya akan cukup membantu proses belajar itu
GitHub yang ditautkan adalah mirror dari repositori GitLab asli: https://gitlab.com/zephray/glider
Saya penasaran apakah ada yang pernah meneliti ide menambahkan kontrol umpan balik ke display e-ink
Rasanya kedipan dan latensi e-ink sepenuhnya terjadi karena controllernya memakai metode open-loop
Saya ingin membuat klon Compact Mac dengan display e-ink seperti ini
Terbayang betapa kerennya tampilannya
Namun saya belum pernah melihat kecepatan refresh e-ink yang cukup untuk menangani kursor bergerak. Mungkin sekarang bisa jika drivernya tepat
[1] https://engineersneedart.com/systemsix/systemsix.html
Daya tahan baterainya juga mungkin akan berada dalam hitungan minggu