1 คะแนน โดย GN⁺ 2023-09-04 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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();
  • 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 ความคิดเห็น

 
GN⁺ 2023-09-04
ความคิดเห็นบน 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...

    • คุณอาจแปลกใจเมื่อรู้ว่า ชิ้นส่วน 8 บิตพลังงานต่ำมาก แบบนี้มีมาตั้งแต่ราว ๆ 30 ปีก่อนแล้ว
      ชิป Seiko-Epson ถูกใช้ร่วมกับชิป EM-Swatch และ OKI-Casio ในอุปกรณ์อย่างนาฬิกา เครื่องคิดเลข เทอร์โมมิเตอร์ และอุปกรณ์ LCD แบบ segment ราคาถูกที่กินไฟต่ำ ซึ่งต้องทำงานได้นานหลายปีด้วยถ่านกระดุมก้อนเดียว
      เครื่องคิดเลขและเทอร์โมมิเตอร์ดิจิทัลที่อายุมากกว่า 15 ปีก็ใช้ชิป Seiko-Epson แบบนี้ และยังทำงานด้วยถ่านกระดุม 1.5V ก้อนแรกที่ใส่มาอยู่เลย เมื่อคิดถึงการคายประจุเองตามกาลเวลาของถ่านลิเทียมแล้ว ก็น่าทึ่งทีเดียว
    • ระบบสมัยใหม่ ไม่ว่าจะเป็น SoC, ระบบปฏิบัติการ หรือแอป ต่างมีระดับของ ความบวมและความซับซ้อน ที่มหาศาล
      ทุกวันนี้ binary ของแอปมือถือจำนวนมากมีขนาดใหญ่กว่าระบบปฏิบัติการและแอปพลิเคชันทั้งชุดในอดีตที่เคยทำงานที่มีประโยชน์มาก ๆ
      น่ากลัวว่ากระแสนี้จะไปทางไหน และก็ดูไม่น่าจะมีใครหรืออะไรเข้ามาเบรกได้
    • TMS430 รุ่นใหม่มีโหมดพลังงานต่ำมาก และยังใช้ RTC ภายนอกที่กินไฟต่ำมากได้ด้วย
      เท่าที่จำได้ ตัวเลข nominal ต่ำกว่า 100nA รวมถึงการรั่วของสวิตช์เปิดปิดอะไรทำนองนั้นด้วย ถือว่าสุดยอดจริง ๆ
    • E0C6S46 ยังคงขับเคลื่อน Tamagotchi รุ่นแรกและรุ่นที่สองอยู่
      เป็นไมโครคอนโทรลเลอร์ 4 บิต(!) 32KHz ที่มี ROM แบบ 12 บิต(‼) จำนวน 6,144 word, RAM ภายในแบบ 4 บิต 640 word และ framebuffer แบบ 4 บิต 160 word สำหรับไดรเวอร์ LCD ในตัว แถมยังทำ double buffering ได้ด้วย
      เป็นชิปที่งดงามจริง ๆ ประมาณหนึ่งปีก่อนผมทำ emulator ด้วย TypeScript ไว้ แต่ยังไม่ได้เอาขึ้น GitHub ถ้าสนใจก็เอาขึ้นให้ได้ และมันรัน firmware Tamagotchi ที่ไม่ได้แก้ไขได้ด้วย
    • คำว่า ROM ทำให้สับสนอยู่เหมือนกัน เดิมทีคิดว่าหมายถึงสิ่งที่เปลี่ยนไม่ได้ แต่ในเอกสารบอกว่ามีการใส่และเอาข้อมูลที่แก้ไขได้เข้าออกจากตรงนั้น
      จริง ๆ แล้วมันคือ EEPROM และดูคล้ายกับ Flash memory อยู่บ้าง
  • ถ้าอยากได้อะไรที่มีฟังก์ชันมากขึ้นอีกหน่อย Bangle.js ก็น่าดู
    ข้อดีคือมี Bluetooth, GPS, accelerometer, มอเตอร์สั่น และหน้าจอสี ข้อเสียคือแบตเตอรี่อยู่ได้สั้นกว่า 3 ปีมาก
    [0] https://banglejs.com/

    • สำหรับคนที่สงสัย อายุแบตเตอรี่ของ Bangle ระบุไว้ว่า 4 สัปดาห์
      โดยโปรโมตว่าเป็น “หน้าจอ always-on ที่อ่านได้แม้กลางแดด, อายุแบตเตอรี่ 4 สัปดาห์, ความยืดหยุ่นเต็มรูปแบบ, การควบคุมข้อมูลของคุณอย่างสมบูรณ์” และแนะนำ Bangle.js 2 ว่าเป็นทางเลือกที่หลุดพ้นจากสมาร์ตวอทช์ราคาแพง
  • ผมมีนาฬิกาเรือนนี้เมื่อประมาณ 15 ปีก่อน และบันทึกอะไรได้หลายอย่าง
    ใส่ไว้ทั้งห้องเรียนถัดไปอยู่ที่ไหน ตารางรถเมล์ของป้ายที่ใช้บ่อย และข้างขึ้นข้างแรม
    ก่อนยุคสมาร์ตโฟน การเช็กตารางรถเมล์จากนาฬิกาข้อมือดูเหมือน James Bond เลย :)
    อยากให้ยังมีคนทำนาฬิกาแบบนี้อยู่ ด้วยระดับการใช้พลังงานแบบนี้ น่าจะชาร์จด้วยแสงอาทิตย์ไปได้แทบตลอด

    • ถ้าพูดอย่างเป็นธรรม iPhone รุ่นแรกออกมาเมื่อ 16 ปีก่อน และก่อนหน้านั้นก็มีสมาร์ตโฟนที่เก็บตารางรถเมล์ได้แล้ว
      กว่า 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

    • น่าขันที่รุ่นเก่าที่มี ตัวรับแสง กลับให้ความรู้สึกว่าไฮเทคกว่ารุ่น USB ภายหลังมาก
    • สงสัยว่าทำไมถึงซิงก์ได้เฉพาะกับ CRT แต่กับ LCD ไม่ได้
      จะทำซ้ำด้วย IPS LCD สมัยใหม่ได้ไหม?
  • อยากให้มีนาฬิกาและอุปกรณ์สวมใส่มากขึ้นที่ทำด้วย ชิปประหยัดพลังงาน 8 บิต แบบนี้ และมีขา data pin โผล่ออกมาให้แฮ็กได้
    ถ้าเป็นนาฬิกา อายุแบตเตอรี่ 3 ปีคือประเด็นสำคัญ ถ้าต้องมาคอยกังวลว่าต้องชาร์จนาฬิกา สำหรับผมถือว่าตกรอบ

    • ผมยังซื้อทั้งนาฬิกาไขลานกลไกราคาถูกกับ Swatch บน eBay อยู่เรื่อย ๆ
      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 ที่ใส่อยู่บนข้อมือแค่ไม่กี่วินาที
    • ยังซื้อ chronos ได้อยู่ไหม?
      เมื่อก่อนเคยซื้อไว้เรือนหนึ่ง แต่หายไปตอนย้ายบ้าน อยากลองจับมาเล่นอีก
      แก้ไข: อ้อ ใส่ลิงก์ที่ในรายการสินค้าขึ้นว่า “RETIRED” ไว้นี่เอง ถ้าเป็นผลิตภัณฑ์ของ TI ถ้า TI ไม่เลิกผลิตมันตอนที่ตลาดเริ่มมีปฏิกิริยาขึ้นมาก็คงแปลกแล้ว