Hacking des Timex m851
(lock.cmpxchg8b.com)- Die Timex m851 sieht wie eine digitale Uhr für Läufer aus, ist aber eine Ultra-Low-Power-Plattform, die mit nur einer 8-bit Seiko S1C88 CPU und 2 KB RAM Benutzer-Apps ausführt
- Die seitlichen Pins sind USB, sodass sich Daten wie Termine synchronisieren lassen; mit dem Timex SDK kann man
cc helloworld.cbauen und direkt auf die Uhr hochladen - Wegen des knappen RAM ist eine WatchApp so aufgebaut, dass Code auf state-Ebene ausgetauscht wird; dazu kommen APIs für gemeinsamen Code, Variablen und persistente Daten
- Der Kernel übernimmt Low-Level-Aufgaben wie Event-Weitergabe, Timer, Pieptöne, Display-Scrolling, Datenbankzugriff sowie die Steuerung von Krone und Hintergrundbeleuchtung
- Das Gerät ist zwar eingestellt und schwer zu bekommen, aber dank des Virtual Datalink-Simulators sowie öffentlich verfügbarer Dokumentation und Beispielcodes kann man entwickeln, ohne die echte Uhr ständig zurückzusetzen
Eine Entwicklungsplattform in einer kleinen Uhr
- Die Timex m851 ist eine digitale Uhr mit 8-bit Seiko S1C88 CPU, 48 KB ROM, 2 KB RAM und einem 42x11-Dot-Matrix-Hauptdisplay
- Die CPU wurde für Ultra-Low-Power-Betrieb entwickelt und kann mit einer einzigen Batterie drei Jahre lang laufen
- Die seitlichen Pins sind USB und werden genutzt, um Daten wie Termine mit der Uhr zu synchronisieren
- Für Linux gibt es die Bibliothek libdlusb
- Mit dem von Timex bereitgestellten SDK lassen sich Anwendungen mit
cc helloworld.cbauen und auf die Uhr hochladen - Die Standardwerkzeuge sehen aus wie Assistenten aus der Windows-XP-Ära, intern läuft jedoch eine UNIX-artige Toolchain
WatchApp-Beispiele und bestehendes Ökosystem
- Das Hello-World-Beispiel und das
Makefilefinden sich im Repository taviso/timex - Für diese Plattform wurden verschiedene WatchApps wie Spiele, Utilities und Tools erstellt
WatchApp-Struktur: state und mode
- Anwendungen sind in states unterteilt; wenn sich ein state ändert, wird der aktuell aktive Code verworfen und neuer Code geladen
- Eine App kann bis zu etwa 30 KB Code oder Daten nutzen, hat aber nur rund 2 KB RAM
- Es gibt kein Paging, und der gesamte Code passt nicht in den RAM, daher ist die state-Struktur nötig
- Es gibt einen gemeinsamen Codebereich, den alle states zusammen verwenden, sowie einen Variablenbereich und eine Datenbank-API für persistente Daten
- Einige der vorderen states sind für gemeinsame Event-Verarbeitung reserviert, die übrigen kann die App frei nutzen
- mode entspricht der Vordergrundanwendung
- Eine App stellt normalerweise einen mode bereit, kann aber auch Hintergrund- oder periodische Aufgaben hinzufügen
- Mit
coreRequestModeChangeNext();wird ein mode-Wechsel angefordert, sodass die nächste App die Kontrolle erhält
Event-Verarbeitung und Kernel-Dienste
- Jeder state benötigt einen Event-Handler
- Zu den Events gehören das Betreten eines state, das Herausziehen oder Wiedereinsetzen der Krone, das Drehen der Krone, Tastendrücke und Eingaben über die mode-Taste
- Nicht benötigte Events können ignoriert werden
- Der Kernel übernimmt die Hardware-Verarbeitung und Event-Dispatching und stellt mehrere Dienste bereit
- Timer
- Ton- und Pieperzeugung
- Display-Scrolling
- Zugriff auf Datenbankeinträge
- Kroneneinstellungen
- Steuerung der Hintergrundbeleuchtung
- Der Beispielcode nutzt Kernel-Dienste wie
lcdClearDisplay()undlcdDispBannerMsg(), um die Banner-Nachricht"hello!"anzuzeigen
Debugging-Umgebung, die Resets reduziert
- Es gibt keinen Speicherschutz, daher kann eine App Kernel-Speicher überschreiben
- Der Kernel muss dem Watchdog alle 2 Sekunden mitteilen, dass er noch lebt; bleibt dieses Signal aus, setzt der Watchdog die Uhr zurück
- Bei aufwendigen Berechnungen muss der Watchdog mit
hwResetWatchdog();aktualisiert werden
- Bei aufwendigen Berechnungen muss der Watchdog mit
- Virtual Datalink ist ein Open-Source-Simulator eines Drittanbieters
- Quellcode
- Nur für Windows und in Delphi geschrieben
- Bietet bedingte Breakpoints, einen Disassembler, Speicherstände, Ressourcenanalyse und Energieanalyse
Beschaffung des eingestellten Geräts und Referenzdokumente
- Die Timex m851 wurde schon vor langer Zeit eingestellt und ist immer schwerer zu bekommen
- Auf eBay ließ sich ein Gerät finden, das nach einem Batteriewechsel wieder wie neu funktionierte
- Falls kein Kabel vorhanden ist, kann man sich den Standard-USB-Type-A-Pinout und den ungewöhnlichen Stecker zunutze machen und ein altes USB-Kabel mit Krokodilklemmen verwenden
- Die Timex T5G751 nutzt denselben Stecker und ist relativ leicht zu finden, sodass sie zur Kabelbeschaffung dienen kann
- Eine m851-Variante namens „dress edition“ hat die gleichen Spezifikationen, aber ein anderes Gehäuse, und wird teils unter anderen Modellnummern angeboten
- Referenzdokumente
- Design Guide: Das wichtigste Dokument und gut geschrieben
- CPU manual: CPU-Handbuch
- Toolchain-Handbuch
- API reference: Enthält eine Liste der vom Kernel bereitgestellten Dienste
1 Kommentare
Meinungen auf Hacker News
Einer der fast magischen Aspekte ist, dass der Epson-SoC (PN S1C88349) absurd stromsparend ist: Im 32-kHz-Low-Power-Modus verbraucht er gerade einmal 9 Mikroampere
Das lässt einen darüber nachdenken, wie viel man mit einem Budget von 32.000 Zyklen pro Sekunde schaffen kann
Außerdem stecken darin 48K ROM, 2K RAM, drei Timer, UART und sogar ein A/D-Wandler
[1] https://global.epson.com/products_and_drivers/semicon/pdf/id...
Seiko-Epson-Chips wurden zusammen mit EM-Swatch- und OKI-Casio-Chips in Uhren, Taschenrechnern, Fieberthermometern und günstigen stromsparenden Segment-LCD-Geräten eingesetzt, die mit einer einzigen Knopfzelle jahrelang laufen mussten
Auch mehr als 15 Jahre alte Taschenrechner und digitale Fieberthermometer nutzen solche Seiko-Epson-Chips und laufen immer noch mit der ursprünglich eingelegten 1,5-V-Knopfzelle. Wenn man die natürliche Selbstentladung von Lithiumbatterien über die Zeit bedenkt, ist das ziemlich erstaunlich
Die Binärdateien vieler heutiger Mobile-Apps sind größer als frühere Betriebssysteme und ganze Anwendungen, die äußerst nützliche Arbeit leisteten
Es ist beängstigend, wohin diese Entwicklung führen wird, und es scheint unwahrscheinlich, dass irgendjemand oder irgendetwas sie bremsen wird
Soweit ich mich erinnere, lag das nominell unter 100 nA, sogar inklusive Dingen wie Leckstrom des Einschalters, und das ist wirklich beeindruckend
Ein 4-Bit(!)-32-kHz-Mikrocontroller mit 6.144 Wörtern 12-Bit(‼)-ROM, internem 4-Bit-RAM mit 640 Wörtern und einem 4-Bit-Framebuffer mit 160 Wörtern für den integrierten LCD-Treiber. Sogar Double Buffering ist möglich
Ein wirklich schöner Chip. Vor etwa einem Jahr habe ich einen TypeScript-Emulator gebaut, ihn aber noch nicht auf GitHub gestellt. Bei Interesse kann ich ihn hochladen; er kann auch unveränderte Tamagotchi-Firmware ausführen
Tatsächlich ist es EEPROM und ähnelt wohl ein wenig Flash-Speicher
Wenn man etwas mit ein paar mehr Funktionen möchte, ist Bangle.js ebenfalls einen Blick wert
Vorteile sind Bluetooth, GPS, Beschleunigungssensor, Vibrationsmotor und ein Farbdisplay. Der Nachteil ist, dass der Akku deutlich kürzer als drei Jahre hält
[0] https://banglejs.com/
Mit „auch bei Sonnenlicht ablesbarem Always-on-Display, 4 Wochen Akkulaufzeit, vollständiger Flexibilität und vollständiger Kontrolle über die eigenen Daten“ wird die Bangle.js 2 als Alternative zu teuren Smartwatches vorgestellt
Vor etwa 15 Jahren hatte ich diese Uhr und konnte damit allerlei Dinge speichern
Ich hatte Dinge wie den Ort der nächsten Unterrichtsstunde, Busfahrpläne für häufig genutzte Haltestellen und Mondphasen darauf abgelegt
Vor dem Smartphone-Zeitalter mit der Armbanduhr den Busfahrplan nachzusehen, sah aus wie bei James Bond :)
Ich wünschte, solche Uhren würden immer noch gebaut. Bei diesem Stromverbrauch könnte man sie mit Solarenergie vermutlich praktisch dauerhaft nachladen und nutzen
Vor mehr als 20 Jahren habe ich auf einem Siemens-Handy Busfahrpläne als SMS-Entwürfe gespeichert
Ein modernerer Ansatz für eine hackbare Uhr könnte das hier sein
https://github.com/sharandac/My-TTGO-Watch
Ich bin darauf gestoßen, als ich recherchierte, wie man mit einem LILYGO-T5-E-Paper-Entwicklungsboard einen DIY-iPod Nano 7G bauen könnte
Produkt: https://www.aliexpress.com/item/1005002474854718.html
Code-Repository: https://github.com/Xinyuan-LilyGO/LilyGo-T5-Epaper-Series
Wenn ich auf der Arduino-Seite mehr Zeit und Können gehabt hätte, hätte das wohl ein hervorragender iPod-Nano-7G-Ersatz werden können ;)
Der Standardcode funktionierte kaum richtig, und selbst wenn das Gerät nichts tat, hielt der Akku etwa 12 Stunden. Für Leute, die gern fremden Code debuggen, ist es für den Preis allerdings tatsächlich ein erstaunliches Gerät
Ich habe ein paar fehlende Teile ergänzt und Einstellungen gefunden, die den Stromverbrauch senken, sodass es bei „normaler“ Nutzung etwa 6 Stunden durchhält
Der aktuelle Code ist vermutlich deutlich besser, aber das Energiebudget liegt viel näher an Smartwatches von Apple oder Samsung als an der ultra-stromsparenden m851 im Stil der 80er
Wenn man gern experimentiert, ist es ein nettes kleines Projekt und sein Geld wert. Wer etwas erwartet, das mit der iWatch konkurriert, wird wahrscheinlich enttäuscht sein
Wenn „3 Jahre mit einer Batterie“ ein großer Vorteil ist, stellt Casio so etwas definitiv immer noch her
Einfach nach „Casio MIP display“ suchen
Weitere Informationen zur Timex-Datalink-Serie gibt es hier
https://en.m.wikipedia.org/wiki/Timex_Datalink
Ließe sich das mit einem modernen IPS-LCD nachbilden?
Ich wünschte, mehr Uhren und Wearables würden mit solchen stromsparenden 8-Bit-Chips gebaut und wären über freiliegende Daten-Pins hackbar.
Bei einer Uhr ist eine Batterielaufzeit von drei Jahren entscheidend. Wenn ich mir Gedanken darüber machen muss, eine Uhr aufzuladen, ist sie für mich raus.
Meine aktuelle Swatch hält mit derselben Batterie seit etwa einem Jahr zuverlässig die Zeit. Das Problem bei günstigen mechanischen Uhren ist, dass man sie überdrehen kann, wenn man nicht aufpasst. Deshalb mache ich alle paar Jahre eine kaputt, aber sie sind ja ohnehin billig.
Das Tolle an beiden Uhren ist, dass man sie nicht jeden Tag laden muss. Natürlich muss man die mechanische Uhr aufziehen.
Es erinnert einen daran, dass wir tatsächlich gute Dinge haben könnten. Wenn es nur einen Markt dafür gäbe.
Ich hätte gern eine gut integrierte Uhr mit niedrigem Batterieverbrauch, geringem Aufwand beim Tragen oder Austauschen und einem Design, das auch überzeugt.
Schade, dass das Beste, was wir derzeit haben, Sensorwatch [1] ist.
[1] https://www.sensorwatch.net
Edit: Sensorwatch ist großartig, aber noch kein Ökosystem.
Ich frage mich, was man mit dem Board überhaupt machen wollen würde.
Sieht noch einfacher aus als TI's Ez430-chronos und wirkt ganz gut.
Allerdings erscheinen drei Jahre mit einer einzigen Batterie nicht besonders beeindruckend. Hängt natürlich davon ab, welche Apps man nutzt und aufspielt, und dass sie programmierbar ist, ist cool.
[0] https://www.sparkfun.com/products/retired/10019
2018 habe ich eine Casio F91 verloren; letzte Woche habe ich sie beim Packen für eine Kanutour wiedergefunden. Uhrzeit und Datum wichen nur um ein paar Sekunden von der Casio F91 ab, die ich am Handgelenk trug.
Ich hatte früher mal eine, aber sie ist bei einem Umzug verschwunden. Ich würde gern wieder damit herumspielen.
Edit: Ach, du hast ja einen Link eingefügt, bei dem in der Produktliste „RETIRED“ steht. Bei einem TI-Produkt wäre es allerdings auch seltsam, wenn TI es nicht genau dann einstellen würde, wenn der Markt gerade anfängt, darauf zu reagieren.