Hack du Timex m851
(lock.cmpxchg8b.com)- Le Timex m851 ressemble à une montre numérique pour coureurs, mais c’est une plateforme ultra basse consommation capable d’exécuter des applications utilisateur avec seulement un CPU Seiko S1C88 8 bits et 2 KB de RAM
- Les broches latérales sont en USB, ce qui permet de synchroniser des données comme des rendez-vous, et avec le SDK Timex on peut compiler
cc helloworld.cpuis l’envoyer directement sur la montre - En raison de la RAM limitée, les WatchApp reposent sur une architecture où le code est remplacé par unités de state, avec en plus des API pour le code commun, les variables et les données persistantes
- Le noyau prend en charge les tâches bas niveau comme la distribution d’événements, les minuteurs, les bips, le défilement de l’affichage, l’accès à la base de données, ainsi que le contrôle de la couronne et du rétroéclairage
- L’appareil étant abandonné, il est difficile à trouver, mais grâce au simulateur Virtual Datalink et à la documentation publique avec les exemples de code, on peut développer sans devoir réinitialiser la montre réelle à chaque fois
Une plateforme de développement dans une petite montre
- Le Timex m851 est une montre numérique équipée d’un CPU Seiko S1C88 8 bits, de 48 KB de ROM, de 2 KB de RAM et d’un afficheur principal matriciel 42x11
- Le CPU a été conçu pour un fonctionnement ultra basse consommation, permettant à la montre de tenir 3 ans avec une seule pile
- Les broches latérales sont en USB et servent à synchroniser avec la montre des données comme des rendez-vous
- Il existe pour Linux la bibliothèque libdlusb
- Avec le SDK fourni par Timex, il est possible de construire une application avec
cc helloworld.cpuis de la téléverser sur la montre - Les outils fournis ont l’apparence d’assistants typiques de l’époque Windows XP, mais ils utilisent en interne une toolchain de type UNIX
Exemple de WatchApp et écosystème existant
- L’exemple hello world et son
Makefilesont disponibles dans le dépôt taviso/timex - Plusieurs WatchApp ont été créées pour cette plateforme, notamment des jeux, des utilitaires et des outils
Structure des WatchApp : state et mode
- Les applications sont divisées en state ; quand un state change, le code actif courant est déchargé et le nouveau code est chargé
- Une application peut utiliser jusqu’à environ 30 KB de code ou de données, mais ne dispose que d’environ 2 KB de RAM
- Il n’y a pas de pagination, et comme il est impossible de placer tout le code en RAM, cette structure en state est nécessaire
- Un espace de code commun partagé par tous les state est prévu, ainsi qu’un espace pour les variables et une API de base de données pour les données persistantes
- Une partie des premiers state est réservée au traitement commun des événements, tandis que le reste peut être utilisé librement par l’application
- Le mode correspond à l’application au premier plan
- Une application fournit généralement un mode, mais peut aussi ajouter des tâches en arrière-plan ou périodiques
- Si elle demande un changement de mode avec
coreRequestModeChangeNext();, l’application suivante prend le contrôle
Gestion des événements et services du noyau
- Chaque state doit disposer d’un gestionnaire d’événements
- Les événements incluent l’entrée dans un state, l’action de tirer ou repousser la couronne, la rotation de la couronne, l’appui sur un bouton et l’entrée du bouton mode
- Les événements inutiles peuvent être ignorés
- Le noyau se charge du traitement matériel et de la distribution des événements, et fournit plusieurs services
- minuteurs
- génération de tonalités et de bips
- défilement de l’affichage
- accès aux enregistrements de la base de données
- réglages de la couronne
- contrôle du rétroéclairage
- Le code d’exemple utilise des services du noyau comme
lcdClearDisplay()etlcdDispBannerMsg()pour afficher le message de bannière"hello!"
Un environnement de débogage qui réduit les réinitialisations
- Il n’y a pas de protection mémoire, donc une application peut écraser la mémoire du noyau
- Le noyau doit signaler toutes les 2 secondes au watchdog qu’il est toujours actif ; sans ce signal, le watchdog réinitialise la montre
- Lors d’un calcul lourd, il faut actualiser le watchdog avec
hwResetWatchdog();
- Lors d’un calcul lourd, il faut actualiser le watchdog avec
- Virtual Datalink est un simulateur tiers open source
- source
- Il est réservé à Windows et écrit en Delphi
- Il propose des points d’arrêt conditionnels, un désassembleur, des états sauvegardés, l’analyse des ressources et l’analyse de la consommation électrique
Obtenir un appareil abandonné et documents de référence
- Le Timex m851 est abandonné depuis longtemps et devient de plus en plus difficile à trouver
- Il a été possible d’en récupérer sur eBay et de les remettre comme neufs avec un simple remplacement de pile
- Sans câble, on peut tirer parti du fait qu’il utilise un brochage USB Type-A standard avec un connecteur inhabituel, et employer un ancien câble USB avec des pinces crocodiles
- Le Timex T5G751 utilise le même connecteur et, comme il est relativement plus facile à trouver, peut servir à récupérer un câble
- Une variante du m851 appelée « dress edition » possède les mêmes spécifications avec un boîtier différent, et peut être mise en vente sous d’autres références
- Documents de référence
- Design Guide : le document le plus important, très bien rédigé
- CPU manual : manuel du CPU
- manuel de la toolchain
- API reference : liste des services fournis par le noyau
1 commentaires
Avis sur Hacker News
L’un des aspects presque magiques, c’est que le SoC Epson (PN S1C88349) est absurdement économe en énergie : en mode basse consommation à 32 kHz, il ne consomme que 9 microampères
Ça fait réfléchir à tout ce qu’on peut faire avec un budget de 32 000 cycles par seconde
Et en plus, il intègre 48 Kio de ROM, 2 Kio de RAM, 3 timers, un UART et même un convertisseur A/N
[1] https://global.epson.com/products_and_drivers/semicon/pdf/id...
Les puces Seiko-Epson, avec les puces EM-Swatch et OKI-Casio, étaient utilisées dans des montres, calculatrices, thermomètres et appareils LCD à segments bon marché et basse consommation, qui devaient fonctionner pendant des années avec une seule pile bouton
Ma calculatrice et mon thermomètre numérique de plus de 15 ans utilisent aussi ce type de puce Seiko-Epson, et fonctionnent encore avec la pile bouton 1,5 V d’origine. C’est assez étonnant quand on tient compte de l’autodécharge naturelle des piles au lithium avec le temps
La taille binaire de beaucoup d’apps mobiles actuelles dépasse celle de systèmes d’exploitation et d’applications entiers d’autrefois, qui rendaient pourtant de vrais services
La direction que prend cette tendance fait peur, et il semble peu probable que quelqu’un ou quelque chose vienne la freiner
De mémoire, on était nominalement sous les 100 nA, même en incluant des choses comme les fuites de l’interrupteur d’alimentation, ce qui est vraiment impressionnant
C’est un microcontrôleur 4 bits (!) à 32 KHz avec 6 144 mots de ROM 12 bits (‼), 640 mots de RAM interne 4 bits, et un framebuffer 4 bits de 160 mots pour le pilote LCD intégré. Il permet même le double buffering
C’est vraiment une superbe puce. Il y a environ un an, j’ai écrit un émulateur en TypeScript, mais je ne l’ai pas encore mis sur GitHub. Je peux le publier s’il y a des intéressés, et il est capable d’exécuter un firmware Tamagotchi non modifié
En réalité, c’est de l’EEPROM, un peu comparable à de la mémoire Flash
Si vous voulez quelque chose avec un peu plus de fonctionnalités, Bangle.js vaut aussi le détour
L’avantage, c’est qu’il y a Bluetooth, GPS, accéléromètre, moteur vibrant et écran couleur. L’inconvénient, c’est que la batterie dure beaucoup moins que 3 ans
[0] https://banglejs.com/
Elle présente la Bangle.js 2 comme une alternative aux smartwatches coûteuses, avec « un écran toujours allumé lisible au soleil, 4 semaines d’autonomie, une flexibilité totale et un contrôle total de vos données »
J’avais cette montre il y a environ 15 ans, et je pouvais y enregistrer tout un tas de choses
J’y mettais la salle du prochain cours, les horaires de bus de mes arrêts habituels, les phases de la lune, etc.
Avant les smartphones, consulter les horaires de bus sur sa montre donnait un côté James Bond :)
J’aimerais bien qu’on fabrique encore ce genre de montres. Avec une telle consommation, on pourrait probablement les garder chargées quasiment en permanence au solaire
Il y a plus de 20 ans, j’enregistrais les horaires de bus dans des brouillons de SMS sur un téléphone Siemens
Pour une approche plus moderne de la montre hackable, il y a peut-être ceci
https://github.com/sharandac/My-TTGO-Watch
Je l’ai découvert en faisant des recherches pour fabriquer un iPod Nano 7G DIY avec une carte de développement LILYGO T5 E-Paper
Produit : https://www.aliexpress.com/item/1005002474854718.html
Dépôt de code : https://github.com/Xinyuan-LilyGO/LilyGo-T5-Epaper-Series
Si j’avais eu plus de temps et de compétences côté Arduino, je pense que ça aurait pu faire un excellent remplaçant d’iPod Nano 7G ;)
Le code par défaut ne fonctionnait quasiment pas correctement, et la batterie tenait environ 12 heures même sans rien faire. Cela dit, pour quelqu’un qui aime déboguer le code des autres, c’est bien un objet étonnant pour son prix
J’ai comblé quelques manques et trouvé des réglages pour réduire la consommation, ce qui l’a amené à environ 6 heures d’autonomie en utilisation « normale »
Le code est probablement bien meilleur aujourd’hui, mais le budget énergétique sera bien plus proche de celui d’une smartwatch Apple ou Samsung que de la m851 ultra-basse consommation façon années 80
Si vous aimez expérimenter, c’est un petit projet amusant qui vaut son prix. Si vous vous attendez à quelque chose qui rivalise avec une iWatch, vous risquez d’être déçu
Si « 3 ans avec une seule pile » est un gros avantage, Casio fabrique clairement encore ce genre de choses
Il suffit de chercher « Casio MIP display »
On trouve des informations supplémentaires sur la série Timex Datalink ici
https://en.m.wikipedia.org/wiki/Timex_Datalink
Est-ce qu’on pourrait le reproduire avec un LCD IPS moderne ?
J’aimerais que davantage de montres et de wearables soient fabriqués avec ce genre de puce 8 bits basse consommation, et qu’ils soient piratables grâce à des broches de données exposées
Pour une montre, une autonomie de 3 ans est essentielle. Si je dois me soucier de la recharger, c’est éliminatoire pour moi
La Swatch que j’utilise actuellement garde l’heure correctement depuis environ un an avec la même pile. Le problème des montres mécaniques bon marché, c’est que, si on ne fait pas attention, on peut trop remonter le ressort. Du coup, j’en casse une toutes les quelques années, mais elles ne coûtent pas cher de toute façon
Ce qui est génial avec ces deux types de montres, c’est qu’il n’y a pas besoin de les recharger tous les jours. Bien sûr, les montres à remontage doivent quand même être remontées
Ça rappelle qu’on pourrait vraiment avoir de bons objets. À condition qu’il existe un marché pour ça
J’aimerais une montre bien intégrée, avec une faible consommation de batterie, peu contraignante à porter ou à remplacer, et acceptable sur le plan du design
C’est dommage que le mieux dont on dispose aujourd’hui soit Sensorwatch [1]
[1] https://www.sensorwatch.net
Modification : Sensorwatch est excellent, mais ce n’est pas encore un écosystème
Je me demande ce qui pourrait donner envie de faire quelque chose avec cette carte
Ça a l’air encore plus simple que la Ez430-chronos de TI, et plutôt bien
Cela dit, 3 ans avec une seule pile, ça ne paraît pas extraordinaire. Bien sûr, ça dépend des applis qu’on utilise et qu’on charge dessus, et le fait que ce soit programmable est sympa
[0] https://www.sparkfun.com/products/retired/10019
En 2018, j’ai perdu une Casio F91 ; je l’ai retrouvée la semaine dernière en préparant mes affaires pour une sortie en canoë. L’heure et la date n’avaient que quelques secondes d’écart avec la Casio F91 que je portais au poignet
J’en avais acheté une à l’époque, mais elle a disparu pendant un déménagement. J’aimerais bien remettre la main dessus
Modification : ah, je vois que tu as mis un lien vers une fiche produit marquée « RETIRED ». Pour un produit TI, ce serait presque étonnant que TI ne l’arrête pas juste au moment où le marché commence à réagir