- Glider कम-लेटेंसी, high-refresh-rate EPD monitor के लिए एक open source project है। यह repository hardware design और firmware रखती है, जबकि FPGA पर चलने वाला gateware अलग open source Caster EPDC design का उपयोग करता है
- इसका target electrophoretic display panels हैं जिनमें parallel interface होता है, और यह black-and-white panels तथा Kaleido जैसे color filter array आधारित color screens, दोनों को handle कर सकता है
- board में Xilinx Spartan-6 LX16 FPGA, DDR3-800 framebuffer, STM32H750 MCU, USB-C DisplayPort Alt Mode या DVI input, और ±15V rails पर अधिकतम 1A peak current देने वाली E-paper power supply शामिल है
- Caster हर pixel को independent update area की तरह treat करता है और early cancellation लागू करता है, जिससे processing latency 20µs से कम हो जाती है और binary तथा 4-level grayscale modes में कम latency लक्ष्य होती है
- low-latency design के लिए ज्यादा memory bandwidth और DVI/DisplayPort जैसे वास्तविक low-latency video interfaces चाहिए; 1080p example में traditional method के 120MB/s की तुलना में Caster method को 540MB/s चाहिए
Glider और Caster की भूमिका
- Glider low-latency EPD monitor के लिए open source hardware project है
- इस repository में hardware design और firmware source हैं, और FPGA पर चलने वाला RTL अलग repository के Caster EPDC design पर आधारित है
- README में Glider के अलावा E Ink panels, waveforms, color display, dithering और compatible screens से जुड़ी सामग्री भी शामिल है
- board खरीदने में रुचि रखने वाले users Modos Paper Monitor Crowd Supply product page देख सकते हैं
- E Ink से जुड़े trademarks और सामग्री E Ink Corporation द्वारा endorsed नहीं हैं, और public information तथा internal research पर आधारित होने के कारण इनमें errors या inaccuracies हो सकती हैं
मुख्य features
- Glider/Caster combination का लक्ष्य low-latency, high-refresh-rate EPD monitor के लिए complete solution बनना है
- supported features
- parallel interface वाले EPD panels का support
- E Ink, OED, DES series panels का support
- black-and-white screens और Kaleido जैसे CFA-based color screens का support
- 20µs से कम processing latency
- binary, 4-level grayscale, 16-level grayscale output modes
- latency-optimized binary और 4-level grayscale driving modes
- automatic binary और 16-level grayscale hybrid mode
- host software runtime पर region updates और mode switching control कर सकता है
- extra latency के बिना hardware Bayer dithering, blue-noise dithering, error diffusion dithering
- standard HVsync input
- board level पर USB-C DisplayPort Alt Mode और DVI input support
Hardware configuration
- board KiCad में design किया गया है, और source files खोलने के लिए latest stable KiCad version की जरूरत हो सकती है
- मुख्य components
- Xilinx Spartan-6 LX16 FPGA पर Caster चलता है
- DDR3-800 framebuffer memory
- PTN3460 DP-LVDS bridge के जरिए Type-C DisplayPort Alt Mode input
- ADV7611 decoder के जरिए microHDMI connector आधारित DVI input
- बड़े panels को support करने वाला E-paper power section
- ±15V rails पर अधिकतम 1A peak current
- VCOM kick-back voltage measurement support
- USB communication और firmware upgrade के लिए STM32H750 MCU
- error diffusion dithering enabled होने पर अधिकतम 133MP/s throughput
- dithering disabled होने पर 200MP/s से अधिक throughput
E Ink panels और controller structure
- E Ink कागज जैसे electrophoretic display family का brand है, और यह particles पर electric field लगाकर black/white या intermediate states बनाता है
- LCD के विपरीत, EPD में bistability होती है, यानी electric field हटने के बाद भी state बनी रहती है, और pixels को केवल पूरी तरह drive होने तक update करना होता है
- EPD के फायदे और नुकसान
- यह light emit नहीं करता, बल्कि reflect करता है, इसलिए power consumption कम है और outdoor use संभव है
- power हटने के बाद भी image बनी रहती है
- modern IPS LCD की तुलना में display quality, color gamut और response time में disadvantage है
- example numbers में black-and-white EPD में लगभग 17:1 contrast और लगभग 150ms response time है
- CFA-based color EPD में लगभग 14:1 contrast, लगभग 1.5% sRGB color gamut और लगभग 150ms response time है
- E Ink controller LCD system के display controller और timing controller जैसी भूमिका निभाता है, और raw image data को panel driving signals में बदलता है
- controller current pixel state और target state के आधार पर voltage तय करता है, और आमतौर पर waveform नाम की LUT का उपयोग करके state transitions के लिए driving sequence चुनता है
Controller-integrated panels और non-integrated panels
- E-paper panels controller built-in होने या न होने के आधार पर मोटे तौर पर दो categories में बंटते हैं
- controller-integrated panels
- SPI या I2C जैसे common interfaces से MCU से connect किए जा सकते हैं
- अक्सर power section integrated होता है, जिससे system cost कम होती है
- full update latency 100ms से लेकर कई seconds तक हो सकती है
- controller-less panels
- dedicated controller, E Ink controller built-in SoC, या fast MCU/SoC के software TCON से drive किए जा सकते हैं
- dedicated controller को IoT, e-book readers, phones, E Ink monitors और E Ink laptops की संभावना तक व्यापक रूप से apply किया जा सकता है
- fast driving architecture design किया जा सकता है, लेकिन system design को low latency guarantee करनी होगी
- existing open source dedicated controller examples में Caster + Glider, Paperback desktop E-paper monitor, और FPGA E Ink controller शामिल हैं
- Caster + Glider FPGA-based controller है, जो multiple update modes, ultra-low-latency processing और wide screen support range देता है
Waveforms और grayscale
- waveform एक lookup table है जो तय करता है कि E Ink controller pixel को कैसे drive करेगा
- LUT input में frame number, starting grayscale level और target grayscale level शामिल होते हैं
- controller सभी pixels के लिए हर frame में LUT lookup करता है, और pixel पूरी तरह drive होने तक frame counter बढ़ाते हुए repeat करता है
- waveform file केवल single-pixel transition handle करती है, इसलिए resolution से independent होती है
- repository कई waveform formats पर काम करने के tools देती है
iwfसे i.MX6/7 EPDC के लिएfwमें convert:./mxc_wvfm_asm v1/v2 input.iwf output.fwfwसेiwfमें convert:./mxc_wvfm_dump v1/v2 input.fw output_prefixwbfसेiwfमें convert:./wbf_wvfm_dump input.wbf output_prefix
- E Ink और DES panels vendor-provided waveform के आधार पर आमतौर पर maximum 16-level grayscale support करते हैं
- grayscale frame time बदलकर, या fixed frame rate पर applied frames की संख्या बदलकर बनाया जा सकता है
- commercial implementations में grayscale driving black-and-white display से धीमी होती है, और update के दौरान flickering दिख सकती है
Color EPD और dithering
- Color EPD implementations मुख्यतः color filter array (CFA) या multi-pigment color display में बंटते हैं
- CFA method
- E Ink Kaleido, E Ink Triton, color DES इसी method में आते हैं
- low-level driving grayscale panel जैसा ही होता है, इसलिए 100–200ms range का update time और 16-level grayscale इस्तेमाल हो सकता है
- 16-level grayscale से 16³ = 4096 colors मिलते हैं
- color filter light को filter करता है, जिससे screen dark हो जाती है—यह इसका disadvantage है
- Glider/Caster color DES, E Ink Triton और E Ink Kaleido support करता है
- multi-pigment color display
- इसमें E Ink Gallery और E Ink Spectra series शामिल हैं
- CFA न होने से resolution reduction और optical loss नहीं होता, और higher reflectance तथा saturation मिल सकता है
- driving ज्यादा कठिन और धीमी है; 1st/2nd gen Gallery में 30-second update, और Spectra 6 Plus devices में 7-second update बताया गया है
- सीमित grayscale या binary display में बेहतर image बनाने के लिए dithering इस्तेमाल होती है
- ordered dithering image में precomputed texture या noise जोड़कर thresholding करती है
- error-diffusion dithering rounding error को neighboring pixels तक pass करती है
- Bayer, blue-noise, Floyd-Steinberg, Stucki, Sierra जैसे methods cover किए गए हैं
- CFA-based color screens में adjacent pixels के color को consider न करने वाली सामान्य error diffusion अच्छी तरह fit नहीं हो सकती, और kernel को same-color pixels तक error भेजने के लिए adjust किया जा सकता है
- gamma correction भी महत्वपूर्ण है; sRGB space में simple rounding करने से closest color selection और error calculation गलत हो सकते हैं
Caster/Glider architecture
- FPGA gateware कई modules में बंटा है, और
caster.vEPDC core का top-level design है - पूरा image processing system
top.vके नीचे additional components जोड़कर बनाया जाता है - मुख्य clock domains
clk_vi: input video clock domain, pixel speed का 1/2clk_epdc: EPDC clock domain, pixel speed का 1/4clk_mem: memory clock domain, memory transfer rate का 1/4
- pixel processing flow
memifDDR SDRAM से local pixel state पढ़करbi_fifoमें डालता है- input video stream
vi_fifoमें जाता है - EPDC का local timing generator pixel output तैयार करता है तो video input और state values साथ में निकाली और process की जाती हैं
- 8-bit input image को 1-bit और 4-bit में dither किया जाता है
- 16-level grayscale mode में waveform lookup किया जाता है
- नया state और voltage selection value तय किए जाते हैं
- नया state
bo_fifoमें जाता है, और voltage selection value screen को भेजी जाती है
- EPDC हमेशा per clock 4 pixels process करता है, और screen interface width अलग होने पर output के बाद rate adapter जुड़ता है
MCU firmware features
- MCU FreeRTOS का उपयोग करके board के housekeeping functions संभालता है
- EPD power management
- common power, source power और gate power provide करता है
- VCOM voltage adjustment और installed panel के optimal VCOM voltage measurement करता है
- power monitoring
- कई rails के voltage और current monitor करता है और जांचता है कि वे expected range में हैं या नहीं
- FPGA bitstream loading
- FPGA में अपनी flash नहीं है; power-on पर MCU SPI के जरिए bitstream FPGA को भेजता है
- FPGA bitstream और MCU firmware को साथ bundle करके update किया जा सकता है
- USB-C negotiation
- USB-C DisplayPort Alt Mode के जरिए board power और video input support करता है
- USB PD protocol से source device को video input capability बताता है
- cable orientation के अनुसार Type-C signal mux control करता है
- video decoder initialization
- FPGA के पास DisplayPort या DVI जैसे high-speed video interfaces से directly connect करने के लिए high-speed deserializer नहीं है, इसलिए dedicated decoder chip initialize की जाती है
- PC communication
- Caster update mode और forced update/clear को pixel level पर apply कर सकता है
- MCU TinyUSB का उपयोग करके HID device की तरह काम करता है, और host PC तथा FPGA के बीच messages relay करता है
Low-latency driving method
- existing basic driving method global counter से waveform table lookup करता है, जिससे पिछला update पूरा होने के बाद ही नई image लेने की limitation होती है
- अगर update में लगभग 100ms लगते हैं, तो image rate 10Hz हो जाता है, और नई image controller में process होने से पहले maximum 100ms तक इंतजार करना पड़ सकता है
- Caster सभी pixels को independent update areas की तरह treat करता है
- software को character boundaries के हिसाब से regions set करने या limited region count reassign करने की जरूरत नहीं होती
- अगर पहले से update हो रहा pixel फिर बदलता है, तो early cancellation लागू होती है
- pixel पूरी तरह drive होने तक इंतजार नहीं किया जाता
- इसे नए requested state की तरफ drive किया जाता है, और नए calculated drive time के आधार पर frame counter update होता है
- दोनों techniques मिलाकर low-latency binary और 4-level grayscale modes implement किए गए हैं
- Caster बताता है कि frame rate और contrast ratio का trade-off भी अब relevant नहीं है, और high frame rate तथा high contrast ratio अपने-आप हासिल होते हैं
Hybrid grayscale mode और limitations
- Caster fast binary mode और slow grayscale mode के बीच pixel level पर automatic switching करता है
- input image बदलने पर binary mode में update करता है, और image कुछ समय तक न बदले तो grayscale में फिर render करता है
- यह method ज्यादा memory bandwidth मांगता है
- 1080p panel example में लगभग 120MP/s के रूप में calculate किया गया है
- traditional method में per pixel 1 byte read से 120MB/s चाहिए
- Caster में केवल pixel state buffer के लिए per pixel 2-byte read और 2-byte write चाहिए, और new image value read के लिए per pixel 0.5 byte और चाहिए
- नतीजतन 120MP/s × 4.5B/pixel = 540MB/s चाहिए
- Glider hardware higher resolutions के लिए DDR3-800 memory का उपयोग करता है
- जब controller PC के CPU/GPU का हिस्सा न होकर monitor के अंदर होता है, तो USB या I80/SPI जैसे simple लेकिन slow interfaces के बजाय DVI या DP जैसे real low-latency video interfaces चाहिए
- ये techniques book reading जैसे use cases में मददगार नहीं हैं, इसलिए commercial e-book solutions के लिए इन्हें implement करने की वजह कम है
Build और flashing
- PCB KiCad 8.0 में design किया गया है, और recommended 4-layer stackup 1080 PP layer है
- FPGA bitstream build
- Xilinx ISE 14.7 चाहिए
- latest operating systems officially supported नहीं हैं, और Xilinx की official RHEL virtual machine इस्तेमाल करने की सलाह दी जाती है
- Caster repository
git clone --recursive https://gitlab.com/zephray/Caster.gitसे ली जा सकती है rtl/spartan6/top.vमेंCOLORMODEके लिएMONO,RGBW,DESमें से चुनेंrtl/defines.vhमेंOUTPUT_16Bको 16-bit panel उपयोग करते समय define करें- Modos 6-inch और 13-inch kits के लिए defaults
MONO, 8-bit settings सही हैं
- MCU firmware build
- STM32CubeIDE चाहिए
- Glider repository
git clone --recursive https://gitlab.com/zephray/Glider.gitसे ली जा सकती है Glider/fwको STM32CubeIDE project के रूप में खोलकर build करें
- flashing
dfu-utilinstall करें और USB port के पास वाला button दबाए रखते हुए USB cable connect करें- provided flashing tool Python 3 और
hidapipackage का उपयोग करता है - manual method में
dfu-utilसे MCU firmware write करें, और board shell में XMODEM के जरिए FPGA bitstream transfer करें
Compatible screens और performance limits
- Modos Dev Kit 13.3-inch 1600×1200 और 6-inch 1404×1072 screen options देता है
- board अन्य panels भी drive कर सकता है, लेकिन हर screen का connector अलग होने से adapter चाहिए
- mainboard 50-pin + 16-pin connectors इस्तेमाल करता है
- single 50-pin connector 8-bit और 16-bit screens के लिए पर्याप्त है
- 16-pin connector LVDS screens और 32-bit/64-bit screens support जोड़ता है
- supportable screens input protocol, throughput और memory interface से limited हैं
- dithering enabled throughput: 133MP/s
- dithering disabled throughput: 280MP/s
- 8-wide design का estimated throughput: 500MP/s
- ADV7611-based DVI maximum pixel rate: 165MP/s
- PTN3460-based DisplayPort maximum pixel rate: 224MP/s
- DDR2/3-800 ×16 memory interface example: 360MP/s
- common resolutions के peak pixel rate examples
- 1600×1200 13.3-inch 60Hz: 125MP/s
- 1600×1200 13.3-inch 85Hz: 178MP/s
- 2200×1650 13.3-inch 60Hz: 232MP/s
- 2560×1920 13.3-inch 60Hz: 313MP/s
- 3200×1800 25.3-inch 60Hz: 364MP/s
- grayscale rendering के लिए screen को 85Hz पर refresh करना पड़ता है, और 85Hz E Ink द्वारा supported refresh frequency है
- board connected screen resolution को automatically detect नहीं कर सकता, इसलिए board shell में manual setting करनी होगी या configuration generation tool इस्तेमाल करना होगा
- manual calculation के लिए Video Timings Calculator by Tom Verbeure इस्तेमाल किया जा सकता है
License और references
- document, अलग license बताए गए reference materials को छोड़कर, public domain में release किया गया है
- hardware design CERN Open Source Hardware License strongly-reciprocal variant यानी CERN-OHL-S के तहत release किया गया है
- firmware code MIT license के तहत है, और USB PD library Chromium OS project तथा reclamier labs से derived है और BSD license follow करती है
- references में EPD driving reverse-engineering material, early E Ink DIY projects, STM32-based grayscale driver, ESP32-based EPDiy, WBF file format tools और parser शामिल हैं
1 टिप्पणियां
Hacker News की राय
सभी eInk controllers खराब हैं, इसलिए इस व्यक्ति ने खुद इसे ठीक करने का फैसला किया, नतीजे को open source hardware के रूप में जारी किया, और अब यह आधुनिक स्तर का हो गया है
ऐसे लोग और ऐसे projects सच में अच्छे लगते हैं
सिर्फ README देखकर भी जानकारी की चौड़ाई और गहराई प्रभावशाली लगती है
अगर ऐसी सामग्री इस तरह खुलकर उपलब्ध हो, तो community में तेज innovation और disruptive बदलाव आ सकते हैं
Discord पर follow कर रहा हूं, लेकिन प्रगति काफी धीमी है, और वे बुनियादी चीजों में भी काफी जूझ रहे हैं
यह अपेक्षा से कहीं ज्यादा विस्तार में है, यहां तक कि इसके पीछे की physical theory तक बताता है
मैं Kindle 10 साल से ज्यादा समय से इस्तेमाल कर रहा हूं, लेकिन responsiveness की कमी हमेशा खटकती रही है
यह hardware की समस्या है या software की, पता नहीं, लेकिन अच्छा है कि यह project hardware side से latency घटाने पर ध्यान दे रहा है
जानना चाहता हूं कि किसी को पता है क्या कि Kindle इतना खराब product क्यों है। eInk अच्छा है और ebook market व्यापक है इसलिए इस्तेमाल करता हूं, लेकिन सच में इसे अच्छा device नहीं मानता
इससे दूसरी चीजें भी की जा सकती हैं, लेकिन इसे उस तरह बनाया या market नहीं किया गया, इसलिए responsiveness में क्रांति लाने के बजाय cost कम रखी गई
बदले में पकड़ने के तरीके, navigation और backlight जैसी दूसरी usability चीजें सुधारी गईं
Kindle हमेशा ebook readers का benchmark रहा है और असल में खरीदा जा सकने वाला सबसे आम eInk technology product है
business नजरिए से महत्वपूर्ण आयामों पर देखें तो इसे खराब product कहना मुश्किल है
उसके बाद आप Calibre से किताबें डाल सकते हैं या SFTP से डाल सकते हैं
कुछ devices की battery कुछ ही दिनों में खत्म हो जाती थी और लंबी battery life का वादा पूरा नहीं करती थी, और कुछ की quality इतनी खराब थी कि कुछ महीनों में खराब हो गए
मेरे usage में Kindle एक charge पर रोज 1–2 घंटे पढ़ने के हिसाब से कई हफ्ते चलता है, और waterproof होने से bathtub में भी पढ़ सकता हूं, इसलिए यह कीमती है। मुझे कोई खास समस्या नहीं हुई
UI Amazon Store को promote करने के हिसाब से बना लगता है, लेकिन मैं उसे इस्तेमाल नहीं करता; किताबें email से भेजकर पढ़ता हूं और फिर delete कर देता हूं, इसलिए ठीक है
library में folders हों तो अच्छा होगा, और अगर यह दूसरे ebook readers की तरह USB memory की तरह connect होकर PC से मनचाहे ढंग से organize किया जा सके तो भी अच्छा होगा, लेकिन यह जरूरी नहीं
Kindle खराब product हो सकता है, लेकिन बाकी उससे भी खराब लगते हैं। Amazon के scale का कोई ebook reader brand मुझे नहीं पता, और सब ऐसे चीनी unknown brands लगते हैं जो quality और reputation में invest नहीं करते
refresh speed, latency, compute performance, responsiveness—लगभग हर पहलू में सुधार हुआ है
नाम Glider होना मजेदार संयोग है
काफी सारे glider, यानी sailplane pilots तेज धूप में अच्छी readability के कारण eInk screens इस्तेमाल करते हैं, आम तौर पर rooted Kobo या Kindle पर XCSoar जैसा कुछ चलाते हैं: https://www.xcsoar.org/hardware/
सोचने लगा हूं कि niche transport vehicles के अंदर और कौन-कौन सी technologies reuse हो रही होंगी
आंखों की थकान और dry eyes के कारण मैं लंबे समय से eInk solutions में रुचि रखता था
बाद में पता चला कि मुझे बहुत हल्का astigmatism था। ophthalmologist ने correction की सलाह नहीं दी थी, लेकिन correction करवाने पर dry eyes और eye strain पूरी तरह गायब हो गए
इसलिए ophthalmologists की minimum prescription strength वाली practice से अलग, computer glasses के लिए हल्के astigmatism को correct करके देखना अच्छा रहेगा
मेरी दाईं आंख में बहुत हल्का astigmatism है, और generic reading glasses के बजाय custom reading glasses से correction कराने पर eye strain और headaches में जमीन-आसमान का फर्क आया
सस्ते glasses से भी अनुभव ठीक लगता था, लेकिन फर्क कितना बड़ा है यह समझकर सच में हैरानी हुई
dry eyes और eye strain अक्सर साथ-साथ आते हैं, और LED-based screens से होने वाले eye strain पर चर्चा करने वाले अलग forums भी हैं
जिन लोगों को इसी तरह की समस्या है, वे यहां जा सकते हैं: https://ledstrain.org/
zephray ने अपने दिमाग में मौजूद E Ink knowledge को इस तरह open source में जारी किया, इसके लिए सच में आभारी हूं
README में eInk से जुड़ी बहुत अच्छी जानकारी है, मैंने काफी पढ़ लिया है और लगता है अगले कई सालों तक इसे refer करता रहूंगा
यह सच में शानदार material है
learning के उद्देश्य से eInk display इस्तेमाल करने वाला device मैं लंबे समय से बनाना चाहता था, लेकिन मैंने सिर्फ software किया है, इसलिए समझ नहीं आता था कि कहां से शुरू करूं
लगता है यह material उस learning में काफी मदद करेगा
linked GitHub असल GitLab repository का mirror है: https://gitlab.com/zephray/glider
सोच रहा हूं कि क्या किसी ने eInk displays में feedback control जोड़ने के idea की जांच की है
eInk की flicker और latency पूरी तरह इस वजह से लगती है कि controller open-loop तरीके पर चलता है
ऐसे eInk display से Compact Mac clone बनाना चाहता हूं
कल्पना कर सकता हूं कि यह कितना शानदार दिखेगा
हालांकि मैंने अभी तक ऐसा eInk refresh speed नहीं देखा जो moving cursor संभाल सके। आजकल सही driver हो तो शायद संभव हो
[1] https://engineersneedart.com/systemsix/systemsix.html
battery life भी शायद हफ्तों में मापी जाएगी