Timex m851 हैकिंग
(lock.cmpxchg8b.com)- Timex m851 दिखने में रनर्स के लिए बनी डिजिटल घड़ी जैसा है, लेकिन सिर्फ 8-bit Seiko S1C88 CPU और 2KB RAM के साथ यूज़र ऐप्स चलाने वाला एक अल्ट्रा-लो-पावर प्लेटफ़ॉर्म है
- साइड के पिन USB हैं, इसलिए अपॉइंटमेंट जैसी डेटा चीज़ों को sync किया जा सकता है, और Timex SDK से
cc helloworld.cbuild करके सीधे घड़ी पर upload किया जा सकता है - सीमित RAM की वजह से WatchApp की संरचना ऐसी है कि code state-स्तर पर replace होता है, और इसके साथ shared code, variables और persistent data के लिए API भी उपयोग होते हैं
- kernel event delivery, timer, beep, display scroll, database access, crown और backlight control जैसे low-level काम संभालता है
- यह discontinued डिवाइस है इसलिए इसे पाना मुश्किल है, लेकिन Virtual Datalink simulator और public docs व example code की मदद से हर बार असली घड़ी reset किए बिना development किया जा सकता है
छोटी घड़ी के अंदर एक development platform
- Timex m851 एक digital watch है जिसमें 8-bit Seiko S1C88 CPU, 48KB ROM, 2KB RAM और 42x11 dot-matrix main display है
- CPU को अल्ट्रा-लो-पावर ऑपरेशन के लिए डिज़ाइन किया गया है, इसलिए यह एक ही battery पर 3 साल तक चल सकता है
- साइड के पिन USB हैं, और इनका उपयोग अपॉइंटमेंट जैसी data को घड़ी के साथ sync करने में होता है
- Linux के लिए libdlusb library उपलब्ध है
- Timex द्वारा दिए गए SDK का उपयोग करके
cc helloworld.cसे application build कर घड़ी पर upload किया जा सकता है - डिफ़ॉल्ट tools भले ही Windows XP दौर के wizard जैसे दिखते हों, लेकिन अंदर UNIX-शैली toolchain चलता है
WatchApp examples और मौजूदा ecosystem
- hello world example और
Makefileको taviso/timex repository में देखा जा सकता है - इस platform के लिए games, utilities और tools जैसे कई WatchApp बनाए गए थे
WatchApp architecture: state और mode
- application को state में बाँटा जाता है, और state बदलने पर मौजूदा active code हट जाता है और नया code लोड होता है
- app लगभग 30KB तक code या data इस्तेमाल कर सकता है, लेकिन RAM सिर्फ लगभग 2KB है
- paging नहीं है, और पूरा code RAM में नहीं रखा जा सकता, इसलिए state structure ज़रूरी है
- एक shared code space है जिसे सभी state साथ इस्तेमाल करते हैं, और variable space व persistent data के लिए database API भी उपलब्ध है
- शुरुआती कुछ state common event handling के लिए reserved हैं, और बाकी को app अपनी ज़रूरत के हिसाब से इस्तेमाल कर सकता है
- mode सामने दिखने वाले application के बराबर है
- app आमतौर पर mode देता है, लेकिन background tasks या periodic tasks भी जोड़े जा सकते हैं
coreRequestModeChangeNext();से mode switch का request करने पर अगला app control ले लेता है
Event handling और kernel services
- हर state के लिए event handler ज़रूरी होता है
- events में state entry, crown को बाहर खींचना या वापस दबाना, crown rotation, button press और mode button input शामिल हैं
- जिन events की ज़रूरत न हो उन्हें ignore किया जा सकता है
- kernel hardware handling और event dispatch संभालता है और कई services देता है
- timer
- tone और beep generation
- display scroll
- database record access
- crown settings
- backlight control
- example code
lcdClearDisplay()औरlcdDispBannerMsg()जैसी kernel services का उपयोग करके"hello!"banner message दिखाता है
ऐसा debugging environment जो resets कम करता है
- memory protection नहीं है, इसलिए app kernel memory को overwrite कर सकता है
- kernel को हर 2 सेकंड में watchdog को बताना पड़ता है कि वह जीवित है, नहीं तो watchdog घड़ी reset कर देता है
- भारी computation करते समय
hwResetWatchdog();से watchdog refresh करना होता है
- भारी computation करते समय
- Virtual Datalink एक open source third-party simulator है
- source
- यह सिर्फ Windows के लिए है और Delphi में लिखा गया है
- यह conditional breakpoints, disassembler, save states, resource analysis और power analysis देता है
Discontinued device हासिल करना और reference docs
- Timex m851 बहुत पहले discontinued हो चुका है और इसे पाना लगातार मुश्किल होता जा रहा है
- eBay पर ऐसे डिवाइस मिल सकते थे जिनमें सिर्फ battery बदलने से वे नए जैसे काम करने लगें
- अगर cable न हो, तो standard USB Type-A pinout और एक unusual connector का फायदा उठाकर पुरानी USB cable और alligator clips इस्तेमाल किए जा सकते हैं
- Timex T5G751 भी वही connector इस्तेमाल करता है, और यह अपेक्षाकृत आसानी से मिल जाता है, इसलिए cable हासिल करने के लिए इसका उपयोग किया जा सकता है
- “dress edition” नाम का m851 variant वही specs रखता है लेकिन body अलग होती है, और कभी-कभी अलग model number से लिस्ट होता है
- reference docs
- Design Guide: सबसे महत्वपूर्ण दस्तावेज़, और अच्छी तरह लिखा गया है
- CPU manual: CPU मैनुअल
- toolchain manual
- API reference: kernel द्वारा दी जाने वाली services की सूची शामिल है
1 टिप्पणियां
Hacker News की राय
जादुई बातों में से एक यह है कि Epson SoC(PN S1C88349) अविश्वसनीय रूप से power-efficient है: 32kHz low-power mode में चलते समय इसकी current consumption सिर्फ 9 माइक्रोएम्पियर है
यह सोचने पर मजबूर करता है कि प्रति सेकंड 32,000 cycle के budget में कितना कुछ किया जा सकता है
ऊपर से इसमें 48K ROM, 2K RAM, 3 timer, UART और A/D converter भी हैं
[1] https://global.epson.com/products_and_drivers/semicon/pdf/id...
Seiko-Epson chip, EM-Swatch और OKI-Casio chip के साथ, घड़ियों, calculators, thermometers और सस्ते low-power segment LCD devices में इस्तेमाल होते थे, जिन्हें एक button cell battery पर सालों तक चलना होता था
15 साल से ज्यादा पुराने calculator और digital thermometer भी ऐसे Seiko-Epson chip इस्तेमाल करते हैं, और अभी भी उनमें शुरू से लगी 1.5V button cell battery पर चलते हैं। lithium battery के समय के साथ natural self-discharge को देखते हुए यह काफी चौंकाने वाला है
आजकल कई mobile apps का binary size अतीत के पूरे operating systems और applications से बड़ा होता है, जबकि वे बहुत उपयोगी काम करते थे
यह trend कहां जाएगा, यह डराता है, और लगता नहीं कि कोई व्यक्ति या कोई चीज इस पर ब्रेक लगाएगी
याद है कि power switch leakage जैसी चीजें शामिल करने पर भी nominally 100nA से कम था, और सचमुच कमाल का स्तर है
4-bit(!) 32KHz microcontroller में 12-bit(‼) ROM के 6,144 words, internal 4-bit RAM के 640 words, और integrated LCD driver के लिए 4-bit frame buffer के 160 words हैं। double buffering तक संभव है
सचमुच खूबसूरत chip है। करीब एक साल पहले मैंने TypeScript emulator बनाया था, लेकिन अभी GitHub पर नहीं डाला। अगर रुचि हो तो डाल सकता हूं, और यह unmodified Tamagotchi firmware भी चला सकता है
असल में यह EEPROM है, और कुछ हद तक Flash memory जैसा लगता है
अगर आपको थोड़े ज्यादा features चाहिए, तो Bangle.js भी देखने लायक है
इसमें Bluetooth, GPS, accelerometer, vibration motor और color screen होने का फायदा है। नुकसान यह है कि battery 3 साल से काफी कम चलती है
[0] https://banglejs.com/
“sunlight में भी readable always-on screen, 4-week battery life, पूरी flexibility, और अपने data पर पूरा control” को highlight करते हुए Bangle.js 2 को महंगी smartwatches से अलग एक alternative बताया गया है
करीब 15 साल पहले मेरे पास यह घड़ी थी, और मैं इसमें कई चीजें रिकॉर्ड कर सकता था
अगली class कहां है, अक्सर इस्तेमाल होने वाले stops के bus timetables, चंद्रमा की कलाएं जैसी चीजें इसमें डाल रखी थीं
smartphones से पहले wristwatch पर bus timetable देखना James Bond जैसा लगता था :)
काश ऐसी घड़ियां अभी भी बनतीं। इस level की power consumption के साथ, solar से इसे लगभग लगातार charge करते हुए इस्तेमाल किया जा सकता है
20 साल से भी ज्यादा पहले मैं Siemens phone में bus timetable को SMS draft के रूप में save करके रखता था
hackable watch के लिए एक ज्यादा modern approach यह हो सकती है
https://github.com/sharandac/My-TTGO-Watch
LILYGO T5 E-Paper development board से DIY iPod Nano 7G बनाने की कोशिश में research करते समय यह मिला
Product: https://www.aliexpress.com/item/1005002474854718.html
code repository: https://github.com/Xinyuan-LilyGO/LilyGo-T5-Epaper-Series
अगर मेरे पास Arduino side पर ज्यादा समय और skills होते, तो यह एक शानदार iPod Nano 7G replacement बन सकता था ;)
default code लगभग ठीक से काम नहीं करता था, और कुछ न करने पर भी battery करीब 12 घंटे चलती थी। हालांकि जो लोग दूसरों का code debug करना enjoy करते हैं, उनके लिए कीमत के हिसाब से यह वाकई कमाल की चीज है
missing हिस्सों को थोड़ा भरा और power consumption घटाने वाली settings ढूंढीं, जिससे “normal” use में करीब 6 घंटे चलने लगा
अब code काफी बेहतर हो गया होगा, लेकिन power budget 80s-style ultra-low-power m851 की तुलना में Apple या Samsung smartwatch के कहीं ज्यादा करीब होगा
अगर आपको experiments पसंद हैं तो यह मजेदार छोटा project है और पैसे के लायक है। अगर iWatch से मुकाबला करने वाली चीज की उम्मीद करेंगे तो शायद निराशा होगी
अगर “एक battery पर 3 साल चलती है” बड़ी खासियत है, तो Casio निश्चित रूप से अभी भी ऐसी चीजें बनाता है
“Casio MIP display” खोजकर देखें
Timex Datalink series के बारे में अतिरिक्त जानकारी यहां है
https://en.m.wikipedia.org/wiki/Timex_Datalink
क्या इसे modern IPS LCD से भी reproduce किया जा सकता है?
काश और ज़्यादा घड़ियाँ और wearable ऐसे 8-bit low-power chip से बनें, और data pins exposed हों ताकि उन्हें hack किया जा सके
घड़ी के लिए 3 साल की battery life ही मुख्य बात है। अगर मुझे घड़ी charge करने की चिंता करनी पड़े, तो मेरे लिए वह बाहर है
अभी जो Swatch इस्तेमाल कर रहा हूँ, वह उसी battery पर लगभग 1 साल से समय लगातार सही दिखा रही है। सस्ती mechanical watches की दिक्कत यह है कि अगर सावधान न रहें तो spring को ज़रूरत से ज़्यादा wind कर सकते हैं। इसलिए हर कुछ साल में एक खराब कर देता हूँ, लेकिन वैसे भी वे सस्ती हैं
दोनों घड़ियों की अच्छी बात यह है कि उन्हें रोज़ charge करने की ज़रूरत नहीं होती। बेशक wind-up watch में spring wind करनी पड़ती है
यह फिर याद दिलाता है कि हमारे पास सच में अच्छी चीज़ें हो सकती हैं। बस ऐसी चीज़ों के लिए market होना चाहिए
काश ऐसी अच्छी तरह integrated घड़ी हो जिसकी battery usage कम हो, जिसे पहनने या replace करने का झंझट भी कम हो, और design के लिहाज़ से भी समझ में आए
अफ़सोस है कि अभी हम जो सबसे अच्छा कर सकते हैं, वह Sensorwatch [1] है
[1] https://www.sensorwatch.net
संपादन: Sensorwatch शानदार है, लेकिन अभी ecosystem नहीं है
जानना चाहता हूँ कि board के साथ क्या करने का मन हो सकता है
TI के Ez430-chronos से भी ज़्यादा simple और अच्छा लगता है
हालांकि एक cell पर 3 साल इतना शानदार नहीं लगता। ज़ाहिर है यह इस पर निर्भर करेगा कि कौन-सा app इस्तेमाल और upload करते हैं, और programmable होना cool है
[0] https://www.sparkfun.com/products/retired/10019
2018 में मैंने एक Casio F91 खो दी थी, और पिछले हफ़्ते canoe trip की packing करते समय मिल गई। उसका time और date मेरी कलाई पर बंधी Casio F91 से बस कुछ seconds ही अलग था
पहले एक खरीदी थी, लेकिन घर बदलते समय गायब हो गई। फिर से उसके साथ खेलना चाहता हूँ
संपादन: ओह, तुमने तो product listing में “RETIRED” लिखे link को ही डाल रखा है। TI product हो तो market response आने लगते ही TI उसे बंद न करे, यह अजीब ही होगा