Flasher CrossPoint Reader sur la mini-liseuse XTEINK X4 Classic avec esptool
J'ai fait l'acquisition de la toute nouvelle mini-liseuse X4 Classic de chez XTEINK, et à peine reçu, je lui ai flashé le firmware alternatif CrossPoint Reader qui fournit plein de fonctionnalités supplémentaires et un meilleur rendu du texte. Je vous reparlerai probablement de la liseuse en elle-même et de ses firmwares un peu plus tard, dans un futur article. Aujourd'hui on va se concentrer sur comment remplacer le firmware d'origine par CrossPoint Reader.
Il existe plusieurs façons de flasher le firmware sur cette machine : via son navigateur Web ou en ligne de commande. Je vous recommande la première, mais moi je vais utiliser la seconde. Je vous explique tout ça ! 😄
Mais avant de commencer, voici les avertissements d'usage.
Avis
Risque de brickage de l'appareil :
Même si le risque est en pratique très faible, le flashage du firmware peut mal se passer et briquer (rendre inutilisable) l'appareil. Il est important d'en être conscient avant de commencer. Si jamais cela devait vous arriver, il existe des moyens de s'en sortir, mais il vous faudra vraiment mettre les mains dans le cambouis [1]...
Avis
Sauvegarde des données :
Si vous avez des données sur l'appareil, il convient d'en faire une copie avant de commencer car tout sera effacé. Normalement la carte SD ne devrait pas être touchée, mais ça ne coûte rien de la sauvegarder également, mieux vaut prévenir !
Maintenant que tout ceci est dit, on peut commencer ! 🙂
Méthode alternative : en ligne de commande avec esptool
Étant donné que j'aime pas faire les choses simplement [2] 😛, j'ai décidé pour ma part de flasher le firmware en ligne de commande avec l'outil esptool.
Avant de commencer, voici quelques petites informations importantes :
Je vais réaliser les manips' ci-dessous sous Ubuntu 26.04.
Je vais flasher une XTEINK X4 Classic, et les instructions que je vais vous donner seront donc adaptées à ce modèle.
Je vais tout de même essayer de vous donner les infos concernant les autres modèles de la marque quand c'est pertinent, MAIS toute la procédure que je vais décrire n'aura été testée que sur la X4 Classic.
J'ai acheté ma liseuse sur le site du fabricant, elle n'est pas verrouillée. Si vous avez acheté un exemplaire destiné au marché chinois sur Ali Express, il vous faudra d'abord procéder à son déverrouillage [3]. Ceci dit, ceci est surtout valable pour les autres modèles de la marque, à ma connaissance il n'existe pas de version verrouillée de la X4 Classic.
Télécharger le firmware
Pour commencer, il faut aller télécharger une version de CrossPoint Reader compatible avec notre appareil. Vous les trouverez sur la page GitHub du projet :
Idéalement, il faut choisir la dernière version stable du firmware (une version dont le numéro ne se termine pas par « rc »). À l'heure où j'écris ces lignes, la dernière version stable est la v1.6.0... Sauf que cette version ne supporte pas encore mon modèle, je vais donc devoir opter pour la dernière release candidate, la v1.6.5rc.
Il s'agit ensuite de télécharger le bon fichier dans la partie « Assets » en bas du changelog de la version. Pour la X4 Classic, il s'agit de "crosspoint-1.6.5rc-x4c.bin".
Note
Autres modèles :
- Pour la X4 Pro, le fichier à télécharger est "crosspoint-1.6.0-x4pro.bin".
- Pour les modèles X3 et X4 (première version), le fichier se nomme "crosspoint-1.6.0-x3-x4.bin".
Installer les outils
Maintenant qu'on a le firmware, on va installer esptool pour pouvoir le flasher. L'outil est disponible dans les dépôts de la distribution, mais on ne va pas utiliser cette version car elle ne fonctionnera pas dans notre cas [4]. On va donc devoir l'installer depuis PyPI, le dépôt des paquets Python.
Pour commencer, on va installer quelques dépendances :
sudo apt install python3-venv python3-dev
Ensuite, on va créer un virtualenv :
python3 -m venv ./esptool.venv
Cela va créer un dossier "esptool.venv" dans le répertoire courant, et on va pouvoir y installer esptool dedans à l'aide de la commande suivante :
./esptool.venv/bin/pip install esptool
Dans mon cas, la version d'esptool qui a été installée est la v5.4.0, la plus récente disponible au moment où j'écris ces lignes.
Brancher et localiser l'appareil
À présent, il nous reste à brancher l'appareil au PC en USB et à l'allumer. Il devrait nous fournir une interface série accessible à travers un fichier visible dans "/dev".
Si aucun autre périphérique de ce genre n'est branché à l'ordinateur, il devrait s'agir de "/dev/ttyACM0", mais il vaut mieux s'en assurer. Pour ce faire, on débranche l'appareil et on exécute la commande suivante :
ls /dev/tty*
Puis on rebranche l'appareil et on réexécute la commande :
ls /dev/tty*
Normalement un fichier doit être apparu entre la première et la seconde exécution de la commande ; il s'agit de notre appareil.
Avis
Stabilité de la connexion :
Le connecteur magnétique ne tient pas bien en place et a vite fait de se décrocher. Si comme moi vous avez acheté le stand de recharge, utilisez-le afin d'assurer une bonne connexion. Dans le cas contraire, essayez de bien caler le câble avec un objet lourd [au hasard, une pile de livres 😛] afin qu'il ne bouge pas durant l'opération.
Flasher CrossPoint Reader sur la liseuse
On a présent tous les outils et toutes les informations nécessaires pour procéder au flashage de l'appareil. La commande sera la suivante :
./esptool.venv/bin/esptool --chip <CHIP_MODEL> --port <SERIAL_PORT> --baud 921600 write-flash 0x10000 <FIRMWARE>
Où :
- <CHIP_MODEL> corresponds au modèle de la puce se trouvant dans notre appareil, pour la X4 Classic il s'agit d'une esp32s3,
- <SERIAL_PORT> est le chemin vers le fichier de la console série de l'appareil trouvé à l'étape précédente (typiquement "/dev/ttyACM0"),
- et <FIRMWARE> est le chemin vers le firmware qu'on a téléchargé tout à l'heure.
Pour la X4 Classic, ça nous donne donc quelque chose comme ça :
./esptool.venv/bin/esptool --chip esp32s3 --port /dev/ttyACM0 --baud 921600 write-flash 0x10000 crosspoint-1.6.5rc-x4c.bin
L'opération va durer un certain temps, et si tout s'est bien déroulé, l'appareil devrait redémarrer tout seul sur le nouveau firmware. 😁
Note
Autres modèles :
- Pour la X4 Pro la puce (<CHIP_MODEL>) est également une esp32s3.
- Pour les modèles X3 et X4 (première version), il s'agit d'une esp32c3.
Note
Version d'esptool :
J'ai utilisé une version récente d'esptool (v5.4.0). Si vous utilisez une version plus ancienne de l'outil, il vous faudra peut-être utiliser la commande write_flash au lieu de write-flash (un underscore à la place du tiret).
Avis
Adresse d'écriture :
Dans la commande ci-dessus on indique à esptool à quelle adresse de la mémoire flash il doit commencer à écrire le firmware. Faites bien attention que ce soit 0x10000. Écrire à une autre adresse — notamment plus basse — ne fonctionnera pas et a de grandes chances se terminer par un briquage de l'appareil. S'il y a un endroit où il ne faut pas se tromper, c'est bien celui-là ! 😅
Conclusion
Voilà, j'espère que ce petit article aura pu vous être utile. Je vous mets quelques liens pour aller plus loin :
- Site du projet CrossPoint Reader
- Dépôt GitHub de CrossPoint Reader
- Prise en main de CrossPoint Reader (article de Frajibe, en français)
À bientôt o/
| [1] | La procédure pour débriquer une liseuse de chez XTEINK est documentée sur le site de CrossPoint, mais elle n'est pas à la portée de tout le monde. Voir la page Recovering a Bricked Xteink (anglais). |
| [2] | La vraie raison pour laquelle je préfère passer par la CLI, c'est la reproductibilité. Un jour ou l'autre le site de CrossPoint Reader pourrait être en panne ou disparaître et je veux donc savoir comment faire ça offline, avec des outils entièrement sous mon contrôle. 😉 |
| [3] | En fonction du modèle, il vous sera possible de le déverrouiller via la carte SD ou via un outil dédié. Tout est expliqué sur le site de CrossPoint : Have a locked device? (anglais). |
| [4] | La version d'esptool présente dans les dépôts d'Ubuntu 26.04 ne permet pas de flasher mon modèle : il lui manque le fichier JSON contenant les informations nécessaires. J'ai obtenu l'erreur suivante quand j'ai essayé : « FileNotFoundError: [Errno 2] No such file or directory: '/usr/lib/python3/dist-packages/esptool/targets/stub_flasher/stub_flasher_32s3.json' ». |