การแฮ็ก Timex m851
(lock.cmpxchg8b.com)- Timex m851 ดูเหมือนนาฬิกาดิจิทัลสำหรับนักวิ่ง แต่จริง ๆ แล้วเป็นแพลตฟอร์มพลังงานต่ำมากที่รันแอปของผู้ใช้ได้ด้วย Seiko S1C88 CPU แบบ 8-bit และ RAM เพียง 2KB
- พินด้านข้างเป็น USB จึงซิงก์ข้อมูลอย่างนัดหมายได้ และสามารถใช้ Timex SDK build
cc helloworld.cแล้วอัปโหลดขึ้นนาฬิกาได้โดยตรง - WatchApp มีโครงสร้างที่ สลับโค้ดเป็นหน่วย state เนื่องจาก RAM มีจำกัด และใช้งาน API สำหรับโค้ดร่วม ตัวแปร และข้อมูลถาวรร่วมกัน
- เคอร์เนลรับผิดชอบงานระดับล่าง เช่น การส่งต่อ event, timer, เสียง beep, การเลื่อนจอแสดงผล, การเข้าถึง database, การควบคุม crown และ backlight
- แม้เป็นอุปกรณ์ที่เลิกผลิตแล้วและหาได้ยาก แต่ด้วย simulator Virtual Datalink รวมถึงเอกสารและโค้ดตัวอย่างที่เปิดเผย จึงพัฒนาได้โดยไม่ต้อง reset นาฬิกาจริงทุกครั้ง
แพลตฟอร์มพัฒนาในนาฬิกาเรือนเล็ก
- Timex m851 เป็นนาฬิกาดิจิทัลที่มี Seiko S1C88 CPU แบบ 8-bit, ROM 48KB, RAM 2KB และจอหลักแบบ dot matrix 42x11
- CPU ถูกออกแบบโดยมุ่งเป้าไปที่การทำงานแบบ ใช้พลังงานต่ำมาก ทำให้อยู่ได้ 3 ปีด้วยแบตเตอรี่ก้อนเดียว
- พินด้านข้างเป็น USB และใช้สำหรับซิงก์ข้อมูลอย่างนัดหมายกับนาฬิกา
- มีไลบรารีสำหรับ Linux ชื่อ libdlusb
- เมื่อใช้ SDK ที่ Timex ให้มา สามารถ build แอปพลิเคชันด้วย
cc helloworld.cแล้วอัปโหลดไปยังนาฬิกาได้ - เครื่องมือพื้นฐานอยู่ในรูปแบบ wizard ยุค Windows XP แต่ภายในทำงานด้วย toolchain ตระกูล UNIX
ตัวอย่าง WatchApp และ ecosystem เดิม
- ตัวอย่าง hello world และ
Makefileดูได้ที่ repository taviso/timex - แพลตฟอร์มนี้เคยมี WatchApp หลายแบบ เช่น เกม utility และเครื่องมือต่าง ๆ
โครงสร้าง WatchApp: state และ mode
- แอปพลิเคชันถูกแบ่งเป็น state และเมื่อ state เปลี่ยน โค้ดที่ active อยู่ในปัจจุบันจะถูกทิ้ง แล้วโหลดโค้ดใหม่ขึ้นมา
- แอปใช้โค้ดหรือข้อมูลได้สูงสุดประมาณ 30KB แต่มี RAM เพียงประมาณ 2KB
- ไม่มี paging และไม่สามารถบรรจุโค้ดทั้งหมดไว้ใน RAM ได้ จึงต้องใช้โครงสร้างแบบ state
- มีพื้นที่โค้ดร่วมที่ทุก state ใช้ร่วมกัน และมี database API สำหรับพื้นที่ตัวแปรกับข้อมูลถาวรด้วย
- state บางส่วนด้านหน้าถูกกันไว้สำหรับการจัดการ event ร่วม ส่วนที่เหลือแอปสามารถใช้ตามต้องการได้
- mode เทียบได้กับแอปพลิเคชันด้านหน้า
- โดยปกติแอปจะให้ mode แต่สามารถเพิ่มงานเบื้องหลังหรืองานตามรอบเวลาได้ด้วย
- เมื่อขอสลับ mode ด้วย
coreRequestModeChangeNext();แอปถัดไปจะได้สิทธิ์ควบคุม
การจัดการ event และบริการของเคอร์เนล
- แต่ละ state ต้องมี event handler
- event รวมถึงการเข้าสู่ state, การดึงหรือกด crown กลับเข้าไป, การหมุน crown, การกดปุ่ม และ input จากปุ่ม mode
- event ที่ไม่จำเป็นสามารถละเว้นได้
- เคอร์เนลรับผิดชอบการจัดการฮาร์ดแวร์และการ dispatch event พร้อมให้บริการหลายอย่าง
- timer
- การสร้าง tone และเสียง beep
- การเลื่อนจอแสดงผล
- การเข้าถึง record ใน database
- การตั้งค่า crown
- การควบคุม backlight
- โค้ดตัวอย่างใช้บริการของเคอร์เนลอย่าง
lcdClearDisplay()และlcdDispBannerMsg()เพื่อแสดงข้อความ banner"hello!"
สภาพแวดล้อม debug ที่ช่วยลดการ reset
- ไม่มี memory protection แอปจึงอาจเขียนทับหน่วยความจำของเคอร์เนลได้
- เคอร์เนลต้องแจ้ง watchdog ทุก 2 วินาทียังมีชีวิตอยู่ หากไม่มีการแจ้ง watchdog จะ reset นาฬิกา
- เมื่อทำการคำนวณหนัก ๆ ต้องรีเฟรช watchdog ด้วย
hwResetWatchdog();
- เมื่อทำการคำนวณหนัก ๆ ต้องรีเฟรช watchdog ด้วย
- Virtual Datalink เป็น simulator แบบ third-party ที่เป็น open source
- ซอร์ส
- ใช้ได้เฉพาะ Windows และเขียนด้วย Delphi
- มี conditional breakpoint, disassembler, saved state, resource analysis และ power analysis
การหาอุปกรณ์ที่เลิกผลิตแล้วและเอกสารอ้างอิง
- Timex m851 เลิกผลิต ไปนานแล้ว และยิ่งหาซื้อยากขึ้นเรื่อย ๆ
- เคยสามารถหาเครื่องบน eBay ที่เพียงเปลี่ยนแบตเตอรี่ก็ใช้ได้เหมือนใหม่
- หากไม่มีสาย สามารถใช้ pinout มาตรฐานของ USB Type-A และลักษณะ connector ที่แปลกของมัน โดยใช้สาย USB เก่ากับคลิปปากจระเข้ได้
- Timex T5G751 ก็ใช้ connector เดียวกัน และค่อนข้างหาง่ายกว่า จึงนำมาใช้เพื่อหาสายได้
- รุ่นย่อยของ m851 ที่เรียกว่า “dress edition” มีสเปกเหมือนกันแต่ตัวเรือนต่างออกไป และบางครั้งถูกลงประกาศด้วยหมายเลขรุ่นอื่น
- เอกสารอ้างอิง
- Design Guide: เป็นเอกสารที่สำคัญที่สุดและเขียนไว้ดี
- CPU manual: คู่มือ CPU
- คู่มือ toolchain
- API reference: มีรายการบริการที่เคอร์เนล提供ให้
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
หนึ่งในส่วนที่เหมือนเวทมนตร์คือ Epson SoC(PN S1C88349) ประหยัดพลังงานอย่างเหลือเชื่อ: เมื่อทำงานในโหมดพลังงานต่ำ 32kHz กินกระแสเพียง 9 ไมโครแอมแปร์ เท่านั้น
ทำให้นึกได้ว่าเราจะทำอะไรได้มากแค่ไหนด้วยงบประมาณ 32,000 cycle ต่อวินาที
แถมยังมี ROM 48K, RAM 2K พร้อม timer 3 ตัว, UART และ A/D converter รวมอยู่ด้วย
[1] https://global.epson.com/products_and_drivers/semicon/pdf/id...
ชิป Seiko-Epson ถูกใช้ร่วมกับชิป EM-Swatch และ OKI-Casio ในอุปกรณ์อย่างนาฬิกา เครื่องคิดเลข เทอร์โมมิเตอร์ และอุปกรณ์ LCD แบบ segment ราคาถูกที่กินไฟต่ำ ซึ่งต้องทำงานได้นานหลายปีด้วยถ่านกระดุมก้อนเดียว
เครื่องคิดเลขและเทอร์โมมิเตอร์ดิจิทัลที่อายุมากกว่า 15 ปีก็ใช้ชิป Seiko-Epson แบบนี้ และยังทำงานด้วยถ่านกระดุม 1.5V ก้อนแรกที่ใส่มาอยู่เลย เมื่อคิดถึงการคายประจุเองตามกาลเวลาของถ่านลิเทียมแล้ว ก็น่าทึ่งทีเดียว
ทุกวันนี้ binary ของแอปมือถือจำนวนมากมีขนาดใหญ่กว่าระบบปฏิบัติการและแอปพลิเคชันทั้งชุดในอดีตที่เคยทำงานที่มีประโยชน์มาก ๆ
น่ากลัวว่ากระแสนี้จะไปทางไหน และก็ดูไม่น่าจะมีใครหรืออะไรเข้ามาเบรกได้
เท่าที่จำได้ ตัวเลข nominal ต่ำกว่า 100nA รวมถึงการรั่วของสวิตช์เปิดปิดอะไรทำนองนั้นด้วย ถือว่าสุดยอดจริง ๆ
เป็นไมโครคอนโทรลเลอร์ 4 บิต(!) 32KHz ที่มี ROM แบบ 12 บิต(‼) จำนวน 6,144 word, RAM ภายในแบบ 4 บิต 640 word และ framebuffer แบบ 4 บิต 160 word สำหรับไดรเวอร์ LCD ในตัว แถมยังทำ double buffering ได้ด้วย
เป็นชิปที่งดงามจริง ๆ ประมาณหนึ่งปีก่อนผมทำ emulator ด้วย TypeScript ไว้ แต่ยังไม่ได้เอาขึ้น GitHub ถ้าสนใจก็เอาขึ้นให้ได้ และมันรัน firmware Tamagotchi ที่ไม่ได้แก้ไขได้ด้วย
จริง ๆ แล้วมันคือ EEPROM และดูคล้ายกับ Flash memory อยู่บ้าง
ถ้าอยากได้อะไรที่มีฟังก์ชันมากขึ้นอีกหน่อย Bangle.js ก็น่าดู
ข้อดีคือมี Bluetooth, GPS, accelerometer, มอเตอร์สั่น และหน้าจอสี ข้อเสียคือแบตเตอรี่อยู่ได้สั้นกว่า 3 ปีมาก
[0] https://banglejs.com/
โดยโปรโมตว่าเป็น “หน้าจอ always-on ที่อ่านได้แม้กลางแดด, อายุแบตเตอรี่ 4 สัปดาห์, ความยืดหยุ่นเต็มรูปแบบ, การควบคุมข้อมูลของคุณอย่างสมบูรณ์” และแนะนำ Bangle.js 2 ว่าเป็นทางเลือกที่หลุดพ้นจากสมาร์ตวอทช์ราคาแพง
ผมมีนาฬิกาเรือนนี้เมื่อประมาณ 15 ปีก่อน และบันทึกอะไรได้หลายอย่าง
ใส่ไว้ทั้งห้องเรียนถัดไปอยู่ที่ไหน ตารางรถเมล์ของป้ายที่ใช้บ่อย และข้างขึ้นข้างแรม
ก่อนยุคสมาร์ตโฟน การเช็กตารางรถเมล์จากนาฬิกาข้อมือดูเหมือน James Bond เลย :)
อยากให้ยังมีคนทำนาฬิกาแบบนี้อยู่ ด้วยระดับการใช้พลังงานแบบนี้ น่าจะชาร์จด้วยแสงอาทิตย์ไปได้แทบตลอด
กว่า 20 ปีก่อน ผมเคยเก็บตารางรถเมล์ไว้เป็นร่าง SMS ในโทรศัพท์ Siemens
แนวทางที่ทันสมัยกว่าสำหรับนาฬิกาที่ hack ได้ อาจเป็นอันนี้
https://github.com/sharandac/My-TTGO-Watch
เจอตอนกำลังหาข้อมูลเพื่อจะทำ DIY iPod Nano 7G ด้วยบอร์ดพัฒนา LILYGO T5 E-Paper
สินค้า: https://www.aliexpress.com/item/1005002474854718.html
repository โค้ด: https://github.com/Xinyuan-LilyGO/LilyGo-T5-Epaper-Series
ถ้าผมมีเวลาและฝีมือฝั่ง Arduino มากกว่านี้ มันน่าจะเป็น ตัวแทน iPod Nano 7G ที่ยอดเยี่ยมได้เลย ;)
โค้ดพื้นฐานแทบทำงานไม่ค่อยถูกต้อง และถึงไม่ทำอะไรเลยแบตก็อยู่ได้ราว 12 ชั่วโมง แต่ก็ยอมรับว่าเป็นของที่คุ้มอย่างน่าทึ่งเมื่อเทียบกับราคา สำหรับคนที่ชอบ debug โค้ดของคนอื่น
ผมเติมส่วนที่ขาดไปเล็กน้อยและหา settings ที่ลดการกินไฟจนทำให้ใช้งาน “ปกติ” ได้ประมาณ 6 ชั่วโมง
โค้ดตอนนี้คงดีขึ้นมากแล้ว แต่งบพลังงานน่าจะใกล้กับสมาร์ตวอทช์ของ Apple หรือ Samsung มากกว่า m851 แบบพลังงานต่ำสุด ๆ สไตล์ยุค 80
ถ้าชอบทดลอง ก็เป็นโปรเจกต์เล็ก ๆ ที่สนุกและคุ้มเงิน แต่ถ้าคาดหวังของที่จะไปแข่งกับ iWatch ก็น่าจะผิดหวังมาก
ถ้า “ใช้ถ่านก้อนเดียวได้ 3 ปี” เป็นจุดขายใหญ่ Casio ก็ยังทำของแบบนั้นอยู่แน่นอน
ลองค้นหา “Casio MIP display” ดู
ข้อมูลเพิ่มเติมเกี่ยวกับซีรีส์ Timex Datalink อยู่ที่นี่
https://en.m.wikipedia.org/wiki/Timex_Datalink
จะทำซ้ำด้วย IPS LCD สมัยใหม่ได้ไหม?
อยากให้มีนาฬิกาและอุปกรณ์สวมใส่มากขึ้นที่ทำด้วย ชิปประหยัดพลังงาน 8 บิต แบบนี้ และมีขา data pin โผล่ออกมาให้แฮ็กได้
ถ้าเป็นนาฬิกา อายุแบตเตอรี่ 3 ปีคือประเด็นสำคัญ ถ้าต้องมาคอยกังวลว่าต้องชาร์จนาฬิกา สำหรับผมถือว่าตกรอบ
Swatch ที่ใช้อยู่ตอนนี้เดินเวลาได้ตรงสม่ำเสมอมาประมาณ 1 ปีแล้วด้วยแบตเตอรี่ก้อนเดิม ปัญหาของนาฬิกากลไกราคาถูกคือถ้าไม่ระวัง อาจไขลานแน่นเกินไปได้ ดังนั้นผมเลยทำพังไปเรือนหนึ่งทุกไม่กี่ปี แต่ยังไงมันก็ถูกอยู่ดี
สิ่งที่ยอดเยี่ยมของนาฬิกาทั้งสองแบบคือไม่ต้องชาร์จทุกวัน แน่นอนว่านาฬิกาไขลานก็ต้องไขลานอยู่ดี
ทำให้นึกขึ้นมาได้อีกครั้งว่า จริง ๆ แล้วเราสามารถมี ของดี ได้ ถ้ามีตลาดสำหรับของแบบนั้น
อยากให้มีนาฬิกาที่ผสานรวมมาอย่างดี ใช้แบตเตอรี่น้อย ภาระในการสวมใส่หรือเปลี่ยนก็ต่ำ และในแง่การออกแบบก็ดูสมเหตุสมผล
น่าเสียดายที่สิ่งที่ดีที่สุดที่เราทำได้ตอนนี้คือ Sensorwatch [1]
[1] https://www.sensorwatch.net
แก้ไข: Sensorwatch ยอดเยี่ยม แต่ยังไม่ใช่ ecosystem
อยากรู้ว่ามันมีอะไรที่ทำให้อยากเอาบอร์ดไปทำ
ดูเรียบง่ายกว่า Ez430-chronos ของ TI และก็ดูดีด้วย
แต่แบตเตอรี่ก้อนเดียวใช้ได้ 3 ปี ก็ไม่ได้ดูน่าทึ่งเท่าไร แน่นอนว่าขึ้นอยู่กับว่าใช้และใส่แอปอะไรลงไป และการที่โปรแกรมได้ก็เจ๋งดี
[0] https://www.sparkfun.com/products/retired/10019
ปี 2018 ผมทำ Casio F91 หายไปเรือนหนึ่ง แล้วสัปดาห์ที่แล้วตอนจัดกระเป๋าไปพายแคนูถึงเจอมัน เวลาและวันที่ต่างจาก Casio F91 ที่ใส่อยู่บนข้อมือแค่ไม่กี่วินาที
เมื่อก่อนเคยซื้อไว้เรือนหนึ่ง แต่หายไปตอนย้ายบ้าน อยากลองจับมาเล่นอีก
แก้ไข: อ้อ ใส่ลิงก์ที่ในรายการสินค้าขึ้นว่า “RETIRED” ไว้นี่เอง ถ้าเป็นผลิตภัณฑ์ของ TI ถ้า TI ไม่เลิกผลิตมันตอนที่ตลาดเริ่มมีปฏิกิริยาขึ้นมาก็คงแปลกแล้ว