Hackeando o Timex m851
(lock.cmpxchg8b.com)- O Timex m851 parece um relógio digital para corredores, mas é uma plataforma de baixíssimo consumo que executa apps de usuário com apenas uma CPU Seiko S1C88 de 8 bits e 2 KB de RAM
- Os pinos laterais são USB, permitindo sincronizar dados como compromissos, e com o SDK da Timex é possível compilar
cc helloworld.ce enviar diretamente para o relógio - Devido à RAM limitada, um WatchApp tem uma estrutura em que o código é substituído por unidade de state, usando também APIs para código comum, variáveis e dados persistentes
- O kernel cuida de tarefas de baixo nível como entrega de eventos, timers, bipes, rolagem do display, acesso ao banco de dados e controle da coroa e da luz de fundo
- Embora seja um dispositivo descontinuado e difícil de conseguir, o simulador Virtual Datalink, junto com a documentação pública e códigos de exemplo, permite desenvolver sem precisar resetar o relógio real a todo momento
Uma plataforma de desenvolvimento dentro de um pequeno relógio
- O Timex m851 é um relógio digital com CPU Seiko S1C88 de 8 bits, 48 KB de ROM, 2 KB de RAM e display principal de matriz de pontos 42x11
- A CPU foi projetada para operação de baixíssimo consumo, podendo funcionar por 3 anos com uma única bateria
- Os pinos laterais são USB e são usados para sincronizar dados como compromissos com o relógio
- Há a biblioteca libdlusb para Linux
- Usando o SDK fornecido pela Timex, é possível compilar aplicações com
cc helloworld.ce enviá-las para o relógio - As ferramentas básicas têm a forma de assistentes da era do Windows XP, mas internamente funciona uma toolchain da família UNIX
Exemplo de WatchApp e ecossistema existente
- O exemplo de hello world e o
Makefilepodem ser vistos no repositório taviso/timex - Vários WatchApps, como jogos, utilitários e ferramentas, foram criados para essa plataforma
Estrutura de um WatchApp: state e mode
- Uma aplicação é dividida em states; quando o state muda, o código ativo atual é descartado e um novo código é carregado
- O app pode usar até cerca de 30 KB de código ou dados, mas há apenas cerca de 2 KB de RAM
- Não há paginação e não é possível manter todo o código na RAM, por isso a estrutura em states é necessária
- Existe um espaço de código comum usado por todos os states, e também há uma API de banco de dados para espaço de variáveis e dados persistentes
- Alguns dos states iniciais são reservados para tratamento comum de eventos, e os demais podem ser usados pelo app como quiser
- mode corresponde à aplicação em primeiro plano
- Normalmente um app fornece um mode, mas também pode adicionar tarefas em segundo plano ou tarefas periódicas
- Ao solicitar uma troca de mode com
coreRequestModeChangeNext();, o próximo app obtém o controle
Tratamento de eventos e serviços do kernel
- Cada state precisa de um manipulador de eventos
- Os eventos incluem entrada em um state, puxar ou recolocar a coroa, girar a coroa, pressionar botões e entrada do botão de mode
- Eventos desnecessários podem ser ignorados
- O kernel cuida do hardware e do despacho de eventos, além de oferecer vários serviços
- Timers
- Geração de tons e bipes
- Rolagem do display
- Acesso a registros do banco de dados
- Configuração da coroa
- Controle da luz de fundo
- O código de exemplo usa serviços do kernel como
lcdClearDisplay()elcdDispBannerMsg()para exibir a mensagem de banner"hello!"
Ambiente de depuração que reduz resets
- Como não há proteção de memória, um app pode sobrescrever a memória do kernel
- O kernel precisa informar ao watchdog a cada 2 segundos que está vivo; se não houver essa notificação, o watchdog reseta o relógio
- Ao executar cálculos pesados, é preciso atualizar o watchdog com
hwResetWatchdog();
- Ao executar cálculos pesados, é preciso atualizar o watchdog com
- Virtual Datalink é um simulador open source de terceiros
- Fonte
- É exclusivo para Windows e foi escrito em Delphi
- Oferece breakpoints condicionais, disassembler, estado salvo, análise de recursos e análise de energia
Como obter um dispositivo descontinuado e documentação de referência
- O Timex m851 foi descontinuado há muito tempo e está cada vez mais difícil de encontrar
- Era possível encontrar no eBay unidades que podiam ser usadas como novas apenas trocando a bateria
- Se não houver cabo, é possível aproveitar o fato de ele usar a pinagem USB Type-A padrão e um conector incomum para usar um cabo USB antigo com garras jacaré
- O Timex T5G751 também usa o mesmo conector e, por ser relativamente mais fácil de encontrar, pode ser aproveitado para obter um cabo
- Uma variante do m851 chamada “dress edition” tem as mesmas especificações em uma carcaça diferente, e às vezes aparece anunciada com outro número de modelo
- Documentação de referência
- Design Guide: o documento mais importante, e bem escrito
- CPU manual: manual da CPU
- Manual da toolchain
- API reference: contém a lista de serviços fornecidos pelo kernel
1 comentários
Opiniões do Hacker News
Uma das partes mágicas é que o SoC da Epson (PN S1C88349) é absurdamente econômico: ao operar no modo de baixo consumo de 32 kHz, consome apenas 9 microampères
Faz pensar em quanta coisa dá para fazer com um orçamento de 32.000 ciclos por segundo
Além disso, ele inclui 48K de ROM, 2K de RAM, 3 timers, UART e até conversor A/D
[1] https://global.epson.com/products_and_drivers/semicon/pdf/id...
Chips da Seiko-Epson, junto com chips EM-Swatch e OKI-Casio, eram usados em relógios, calculadoras, termômetros e dispositivos baratos de LCD segmentado de baixo consumo, que precisavam funcionar por anos com uma única bateria tipo botão
Calculadoras e termômetros digitais com mais de 15 anos também usam esses chips Seiko-Epson e ainda funcionam com a bateria tipo botão de 1,5 V original. Considerando a autodescarga natural das baterias de lítio ao longo do tempo, é algo bem impressionante
O tamanho binário de muitos apps móveis atuais é maior do que sistemas operacionais e aplicações inteiros do passado que faziam coisas muito úteis
Dá medo pensar para onde isso vai, e parece improvável que alguém ou alguma coisa puxe o freio
Se não me engano, mesmo incluindo coisas como vazamento do interruptor de energia, ficava nominalmente abaixo de 100 nA, o que é realmente incrível
É um microcontrolador de 4 bits(!) a 32 KHz, com 6.144 palavras de ROM de 12 bits(‼), 640 palavras de RAM interna de 4 bits e um framebuffer de 160 palavras de 4 bits para o driver LCD integrado. Dá até para fazer double buffering
É um chip realmente lindo. Há cerca de um ano fiz um emulador em TypeScript, mas ainda não coloquei no GitHub. Se houver interesse, posso publicar, e ele também consegue executar o firmware não modificado do Tamagotchi
Na prática, é EEPROM, e parece um pouco com memória Flash
Se quiser algo com um pouco mais de recursos, vale ver também o Bangle.js
A vantagem é que tem Bluetooth, GPS, acelerômetro, motor de vibração e tela colorida. A desvantagem é que a bateria dura bem menos que 3 anos
[0] https://banglejs.com/
Ele apresenta o Bangle.js 2 como uma alternativa aos smartwatches caros, destacando “tela sempre ligada legível à luz do sol, 4 semanas de bateria, flexibilidade total e controle total sobre seus dados”
Eu tive esse relógio uns 15 anos atrás e dava para registrar várias coisas nele
Eu colocava coisas como a sala da próxima aula, os horários de ônibus dos pontos que eu usava com frequência e as fases da lua
Antes dos smartphones, consultar o horário do ônibus no relógio de pulso fazia a gente parecer o James Bond :)
Seria bom se ainda fabricassem relógios assim. Com esse nível de consumo de energia, acho que daria para usar praticamente de forma contínua com recarga solar
Mais de 20 anos atrás, eu costumava salvar horários de ônibus como rascunhos de SMS em um celular Siemens
Uma abordagem mais moderna para um relógio hackeável poderia ser esta
https://github.com/sharandac/My-TTGO-Watch
Descobri isso enquanto pesquisava para tentar fazer um iPod Nano 7G DIY com uma placa de desenvolvimento LILYGO T5 E-Paper
Produto: https://www.aliexpress.com/item/1005002474854718.html
Repositório de código: https://github.com/Xinyuan-LilyGO/LilyGo-T5-Epaper-Series
Se eu tivesse mais tempo e habilidade com Arduino, acho que isso poderia ter sido um ótimo substituto para o iPod Nano 7G ;)
O código padrão quase não funcionava direito, e a bateria durava cerca de 12 horas sem fazer nada. Ainda assim, é mesmo um produto incrível pelo preço para quem gosta de depurar código dos outros
Preenchi algumas lacunas e encontrei configurações para reduzir o consumo de energia, fazendo-o durar cerca de 6 horas em uso “normal”
O código provavelmente está muito melhor agora, mas o orçamento de energia deve estar muito mais perto de um smartwatch da Apple ou da Samsung do que do m851 ultrabaixo consumo no estilo dos anos 80
Se você gosta de experimentar, é um projetinho divertido e vale o preço. Se espera algo para competir com um iWatch, é bem provável que se decepcione
Se “durar 3 anos com uma bateria” é uma grande vantagem, a Casio definitivamente ainda fabrica coisas assim
Basta procurar por “Casio MIP display”
Há mais informações sobre a série Timex Datalink aqui
https://en.m.wikipedia.org/wiki/Timex_Datalink
Será que daria para reproduzir isso com um LCD IPS moderno?
Tomara que mais relógios e wearables sejam feitos com esses chips de baixo consumo de 8 bits e que possam ser hackeados por terem pinos de dados expostos.
Para um relógio, o ponto essencial é ter 3 anos de bateria. Se eu tiver que me preocupar em carregar um relógio, para mim já está descartado.
O Swatch que uso agora vem mantendo a hora certa há cerca de 1 ano com a mesma bateria. O problema dos relógios mecânicos baratos é que, se você não tomar cuidado, pode dar corda demais. Então acabo quebrando um a cada poucos anos, mas de qualquer forma são baratos.
O legal dos dois relógios é que não preciso carregá-los todos os dias. Claro, no caso do relógio de corda, ainda é preciso dar corda.
Isso me faz lembrar de novo que podemos, de fato, ter coisas boas. Desde que exista mercado para elas.
Eu gostaria que houvesse um relógio bem integrado, com baixo consumo de bateria, pouca inconveniência para usar ou trocar a bateria, e que também fizesse sentido em termos de design.
É uma pena que o melhor que conseguimos hoje seja o Sensorwatch [1].
[1] https://www.sensorwatch.net
Edit: o Sensorwatch é ótimo, mas ainda não é um ecossistema.
Fico curioso sobre o que alguém teria vontade de fazer com a placa.
Parece ainda mais simples que o Ez430-chronos da TI, e parece interessante.
Só que 3 anos com uma única bateria não parece tão impressionante. Claro, deve depender de quais apps você usa e carrega, e o fato de ser programável é legal.
[0] https://www.sparkfun.com/products/retired/10019
Em 2018, perdi um Casio F91 e o encontrei na semana passada enquanto arrumava as coisas para uma viagem de canoa. A hora e a data estavam apenas alguns segundos diferentes do Casio F91 que eu estava usando no pulso.
Comprei um há um tempo, mas ele sumiu durante uma mudança. Queria mexer nele de novo.
Edit: ah, você colocou um link em que a página do produto diz “RETIRED”. Sendo um produto da TI, seria estranho se a TI não o descontinuasse justamente quando o mercado começasse a reagir.