Как оживить кнопки наушников на iPod Classic: реверс-инжиниринг чипа Mikey

· Технологии
Энтузиаст расшифровал недокументированный контроллер наушников iPod Classic и написал драйвер для Rockbox — теперь работают все три кнопки пульта на проводных «яблочных» затычках.

cover.svg

Владелец iPod Classic седьмого поколения давно перешёл на прошивку Rockbox, но пульт на проводных наушниках Apple — кнопка воспроизведения и качелька громкости — в ней никогда не работал. В исходниках так и висел комментарий TODO: определять аксессуар в разъёме и поддерживать кнопки пульта. Rockbox для этого семейства iPod существует только потому, что добровольцы с 2011 года разбирали недокументированное железо Apple вслепую; до пульта наушников просто ни у кого не дошли руки. Автор решил довести дело до конца.

Чип, о котором нет ни строчки

За разъём наушников отвечает отдельный контроллер, который прошивка Apple зовёт «Mikey». Он висит на шине I2C по адресу 0x72, имеет восемь регистров и занимается двумя вещами: питает микрофон гарнитуры и расшифровывает нажатия кнопок пульта. Публичной документации на него нет нигде. Поиск по freemyipod, Gerrit самого Rockbox, GitHub и старым проектам вроде openiBoot не дал ничего.

Единственной зацепкой оказался разбор пульта iPod shuffle 3G, сделанный Дэвидом Карном ещё в 2010 году. Сайт автора давно мёртв — прямо как в комиксе xkcd про «мудрость древних», где единственный нашедшийся форумный ответ гласит «уже разобрался». Но на этот раз копия в вики-зеркале и репозиторий на GitHub сохранили записи.

Кнопки оказались аналоговыми

Выводы Карна разрушили теорию о хитром последовательном протоколе. Всё оказалось проще: центральная кнопка — это короткое замыкание линии микрофона, а громкость — резисторы, проседающие напряжение до определённых уровней. «Умная» часть — единственный ультразвуковой сигнал-идентификатор при включении, а вовсе не DRM.

Подключить отладчик к разъёму нельзя, поэтому автор встроил в отладочное меню Rockbox экран, который каждые 20 мс опрашивал все восемь регистров и писал изменения в лог. Автоматический перебор прогнал регистр 0 через все 256 значений — и при значении 0x2f чип начал чётко и повторяемо сообщать о нажатиях. Разбором логов трёх проходов помогал ИИ, но каждый вывод проверялся на живом устройстве.

Железо врёт

Самым интересным оказалось то, что «движок событий» чипа засыпает: спустя примерно пять секунд простоя нажатие фиксируется мгновенно, а отпускание — с опозданием на 1,7–1,8 секунды. Победить это дебаунсом невозможно, поэтому центральная кнопка теперь работает только «в клик», без долгих нажатий.

Итог — драйвер, отправленный на ревью в Gerrit как изменение 7677: один коммит, восемь файлов, 318 строк. Работают все три кнопки на железе 2009 года. Готовую сборку автор выложил отдельно. TODO из audio-6g.c наконец удалён.


Источник: Lobsters

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.