1 points par GN⁺ 2023-09-04 | 1 commentaires | Partager sur WhatsApp
  • 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.c puis 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.c puis 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 Makefile sont 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() et lcdDispBannerMsg() 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();
  • 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

1 commentaires

 
GN⁺ 2023-09-04
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...

    • Vous serez peut-être surpris d’apprendre que ce genre de composants 8 bits ultra-basse consommation existe déjà depuis une trentaine d’années
      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
    • Les systèmes modernes, qu’il s’agisse des SoC, des systèmes d’exploitation ou des apps, ont atteint un niveau incroyable de gonflement et de complexité
      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
    • Les TMS430 récents disposent de modes ultra-basse consommation, et on peut aussi utiliser un RTC externe ultra-basse consommation
      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
    • Le E0C6S46 fait encore tourner les Tamagotchi de 1re et 2e génération
      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é
    • Le terme ROM m’a embrouillé. Je pensais que ça désignait quelque chose qu’on ne peut pas modifier, mais la documentation indique qu’on y met et retire des données modifiables
      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/

    • Pour ceux que ça intéresse, l’autonomie annoncée de la Bangle est de 4 semaines
      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

    • Pour être juste, le premier iPhone est sorti il y a 16 ans, et il existait déjà avant ça des smartphones capables de stocker des horaires de bus
      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 ;)

    • J’en ai quelques-uns, et l’autonomie est plutôt médiocre
      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

    • Ironiquement, les anciens modèles avec récepteur optique donnent une impression bien plus high-tech que les modèles USB ultérieurs
    • Je me demande pourquoi la synchronisation ne pouvait se faire qu’avec un CRT et pas avec un LCD
      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

    • Je continue d’acheter sur eBay des montres mécaniques à remontage bon marché et des Swatch
      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

    • Ça a l’air plutôt prometteur ; qu’est-ce qu’on peut faire avec cette carte ?
      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

    • L’autonomie de la batterie, c’est relatif, je suppose
      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
    • Peut-on encore acheter la chronos ?
      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