- Распиновка разъёма батареи iPhone и замена АКБ | 2 Схемы
- Что такое tristar и hydra?
- Что такое lightning?
- Что такое hifive?
- Что такое sdq и idbus?
- Hostid
- Tristar i2c
- Замена батареи айфона своими руками
- Интерпретация запросов и ответов idbus
- Несколько слов об esn и интерфейсе tristar i2c
- Подготовка
- Подключение батареи iphone 3g, 3s
- Подключение батареи iphone 7, iphone 7 plus
- Подключение батареи iphone 8, iphone 8 plus
- Полярность батареи iphone 5s, 5c, 5g
- Распиновка батареи iphone 4, 4s
- Распиновка батареи iphone 6, iphone 6s
- Рукопожатия питания
- Теперь можем начать
- Электрические характеристики tristar
Распиновка разъёма батареи iPhone и замена АКБ | 2 Схемы
Что такое tristar и hydra?
Tristar — это интегральная схема, встроенная в каждое устройство с гнездом разъёма Lightning. По сути, это мультиплексор:
Кроме всего прочего, его основная цель состоит в том, чтобы соединяться со штекерным разъёмом Lightning, как только он подключён — определять ориентацию, Accessory ID и надлежащим образом маршрутизировать внутренние интерфейсы, такие как USB, UART и SWD.
Hydra — это новый вариант Tristar, используемый начиная с iPhone 8/X. Видимо, наиболее существенным изменением является поддержка беспроводной зарядки, но это ещё предстоит проверить:
Мне известны пять основных вариантов Tristar/Hydra:
С этого момента я буду использовать только термин TriStar, но имейте в виду, что он также означает Hydra, поскольку они очень похожи в большинстве аспектов, которые будут рассмотрены в этом тексте.
Что такое lightning?
Lightning — это цифровой интерфейс, используемый в большинстве устройств Apple iOS с конца 2021 года. Он заменил старый 30-контактный разъём.
На картинке выше гнездо разъёма, а на картинке ниже его распиновка:
Пожалуйста, обратите внимание, что в разъёме контакты с обеих сторон коннектора не соединены в одном и том же порядке. Таким образом, хост-устройство должно определить ориентацию кабеля, прежде чем что-то делать.
Хотя это не всегда так. У многих аксессуаров Lightning, которые мне попадались, в разъёмах зеркальная распиновка.
Что такое hifive?
HiFive — это дочерний интерфейс Lightning, то есть штекерный разъём. Он также содержит логический элемент — этот чип известен как SN2025/BQ2025.
Что такое sdq и idbus?
Эти два термина часто считают своего рода синонимами. Для удобства я буду использовать только термин IDBUS, так как он кажется мне более правильным (и именно так технология называется в спецификации THS7383).
Итак, IDBUS — это цифровой протокол, используемый для коммуникации между Tristar и HiFive. Очень похож на протокол Onewire.
Hostid
В одной из таблиц выше можно увидеть упоминание некоего HOSTID. Это 16-битное значение, передаваемое в запросе 0x74. Похоже, что оно также влияет на ответ HiFive. По крайней мере, если установить для него недопустимое значение (да, это возможно с diags), HiFive перестаёт с ним работать:
Впрочем, в прошивке KongSWD/KanziSWD есть переменная окружения disableIdCheck, которую вы можете настроить так, чтобы игнорировать недопустимый HOSTID. Важное примечание: У Kong и Kanzi нет HiFive в качестве выделенного непрограммируемого чипа. Эти аксессуары эмулируют его с помощью микроконтроллера и/или блока FPGA, что позволяет его легко обновлять/перепрограммировать.
Tristar i2c
Tristar доступен на шине I2C (адрес 0x34 для записи, 0x35 для чтения). Именно так diag и драйверы ядра с ним взаимодействуют.
О реестрах публично известно не так уж много. Много информации о самой карте регистра можно получить из утёкшего исходного кода iBoot (только для THS7383 — кажется, обратно совместимого с CBTL1608 — и CBTL1610), но не так много о том, что нужно туда записать, чтобы добиться каких-то интересных результатов.
Ещё одним источником знаний является модуль Tristar из diags (легко извлекаемый через SWD во время его работы). Например, мне удалось отреверсить алгоритмы чтения состояния подготовки и ESN. Затем я реализовал это как дополнение к моей нагрузке для iBoot под названием Lina:
Я также попытался изменить алгоритм записи ESN, но потерпел неудачу — механизм слишком сложный для меня. Однако фрагменты кода от Lina доступны здесь.
Замена батареи айфона своими руками
При проведении некачественного ремонта симптомы проявятся очень быстро – устройство работает исключительно от зарядки, слишком быстро разряжается, вообще не включается с новой батареей. Но тут скорее проблема в самом аккумуляторе, который ради экономии часто ставят дешёвый китайский. Не уверены какой вам поставили? Значит в следующий раз делайте замены АКБ самостоятельно, согласно приведённой инструкции.
Будьте осторожны, не дергайте слишком сильно коннектор батареи из гнезда, так как гнездо припаяно к центральной плате и дорожки под ним могут отслоиться!
В каких случаях следует заменить аккумулятор на iPhone:
- Полного заряда хватает менее чем на 6 часов при максимальной активности
- iPhone быстро разряжается на холоде
- iPhone выключается на 50% — 20% заряда
- iPhone не заряжается (может показывать яблоко и снова показать низкий заряд)
- iPhone не включается (начиная с модели 5G в 30% случаев виновник именно аккумулятор)
- Иногда АКБ вздувается, тем самым “выдавливает” дисплейный модуль, иногда из-за этого трескается стекло и даже сам дисплей.
- Перед тем как начать разбирать айфон, нужно его выключить.
- Удалите два винта длиной 3.6 mm с головкой под фирменную пятилепестковую отвертку Apple, которые находятся рядом с док-коннектором. Пятилепестковая отвертка Apple используется только для того, чтобы открутить винты!
- Сдвиньте заднюю крышку по направлению к верхнему краю айфона. Крышка отодвинется на 2 мм в верх.
- Отсоедините заднюю крышку от айфона, будьте осторожны, не повредите пластиковую защелку, которая крепит заднюю крышку.
- Удалите заднюю крышку из айфона.
- Удалите следующие винты, которые крепят коннектор батареи к центральной плате: один винт длиной 1.7 mm с головкой Phillips. Один винт длиной 1.5 mm с головкой Phillips
- Пластиковой открывашкой приподнимите коннектор батареи из гнезда центральной платы.
- Начните отсоединять коннектор начиная с нижней стороны коннектора, для этого нужно вставить кончик лопатки между блоком громкоговорителя и металлической крышкой коннектора.
- Коннектор батареи отсоедините вертикально от центральной платы. Не отсоединяйте коннектор, стараясь приподнять его сбоку.
- Обратите внимание на контакт, который находится под давлением винта коннектора батареи. Контакт может ослабнуть, когда вы будете удалять коннектор из гнезда!
- Пластиковой открывашкой отсоедините контакт, находящийся под давлением от коннектора батареи.
- Обратите внимание как расположена небольшая черная защелка заземления, которая находится в районе верхнего винта коннектора батареи. Эта защелка находится в районе верхнего винта коннектора. При замене защелка должна быть выровнена, так как к ней крепится золотая защелка, которая давит на заднюю крышку!
- Будьте осторожны, не дергайте слишком сильно коннектор батареи из гнезда, так как гнездо припаяно к центральной плате.
- Вставьте край открывашки между батареей и стенкой внутреннего корпуса, как показано на рисунке.
- Пластиковой открывашкой двигайтесь вдоль правого края батареи, приподнимите немного батарею, чтобы отсоединить ее от клея, который нанесен на корпус под батареей.
- Потяните пластиковый язычок, чтобы освободить батарею.
- Удалите старую аккумуляторную батарею.
- Вставьте новый АКБ и соберите телефон в обратной последовательности.
Интерпретация запросов и ответов idbus
Самый важный запрос IDBUS — это 0x74, он используется для двух целей: чтобы приказать HiFive включить полное напряжение и силу тока (в случае, если оно поддерживается аксессуаром), спросить его о конфигурации контактов, которые поддерживаются кабелем, и некоторых других метаданных.
О том, как кодируются данные ответа 0x75, известно не так уж много. Но некоторые биты доступны в старой спецификации Tristar:
Первый байт данных ответа 0x75
Конфигурация ACCx, когда ID найден на ID0
Конфигурация ACCx, когда ID найден на ID1
Конфигурация Dx, когда ID найден на ID0
Конфигурация Dx, когда ID найден на ID1
Используя эти таблицы, давайте расшифруем ID нашего кабеля (
10 0C 00 00 00 00
) с учётом того, что линия ID найдена на контакте ID0:
Первый байт ответа 0x75 кабеля
Таким образом, ACCx — это 00, Это означает, что пин ID0 просто привязан к IDBUS, а Dx = 01 означает, что пины DP1/DN1 настроены как USB0_DP/USB0_DN. Именно то, что мы ожидали от стандартного USB-кабеля.
А теперь давайте перехватим что-нибудь поинтереснее:
Вот полный (?) список запросов IDBUS от
Совет №1: вы можете легко получить свойства аксессуара, включая его идентификатор, используя accctl:
Это внутренняя утилита Apple, поставляемая со сборками NonUI/InternalUI. Но вы можете легко запустить её на любом устройстве после джейлбрейка.
Совет №2: вы можете легко получить конфигурацию контактов кабеля с помощью diags:
Обратите внимание, что эта команда доступна только на iOS 7 .
Совет №3: вы можете легко отслеживать запросы/ответы 0x74/0x75, генерируемые SWD-пробами, установив debug env var, равное 3:
Затем на виртуальном COM от кабеля вы увидите что-то вроде этого:
Несколько слов об esn и интерфейсе tristar i2c
Ещё одна особенность Tristar, о которой я хотел бы рассказать, — ESN. Это маленький блоб, который Tristar хранит в своём EEPROM (на CBTL1610A2 и более поздних версиях). Его можно получить по IDBUS с помощью кабеля Serial Number Reader (или Kanzi, они в основном одинаковые, за исключением разных USB-PID и немного отличающихся корпусов)
Подготовка
Процедура «прошивки» ESN на Tristar называется
(provisioning). Она происходит с диагностикой на стороне устройства, через
на принимающей стороне в три этапа.
Вы можете проверить состояние с помощью diags:
… а также получить ESN:
Кстати, у diags вообще богатый набор команд Tristar (доступен, начиная с iOS 7):
Подключение батареи iphone 3g, 3s
Вольтаж на батарейке должен быть 3.8v, чтобы запустить нормально. Заодно проверьте напряжение на 1 и 2, если у вас iPhone 3G, то вольтаж должен быть примерно таким же, как и на 1 и 4, если 3Gs — примерно вполовину меньше.
Подключение батареи iphone 7, iphone 7 plus
В документах по сертификации удалось обнаружить: iPhone 7 Plus — аккумулятор емкостью 2900 мАч, iPhone 7 – батарею на 1960 мАч.
Подключение батареи iphone 8, iphone 8 plus
Новые iPhone 8 и iPhone 8 Plus имеют меньшую емкость аккумуляторов, чем у предыдущей линейки. Так емкость аккумулятора iPhone 8 составляет 1821 мАч, а iPhone 8 Plus имеет самый маленький аккумулятор среди всех моделей iPhone Plus — 2675 мАч. Правда Apple заявляет, что iPhone 8 работает до 14 часов в режиме разговора или до 40 часов при воспроизведении музыки, iPhone 8 Plus — до 21 часа разговора по телефону или до 60 часов воспроизведения музыки.
Полярность батареи iphone 5s, 5c, 5g
Замена аккумулятора этому смартфону потребуется не реже, чем предыдущим моделям (в среднем, АКБ хорошо работает в течение года).
Распиновка батареи iphone 4, 4s
При нормально работающем аккумуляторе должно быть напряжение в районе 3.7-4.2 вольт.
Распиновка батареи iphone 6, iphone 6s
Согласно официальной информации, емкость аккумулятора iPhone 6 Plus равна 2915 mAh, а iPhone 6 — 1810 mAh.
Рукопожатия питания
Последнее, что я собираюсь рассмотреть — рукопожатия питания (power handshakes). Это алгоритм, основанный на запросах/ответах IDBUS, которые драйверы ядра Tristar используют перед тем, как разрешить зарядку от аксессуара.
Когда кабель Lightning просто где-то лежит, подключённый к зарядному устройству/компьютеру, но не подключённый к устройству, HiFive ограничивает ток на PWR действительно небольшим значением (около 10-15 мА по моим измерениям). Чтобы включить полный ток, запрос 0x74 должен быть выдан Tristar и обработан HiFive. Для SecureROM/iBoot этого достаточно, но при загрузке ядра необходимо сделать дополнительные шаги:
- TriStar выдаёт два запроса 0x70
- Как только второй запрос обработан HiFive и отправлен ответ, он вообще отключает ток примерно на 20 миллисекунд
- По истечении этого времени Tristar выдаёт ещё один запрос 0x70, но с содержанием 0x80 в данных. HiFive обрабатывает его и отвечает
- На этом этапе драйвер ядра, ответственный за Tristar, должен разрешить зарядку
Важное замечание: это та часть, которую я знаю меньше всего. И это одна из тех частей, которые я в основном сам отреверсил. Таким образом, будьте осторожны с этой информацией
Теперь можем начать
Давайте прослушаем коммуникации Tristar и HiFive. Возьмите логический анализатор, переходную плату Lightning с соединением для гнезда и штекерного разъёма, какой-нибудь аксессуар (обычный кабель Lightning-to-USB отлично подойдёт) и, конечно, какое-нибудь устройство с портом Lightning.
Сначала подключите каналы логического анализатора к обеим линиям ID переходной платы (контакты 4 и 8) и подключите плату к устройству, но пока не подключайте аксессуар:
Сразу после этого начните выборку (подойдёт любая частота от 2 МГц и выше). Вы увидите что-то вроде этого:
Как видете, Tristar опрашивает каждую линию ID по очереди — одну за другой. Но поскольку мы не подключили никакого аксессуара, опрос явно провалился. В какой-то момент устройство устанет от этого бесконечного потока отказов и остановит его. А пока давайте разберёмся, что именно происходит во время опроса:
Сначала мы видим длинный интервал (около 1,1 миллисекунды), когда просто уровень высокий, но больше ничего не происходит:
Видимо, это время используется для зарядки внутреннего конденсатора HiFive — энергия от него будет затем использоваться для питания внутренних логических чипов.
Гораздо интереснее то, что происходит потом:
Очевидно, это поток каких-то данных. Но как его интерпретировать? Как расшифровать? Давайте виртуально разделим его на минимальные значимые части — то, что я называю словами:
По сути слово — это сочетание падения-подъёма-падения:
Вот таблица известных слов с их интервалами для обоих этапов, которые мы обсуждали выше (все единицы измерения в микросекундах):
* STOP используется, когда это последний бит в байте
Используя приведённую выше таблицу теперь мы можем построить простой декодер протокола:
Как видите, сначала хост посылает BREAK — когда Tristar хочет отправить новый запрос, хост всегда начинает с этого слова. Затем наступает этап передачи данных. Пожалуйста, обратите внимание, что у последнего (8-го) бита в байте более длительный этап восстановления.
Когда этап передачи данных заканчивается, хост отправляет ещё один BREAK. Затем дочернее устройство должно отправить ответ (после задержки не менее 2,5 микросекунд — см. таблицу). Tristar будет ждать ответа около 2,2 мс. Если ответ не выдан в этот промежуток времени, Tristar попытается опросить другую линию ID.
Теперь давайте рассмотрим этап данных на примере выше — 0x74 0x00 0x02 0x1f:
Давайте подключим к нашей установке какой-нибудь аксессуар и посмотрим, что произойдёт. Я буду использовать оригинальный кабель Lightning-to-USB от Apple:
И вот что появляется на IDBUS после запроса 0x74:
HiFive ответил! И если вы прокрутите дальше, то увидите много других пар запрос/ответ:
Некоторые запросы не нуждаются в ответе:
Электрические характеристики tristar
Сам Tristar питается от источника 1,8 В. Линии для IDBUS устойчивы к 3,0 В, согласно моему осциллографу:
Таким образом, без схемы сдвига уровня лучше не пытаться взаимодействовать с IDBUS с помощью устройств, устойчивых к 5 В, как некоторые модели Arduino.
Источник