BookinglyTech News
Software

Ingeniería inversa del chip Mikey: los botones del mando del iPod Classic ya funcionan

Un desarrollador documenta el chip que decodifica el mando en línea de los auriculares del iPod Classic y publica un driver que ya está en revisión upstream como el cambio 7677 de Gerrit.

3 min de lecturaLobsters0 vistas

Rockbox corre en el iPod Classic desde 2011, pero hay una cosa que nunca ha funcionado: los botones del mando en línea de los auriculares con cable de Apple. El chip que los decodifica, al que el firmware de Apple llama Mikey, no tiene documentación pública en ninguna parte. Alguien se ha puesto a ello, ha barrido sus registros sobre el propio dispositivo y ha escrito un driver que ya está en revisión upstream como el cambio 7677 de Gerrit.

Un chip sin papeles

Mikey vive en el bus I2C 0, en la dirección 0x72, tiene 8 registros y hace dos cosas: alimentar el micrófono del auricular y decodificar los botones del mando. Rockbox siempre supo que existía, pero solo lo usaba para subir la tensión de polarización del micro y que funcionara la grabación por jack. El resto quedó como un TODO en el driver de audio en 2017 y nadie lo retomó. La búsqueda previa fue exhaustiva y vacía: no hay driver en freemyipod, no aparecen intentos abandonados en el Gerrit de Rockbox, y buscar "mikey" en el código de GitHub devuelve el chip de sonido de la Atari Lynx y un micrófono azul. macOS trae un AppleMikeyDriver.kext, que confirma que el nombre es real, pero nadie documentó nunca sus tripas.

La ruta fue empírica. Recorrió los 256 valores del registro de modo en el dispositivo hasta dar con el que activa el reporte de botones, 0x2f, y a partir de ahí decodificó los eventos. El play/pause ya lo tenía de una sesión anterior, escribiendo 7 en el registro 0 y leyendo el registro 4. El volumen era un muro. Su teoría de un protocolo serie con interrupción en GPIO E6 resultó falsa en todos los detalles: esa interrupción no se disparó ni una vez en todo el proyecto.

La sabiduría de los antiguos

Solo había un hilo del que tirar: un post de Hackaday de febrero de 2010 sobre David Carne, que hizo ingeniería inversa del mando de los auriculares del iPod shuffle 3G. Su web está muerta, pero un espejo en la wiki de tinymicros.com conserva el writeup y el repositorio reverse-shuffle mantiene la reimplementación en Arduino del handshake del accesorio.

Los datos de Carne tumbaron la hipótesis. El mando es mucho más tonto de lo que parecía: el botón central es un cortocircuito de la línea del micrófono; volumen arriba es una carga resistiva estática que baja esa línea de ~2,08 V a ~1,68 V, y volumen abajo la deja en ~1,52 V. Lo único con algo de lógica es un chirp ultrasónico de identificación que sale 8,1 ms después del encendido (1,5 ms a 280 kHz y luego 4,6 ms a 244 kHz), al que el reproductor responde con un pulso ACK de 4,8 ms. Identifica; no cifra nada.

Y el hardware miente, que es lo que no cuenta ninguna documentación: el motor de eventos del chip se duerme a los cinco segundos y reporta las pulsaciones 1,8 segundos tarde.

Quien no quiera leer la historia, tiene una imagen de Rockbox precompilada con el driver, ipod6g-mikey-v1. Funciona en el Classic 6G y en el 7ª generación, y da por hecho que el iPod ya arranca Rockbox con el bootloader instalado. Se descomprime sobre la raíz del disco en modo disco y reemplaza los ficheros de .rockbox sin tocar ajustes, temas, base de datos ni música. No toca el bootloader, así que volver atrás es borrar .rockbox y descomprimir una build oficial. Cuando el cambio se fusione, el autor recomienda justamente eso: volver a las diarias oficiales.