Contexte du dispositif
L’appareil testé est le Xteink X3, un lecteur e‑ink de petite taille basé sur un microcontrôleur ESP32. Le firmware open‑source CrossPoint y est installé, offrant la prise en charge de quatre nuances de gris et la possibilité de charger des polices personnalisées. Le lecteur utilise une charge magnétique par contact, ce qui permet de le reprogrammer via USB sans le déconnecter.
Mécanisme de rendu en niveaux de gris
Sur les écrans e‑ink, chaque pixel est constitué de particules pigmentaires déplacées par des impulsions de tension. CrossPoint réalise d’abord une mise à jour binaire : tous les pixels sont initialement rendus noirs ou blancs. Pour obtenir les nuances de gris, le firmware applique ensuite une « nudge » – une forme d’onde courte dont la durée varie selon le niveau de gris souhaité. Cette étape modifie partiellement la position des particules, créant ainsi des tons intermédiaires. Le code de cette phase réside dans la bibliothèque freeink‑sdk, qui stocke la forme d’onde dans une table de correspondance (LUT).
Analyse des artefacts de bandes
Deux dysfonctionnements ont été identifiés. Le premier provient du visualiseur intégré qui ne déclenche jamais la phase de nudge ; les pixels gris restent donc noirs, ce qui explique le rendu très sombre des tons moyens. Le second, plus subtil, apparaît sous forme de bandes verticales d’environ deux pixels de largeur, espacées d’environ sept pixels sur l’écran de 259 ppi. Une analyse FFT d’un profil de luminosité moyen par colonne a confirmé cette périodicité. Les bandes ne sont pas présentes dans le bitmap source, ce qui indique qu’elles sont générées pendant le traitement matériel.
Les investigations ont montré que les bandes se manifestent uniquement lorsque des pixels gris clairs sont entourés de pixels d’une nuance différente. Le processus de nudge, qui applique des impulsions de durée variable, semble subir des erreurs d’arrondi cumulées dans la LUT. Ces erreurs alignées créent un motif périodique qui devient visible sur les zones de faible contraste, comme les tons gris clairs. Le fait que le problème disparaisse lorsqu’on supprime soit le gris soit le motif d’origine confirme l’interaction entre la logique de nudge et la distribution locale des niveaux de gris.
Correctifs et perspectives
Une solution immédiate consiste à modifier la LUT du nudge afin d’uniformiser la durée des impulsions pour les tons clairs, éliminant ainsi les variations d’arrondi. Le firmware peut être reflashé grâce au chargeur magnétique, ce qui permet de tester rapidement de nouvelles tables sans démontage. À plus long terme, l’ajout d’une étape de calibration qui mesure la réponse réelle du panneau après chaque mise à jour pourrait réduire la sensibilité aux erreurs de quantification. Enfin, l’utilisation d’un algorithme de dithering différent (par exemple, Atkinson) n’a pas d’impact sur les bandes, ce qui confirme que le problème est ancré dans la couche matérielle plutôt que dans la génération du bitmap.