Hackeando el Timex m851
(lock.cmpxchg8b.com)- El Timex m851 parece un reloj digital para corredores, pero es una plataforma de consumo ultrabajo que ejecuta apps de usuario con solo una CPU Seiko S1C88 de 8 bits y 2 KB de RAM
- Los pines laterales son USB, por lo que puede sincronizar datos como citas, y con el SDK de Timex se puede compilar
cc helloworld.cy subirlo directamente al reloj - Debido a la RAM limitada, las WatchApp tienen una arquitectura en la que el código se reemplaza por state, y usan en conjunto API para código común, variables y datos persistentes
- El kernel se encarga de tareas de bajo nivel como entrega de eventos, temporizadores, pitidos, desplazamiento de la pantalla, acceso a la base de datos y control de la corona y la retroiluminación
- Al ser un dispositivo descontinuado es difícil conseguirlo, pero gracias al simulador Virtual Datalink y a la documentación y código de ejemplo públicos, se puede desarrollar sin tener que reiniciar el reloj real cada vez
Una plataforma de desarrollo dentro de un reloj pequeño
- El Timex m851 es un reloj digital con CPU Seiko S1C88 de 8 bits, 48 KB de ROM, 2 KB de RAM y una pantalla principal de matriz de puntos de 42x11
- La CPU fue diseñada para operación de consumo ultrabajo, capaz de funcionar durante 3 años con una sola batería
- Los pines laterales son USB y se usan para sincronizar datos como citas con el reloj
- Para Linux existe la biblioteca libdlusb
- Con el SDK provisto por Timex se puede compilar una aplicación con
cc helloworld.cy subirla al reloj - Las herramientas básicas tienen forma de asistente de la época de Windows XP, pero internamente corre una toolchain de tipo UNIX
Ejemplos de WatchApp y ecosistema existente
- El ejemplo de hello world y el
Makefilese pueden ver en el repositorio taviso/timex - Para esta plataforma se crearon varias WatchApp, como juegos, utilidades y herramientas
Estructura de una WatchApp: state y mode
- Las aplicaciones se dividen en state, y cuando cambia el state se descarta el código activo actual y se carga código nuevo
- Una app puede usar hasta unos 30 KB de código o datos, pero solo hay alrededor de 2 KB de RAM
- No hay paginación y no se puede cargar todo el código en RAM, por eso se necesita la estructura de state
- Existe un espacio de código común compartido por todos los state, y también hay una API de base de datos para el espacio de variables y los datos persistentes
- Algunos state iniciales están reservados para el manejo común de eventos, y el resto puede usarse como la app quiera
- mode corresponde a la aplicación en primer plano
- Normalmente una app ofrece un mode, pero también puede agregar tareas en segundo plano o periódicas
- Al solicitar un cambio de mode con
coreRequestModeChangeNext();, la siguiente app obtiene el control
Manejo de eventos y servicios del kernel
- Cada state necesita un manejador de eventos
- Los eventos incluyen entrada a un state, sacar o volver a meter la corona, girar la corona, presionar botones y entrada del botón mode
- Los eventos innecesarios pueden ignorarse
- El kernel se encarga del hardware y del despacho de eventos, y ofrece varios servicios
- Temporizadores
- Generación de tonos y pitidos
- Desplazamiento de la pantalla
- Acceso a registros de la base de datos
- Configuración de la corona
- Control de la retroiluminación
- El código de ejemplo usa servicios del kernel como
lcdClearDisplay()ylcdDispBannerMsg()para mostrar el mensaje de banner"hello!"
Entorno de depuración que reduce los reinicios
- No hay protección de memoria, por lo que una app puede sobrescribir la memoria del kernel
- El kernel debe avisarle al watchdog cada 2 segundos que sigue vivo; si no hay aviso, el watchdog reinicia el reloj
- Al realizar cálculos pesados, hay que actualizar el watchdog con
hwResetWatchdog();
- Al realizar cálculos pesados, hay que actualizar el watchdog con
- Virtual Datalink es un simulador open source de terceros
- Fuente
- Es exclusivo para Windows y está escrito en Delphi
- Ofrece breakpoints condicionales, desensamblador, estados guardados, análisis de recursos y análisis de energía
Conseguir dispositivos descontinuados y documentación de referencia
- El Timex m851 fue descontinuado hace mucho y cada vez es más difícil de conseguir
- En eBay se podían encontrar unidades que quedaban como nuevas con solo cambiarles la batería
- Si no se tiene el cable, se puede aprovechar que usa el pinout estándar de USB Type-A y un conector peculiar para usar un cable USB viejo y pinzas cocodrilo
- El Timex T5G751 usa el mismo conector y es relativamente más fácil de encontrar, por lo que puede servir para conseguir un cable
- Una variante del m851 llamada “dress edition” tiene las mismas especificaciones con otra carcasa, y a veces aparece publicada con otro número de modelo
- Documentación de referencia
- Design Guide: el documento más importante y está bien escrito
- CPU manual: manual de la CPU
- Manual de la toolchain
- API reference: contiene la lista de servicios que ofrece el kernel
1 comentarios
Opiniones de Hacker News
Una de las partes casi mágicas es que el Epson SoC (PN S1C88349) tiene un consumo ridículamente bajo: cuando opera en modo de bajo consumo a 32 kHz, consume apenas 9 microamperios.
Hace pensar en cuántas cosas se pueden hacer con un presupuesto de 32,000 ciclos por segundo.
Además, incluye 48K de ROM, 2K de RAM, tres temporizadores, UART e incluso un convertidor A/D.
[1] https://global.epson.com/products_and_drivers/semicon/pdf/id...
Los chips de Seiko-Epson, junto con los de EM-Swatch y OKI-Casio, se usaban en relojes, calculadoras, termómetros y dispositivos LCD segmentados baratos de bajo consumo, que tenían que funcionar durante años con una sola pila de botón.
Algunas calculadoras y termómetros digitales de más de 15 años también usan estos chips Seiko-Epson, y todavía funcionan con la pila de botón original de 1.5 V. Considerando la autodescarga de las pilas de litio con el tiempo, es bastante sorprendente.
Hoy, el tamaño binario de muchas apps móviles es mayor que el de sistemas operativos y aplicaciones enteras del pasado que hacían cosas muy útiles.
Da miedo pensar hacia dónde va esta tendencia, y parece poco probable que alguien o algo le ponga freno.
Si no recuerdo mal, nominalmente era menos de 100 nA, incluso incluyendo cosas como fugas del interruptor de encendido, y es realmente impresionante.
Es un microcontrolador de 4 bits (!) a 32 KHz, con 6,144 palabras de ROM de 12 bits (‼), 640 palabras de RAM interna de 4 bits y un framebuffer de 160 palabras de 4 bits para el controlador LCD integrado. Incluso permite doble buffering.
Es un chip realmente hermoso. Hace más o menos un año hice un emulador en TypeScript, pero todavía no lo subí a GitHub. Si hay interés, puedo subirlo, y también puede ejecutar firmware de Tamagotchi sin modificar.
En realidad es EEPROM, y parece algo similar a la memoria Flash.
Si quieres algo con algunas funciones más, también vale la pena mirar Bangle.js.
Tiene la ventaja de incluir Bluetooth, GPS, acelerómetro, motor de vibración y pantalla a color. La desventaja es que la batería dura mucho menos que 3 años.
[0] https://banglejs.com/
Lo presentan como una alternativa a los smartwatches caros con “pantalla siempre encendida legible bajo la luz del sol, 4 semanas de batería, flexibilidad total y control total sobre tus datos”, hablando del Bangle.js 2.
Hace unos 15 años tenía este reloj y podía guardar varias cosas.
Le cargaba el lugar de la siguiente clase, los horarios de buses de las paradas que usaba con frecuencia y cosas como las fases de la luna.
Antes de los smartphones, consultar el horario del bus en el reloj de pulsera te hacía ver como James Bond :)
Ojalá siguieran fabricando relojes así. Con ese nivel de consumo, parece que podría usarse prácticamente de forma continua cargándolo con energía solar.
Hace más de 20 años solía guardar horarios de buses como borradores de SMS en un celular Siemens.
Un enfoque más moderno para un reloj hackeable podría ser este:
https://github.com/sharandac/My-TTGO-Watch
Lo encontré mientras investigaba cómo hacer un iPod Nano 7G DIY con una placa de desarrollo LILYGO T5 E-Paper.
Producto: https://www.aliexpress.com/item/1005002474854718.html
Repositorio de código: https://github.com/Xinyuan-LilyGO/LilyGo-T5-Epaper-Series
Si hubiera tenido más tiempo y habilidad con Arduino, creo que esto podría haber sido un excelente reemplazo del iPod Nano 7G ;)
El código base casi no funcionaba correctamente, y la batería duraba unas 12 horas incluso sin hacer nada. Aun así, para alguien que disfruta depurando código ajeno, es un dispositivo sorprendente por el precio.
Completé algunas partes faltantes y encontré configuraciones para reducir el consumo, con lo que logré que durara unas 6 horas con uso “normal”.
Seguramente el código ahora esté mucho mejor, pero su presupuesto de energía está mucho más cerca de un smartwatch de Apple o Samsung que del m851 ultrabajo consumo estilo años 80.
Si te gusta experimentar, es un proyectito divertido y vale lo que cuesta. Si esperas algo que compita con un iWatch, probablemente te decepcione.
Si lo de “dura 3 años con una pila” es una gran ventaja, Casio sin duda todavía fabrica cosas así.
Basta buscar “Casio MIP display”.
Hay más información sobre la serie Timex Datalink aquí:
https://en.m.wikipedia.org/wiki/Timex_Datalink
¿Se podría reproducir con un LCD IPS moderno?
Ojalá más relojes y wearables se hicieran con este tipo de chips de 8 bits de bajo consumo, y que pudieran hackearse al tener los pines de datos expuestos.
En un reloj, lo clave es que la batería dure 3 años. Si tengo que preocuparme por cargarlo, para mí queda descartado.
El Swatch que uso ahora lleva aproximadamente un año manteniendo la hora de forma constante con la misma batería. El problema de los relojes mecánicos baratos es que, si no tienes cuidado, puedes darles cuerda de más. Por eso termino arruinando uno cada pocos años, pero igual son baratos.
Lo genial de ambos relojes es que no hay que cargarlos todos los días. Claro, el de cuerda sí hay que darle cuerda.
Me recuerda que en realidad podemos tener cosas buenas, siempre que exista mercado para ellas.
Me gustaría que hubiera un reloj bien integrado, con bajo consumo de batería, poca molestia para usarlo o reemplazarlo, y con un diseño convincente.
Es una lástima que lo mejor que podamos hacer ahora sea Sensorwatch [1].
[1] https://www.sensorwatch.net
Edición: Sensorwatch es excelente, pero todavía no es un ecosistema.
Me da curiosidad qué podría dar ganas de hacer con la placa.
Se ve incluso más simple que el Ez430-chronos de TI, y se ve bien.
Aunque 3 años con una sola pila no me parece tan impresionante. Claro que dependerá de qué apps uses y cargues, y el hecho de que sea programable está genial.
[0] https://www.sparkfun.com/products/retired/10019
En 2018 perdí un Casio F91, y la semana pasada lo encontré mientras empacaba para un viaje en canoa. La hora y la fecha apenas diferían por unos segundos del Casio F91 que llevaba en la muñeca.
Compré uno hace tiempo, pero desapareció en una mudanza. Me gustaría volver a trastear con él.
Edición: Ah, ya veo que pusiste un enlace donde el producto figura como “RETIRED”. Tratándose de un producto de TI, sería raro que TI no lo descontinuara justo cuando el mercado empieza a reaccionar.