- Как он работает кабель Lightning
- В рабстве Lightning
- Что внутри Lightning и почему оригинал — это дорого
- Что происходит внутри Lightning и как он работает
- Американский Firewall против китайских Lightning-подделок
- Важно: почему появляется сообщение «данный аксессуар или кабель не сертифицирован»?
- Чем опасен поддельный Lightning
- Как устроен Apple Lightning
- Что такое Lightning?
- Что такое Tristar и Hydra?
- Что такое HiFive?
- Что такое SDQ и IDBUS?
- Теперь можем начать
- Интерпретация запросов и ответов IDBUS
- HOSTID
- Рукопожатия питания
- Несколько слов об ESN и интерфейсе Tristar I2C
- Подготовка
- Tristar I2C
- Электрические характеристики Tristar
Как он работает кабель Lightning
Внутренний мир непростого аксессуара.
Настоящий бич для владельцев iOS-устройств — Lightning-кабели. Их много, они разные, но выбрать можно далеко не все.
Разберемся в устройстве этого, с виду простого, аксессуара с целым арсеналом секретов.
В рабстве Lightning
Apple никогда не стеснялась в одностороннем порядке придумывать стандарты и пересаживать на них своих пользователей.
Пока производители мобильных устройств прошлой десятилетки уверенно сидели на типе зарядных гнезд DC с самым разным диаметром штекеров, для своих плееров iPod Apple выбрала интерфейс FireWire.
Плавный переход тысяч брендов, выпускающих смартфоны на miniUSB, Apple встретила уникальным 30-пиновым портом в первом iPhone.
Сейчас «единым стандартом» в мире мобильных гаджетов остается разъем microUSB с перспективой замены на USB Type-C. Тем временем на iOS-устройствах прописался Lightning, и при этом надолго.
Найти кабель для подзарядки «обычного смартфона» очень легко. А вот Lightning – не очень. Поэтому среди владельцев Apple-техники принято брать его с собой.
Нишу «запасных», расходных, дорожных кабелей для iPhone и iPad оперативно закрыли китайцы. Вот только одно «но»: подделать их не так просто.
Что внутри Lightning и почему оригинал — это дорого
Понять, почему Apple остается компанией, стоимость аксессуаров которой иногда кажется неоправданно высокой, можно лишь после технической процедуры вскрытия.
Примечание: мы ровно дышим к компании Samsung. Просто сравнение южнокорейского и американского производителя.
Перед нами два оригинальных аксессуара к смартфонам компаний, которые уже несколько лет являются главными конкурентами на рынке мобильных устройств. Стоимость кабеля от Samsung — в районе 500 рублей. Оригинальный Lightning-кабель для iOS-устройств обойдется в 1590 рублей, в 3 раза дороже.
Достанем скальпель и попробуем разобраться, в чём причина такой разницы в цене. Сразу скажу, что пластик Samsung режется очень легко. А клипсу в Lightning взять «голыми руками» не так просто – предусмотрена мощная защита от проникновения.
Добираемся до внутренностей и наблюдаем.
Лучший вариант платы, который вы можете встретить в microUSB, выглядит так:
В худшем случае (и это будет действительно оригинальный кабель, но от другого производителя) не увидите даже выпрямителя напряжения. Просто четыре разноцветных провода с экранированием-оплеткой (на которой тоже нередко экономят).
После мучений по разборке оригинального Lightning-шнурка нас встречает вот такой «внутренний мир»:
И более крупный снимок миниатюрной платы:
Внутри Lightning спрятан полноценный микрокомпьютер, который не только анализирует весь процесс подзарядки iOS-устройства, но и облегчает эксплуатацию аксессуара пользователем.
И если до сегодняшнего дня вы с недоумением смотрели на стоимость оригинального кабеля Lightning – теперь вы знаете, что дело в компонентах и качестве.
Мало аргументов? Двигаемся дальше.
Что происходит внутри Lightning и как он работает
Под защитной металлической крышкой штекера Lightning установлена приведенная выше схема. Разумеется, сейчас мы говорим об оригинале, а проблему китайского ширпотреба затронем немного ниже.
На плате установлены четыре чипа и несколько вспомогательных вычислительных устройств, отвечающих за передачу данных на компьютер и использование кабеля для Data-соединения. После подключения iPhone к зарядному устройству, внутри этой схемы оживают любопытные процессы.
Внутренний мир одного из чипов
Два из представленных чипа очень просты по своей конструкции и состоят всего из нескольких транзисторов, задача которых преобразовывать поступающий сигнал электрического тока в состояние, максимально адаптированное для установленного в смартфоне аккумулятора.
Еще один чип с маркировкой NXP NX20P3 обеспечивает контроль над уровнем текущего состояния батареи, вычисляя накопленный полезный объем заряда.
Установленный в кабель микропроцессор помогает определять и то, какой стороной вы вставляете кабель в разъем устройства.
Стандартная распайка Lightning-кабеля выглядит следующим образом:
И именно тут срабатывает магия Apple. Вам не нужно думать, каким концом устанавливать штекер. За это отвечает и вышеуказанный микропроцессор, и асимметричное размещение контактов.
Т.е. пока вы вставляете шнур, начинка автоматически определяет на какие контакты подавать напряжение.
Всем этим технологиям сопутствуют десятки патентов, которые принадлежат Apple. Но китайской изобретательности нет предела: кабели подделываются с разной точностью и уровнем качества, до соблюдения закона им дела нет.
Поэтому в Apple предусмотрели защиту своих аксессуаров и разработали собственный стандарт сертификации MFI (Made for iPhone/iPad/iPod), а ограничить подключение низкопробных кабелей Lightning решили еще одним, четвертым чипом, установленном на той же миниатюрной плате оригинального шнура.
Американский Firewall против китайских Lightning-подделок
Ненавистный сторонними производителями аксессуаров чип с номером BQ2025. Его без преувеличения можно назвать «пропуском» к недрам гнезда Lightning в iPhone.
Если на неоригинальном кабеле такого чипа нет, iOS-устройство показывает следующее окно:
На этом «недошнурок» можно фактически выбрасывать: он не будет адекватно (или вообще) заряжать девайс, не позволит синхронизировать данные.
Важно: почему появляется сообщение «данный аксессуар или кабель не сертифицирован»?
На чипе BQ2025 есть специальный выделенный цифровой блок постоянной памяти, для изготовления которого используются полупроводники. Его имя — EEPROM. Особенность EEPROM заключается в возможности многократной перезаписи информации (вплоть до миллиона раз).
Объем памяти блока EPROM составляет порядка 64 – 128 бит, но этого вполне достаточно, чтобы туда сохранился уникальный ключ каждого существующего в мире аксессуара для iOS-экосистемы.
В этот блок записывается ключ, позволяющий идентифицировать «оригинальность» – соответствие стандартам Apple и подтверждение наличия официальной сертификации MFI. При подключении ключ на аксессуаре сопоставляется с базой значений на iOS-устройстве. Если такового не найдено, выскакивает сообщение об ошибке и невозможности работы.
Производители поддельных кабелей частично смогли обойти защиту. В качестве альтернативы EEPROM, кустарные фирмы используют эмулятор, в основе которого лежит микроконтроллер 8051. Он обходит защиту Apple, но не является долговечным, отчего кабель резко перестаёт работать с iOS.
Один из 10 вариантов китайского творчества
Любая другая компания стала бы заложником собственной технологии. Подумайте сами. С одной стороны, Apple может в любой момент начать выпуск смартфонов, к которым будут подходить только оригинальные кабели. С другой, на рынке аксессуаров наступит настоящий хаос, а уже приобретенные пользователями оригинальные Lightning станут несовместимыми с новым поколением устройств.
Поэтому хорошо, что Apple делает все порционно. Область EEPROM памяти легко перезаписывается во время очередного обновления iOS посредством приложения iTunes. И очень часто, именно после перепрошивки, китайский Lightning отказывается работать.
Прибавьте к этому DRM-защиту мультимедиа файлов, которую так поддерживает компания, и можете забыть о совместимости несертифицированных аксессуаров для вывода изображения и ретрансляции музыки через порт Lightning.
Еще одна проблема, которая мешает начать производство аксессуаров любому желающему — недоступность и дороговизна схем. Помните описанный выше чип NXP NX20P3? Цена его схемы на черном рынке составляет 2500 долларов!
И для старта производства одной схемы будет явно недостаточно.
Чем опасен поддельный Lightning
Apple задумала систему ключей не просто так. Помимо дохода, подумали и о своей репутации.
Вы часто слышали о взрывающихся смартфонах, лопающихся экранах, потекших аккумуляторах и ударах током при подключении зарядки в среде Android-устройств? Таких случаев масса, на них даже не обращают внимание. Таких ситуаций у Apple-техники – единицы, и каждая вызывает шквал внимания:
Главный вопрос в том, какой аксессуар использовали пострадавшие. В обоих случаях — неоригинальный. Понимаете теперь, почему это так важно?
Где и кто, полагаю, понятно без слов
Нужно смотреть в корень проблемы. Перед покупкой низкокачественного шнурка на китайском сайте подумайте о последствиях. Использование неоригинального Lightning-кабеля может вызвать ряд проблем:
- Он быстро приходит в негодность. Трескается оплетка, появляется люфт штекера.
- Полная потеря совместимости после обновления, описанная выше. Результат — деньги на ветер.
- Хорошо, если iPhone просто не включится. В худшем случае он может загореться или взорваться от перегрева. И, не дай Бог, во время разговора при подключении к сети.
- Срок жизни оригинального кабеля в разы дольше подделки. Экономия? Так только кажется, со временем стоимость поддержки «экосистемы» китайских кабелей превышает таковую у оригинальных.
Короче говоря, оригинал того стоит. И даже если кабель конкретно от Apple по каким-то причинам брать не хочется, всегда можно найти сертифицированную, качественную альтернативу. Иногда даже с интересной «фишкой».
Например: алюминиевый стильный кабель uBear за 2 490 руб; кабель в тканевой оплетке Native Union BELT за 3 990 руб, который не запутается и не завяжется; имиджевый аксессуар от Belkin MIXIT – 2 590 руб, который не стыдно доставать из дорожной сумки; еще один «тканевый» вариант от Maxco Lightning – 2 490 руб.
Источник
Как устроен Apple Lightning
Это моя маленькая статья с описанием (почти) всего, что я знаю об интерфейсе Apple Lightning и связанных с ним технологиях: Tristar, Hydra, HiFive, SDQ, IDBUS и др. Но сначала маленькое предупреждение…
Читайте эту статью на свой страх и риск! Информация основана на большом количестве внутренних материалов AppleInternal (утечка данных, схем, исходных кодов), которые я прочёл по диагонали. И, конечно, на моих собственных исследованиях. Должен предупредить, что я никогда раньше не проводил подобных исследований. Таким образом, эта статья может использовать неправильные или просто странные термины и оказаться частично или полностью неправильной!
Прежде чем углубиться, давайте кратко разберёмся в терминах:
Что такое Lightning?
Lightning — это цифровой интерфейс, используемый в большинстве устройств Apple iOS с конца 2012 года. Он заменил старый 30-контактный разъём.
На картинке выше гнездо разъёма, а на картинке ниже его распиновка:
Пожалуйста, обратите внимание, что в разъёме контакты с обеих сторон коннектора не соединены в одном и том же порядке. Таким образом, хост-устройство должно определить ориентацию кабеля, прежде чем что-то делать.
Хотя это не всегда так. У многих аксессуаров Lightning, которые мне попадались, в разъёмах зеркальная распиновка.
Что такое Tristar и Hydra?
Tristar — это интегральная схема, встроенная в каждое устройство с гнездом разъёма Lightning. По сути, это мультиплексор:
Кроме всего прочего, его основная цель состоит в том, чтобы соединяться со штекерным разъёмом Lightning, как только он подключён — определять ориентацию, Accessory ID и надлежащим образом маршрутизировать внутренние интерфейсы, такие как USB, UART и SWD.
Hydra — это новый вариант Tristar, используемый начиная с iPhone 8/X. Видимо, наиболее существенным изменением является поддержка беспроводной зарядки, но это ещё предстоит проверить:
Мне известны пять основных вариантов Tristar/Hydra:
- TI THS7383 — Tristar первого поколения в iPad mini 1 и iPad 4
- NXP CBTL1608A1 — Tristar первого поколения в iPhone 5 и iPod touch 5
- NXP CBTL1609A1 — таинственный Tristar первого поколения в iPod nano 7 — источник
- NXP CBTL1610Ax — TriStar второго поколения, используется начиная с iPhone 5C/5S и, по-видимому, во всём остальном, что не поддерживает беспроводную зарядку. Существует несколько поколений (x — номер поколения)
- NXP CBTL1612Ax — Hydra используется с iPhone 8/X и, видимо, во всём остальном, что поддерживает беспроводную зарядку. Существует несколько поколений (x — номер поколения)
С этого момента я буду использовать только термин TriStar, но имейте в виду, что он также означает Hydra, поскольку они очень похожи в большинстве аспектов, которые будут рассмотрены в этом тексте.
Что такое HiFive?
HiFive — это дочерний интерфейс Lightning, то есть штекерный разъём. Он также содержит логический элемент — этот чип известен как SN2025/BQ2025.
Что такое SDQ и IDBUS?
Эти два термина часто считают своего рода синонимами. Для удобства я буду использовать только термин IDBUS, так как он кажется мне более правильным (и именно так технология называется в спецификации THS7383).
Итак, IDBUS — это цифровой протокол, используемый для коммуникации между Tristar и HiFive. Очень похож на протокол Onewire.
Теперь можем начать
Давайте прослушаем коммуникации Tristar и HiFive. Возьмите логический анализатор, переходную плату Lightning с соединением для гнезда и штекерного разъёма, какой-нибудь аксессуар (обычный кабель Lightning-to-USB отлично подойдёт) и, конечно, какое-нибудь устройство с портом Lightning.
Сначала подключите каналы логического анализатора к обеим линиям ID переходной платы (контакты 4 и 8) и подключите плату к устройству, но пока не подключайте аксессуар:
Сразу после этого начните выборку (подойдёт любая частота от 2 МГц и выше). Вы увидите что-то вроде этого:
Как видете, Tristar опрашивает каждую линию ID по очереди — одну за другой. Но поскольку мы не подключили никакого аксессуара, опрос явно провалился. В какой-то момент устройство устанет от этого бесконечного потока отказов и остановит его. А пока давайте разберёмся, что именно происходит во время опроса:
Сначала мы видим длинный интервал (около 1,1 миллисекунды), когда просто уровень высокий, но больше ничего не происходит:
Видимо, это время используется для зарядки внутреннего конденсатора HiFive — энергия от него будет затем использоваться для питания внутренних логических чипов.
Гораздо интереснее то, что происходит потом:
Очевидно, это поток каких-то данных. Но как его интерпретировать? Как расшифровать? Давайте виртуально разделим его на минимальные значимые части — то, что я называю словами:
По сути слово — это сочетание падения-подъёма-падения:
- Содержательный этап — интервал, который определяет значение слова
- Этап восстановления — интервал, который, видимо, требуется для обработки содержательной стадии на стороне получателя и/или для подготовки следующего слова на стадии отправки
Вот таблица известных слов с их интервалами для обоих этапов, которые мы обсуждали выше (все единицы измерения в микросекундах):
Содержание | Восстановление | ||||
---|---|---|---|---|---|
Слово | Min | Typ | Max | Min | Typ |
BREAK | 12 | 14 | 16 | 2.5 | 4.5 |
WAKE | 22 | 24 | 27 | 1100? | |
ZERO | 6 | 7 | 8 | 3 | |
ONE | 1 | 1.7 | 2.5 | 8.5 | |
ZERO и STOP* | 6 | 7 | 8 | 16 | |
ONE и STOP* | 1 | 1.7 | 2.5 | 21 |
* STOP используется, когда это последний бит в байте
Используя приведённую выше таблицу теперь мы можем построить простой декодер протокола:
Как видите, сначала хост посылает BREAK — когда Tristar хочет отправить новый запрос, хост всегда начинает с этого слова. Затем наступает этап передачи данных. Пожалуйста, обратите внимание, что у последнего (8-го) бита в байте более длительный этап восстановления. Когда этап передачи данных заканчивается, хост отправляет ещё один BREAK. Затем дочернее устройство должно отправить ответ (после задержки не менее 2,5 микросекунд — см. таблицу). Tristar будет ждать ответа около 2,2 мс. Если ответ не выдан в этот промежуток времени, Tristar попытается опросить другую линию ID.
Теперь давайте рассмотрим этап данных на примере выше — 0x74 0x00 0x02 0x1f :
- 0x74 — тип запроса/ответа. Всегда чётный для запроса и нечётный для ответа (тип запроса +1)
- 0x00 0x02 — фактические данные. Может быть пустым
- 0x1f — это CRC8 как байта типа запроса, так и всех данных (полином — 0x31, начальное значение — 0xff)
Давайте подключим к нашей установке какой-нибудь аксессуар и посмотрим, что произойдёт. Я буду использовать оригинальный кабель Lightning-to-USB от Apple:
И вот что появляется на IDBUS после запроса 0x74:
HiFive ответил! И если вы прокрутите дальше, то увидите много других пар запрос/ответ:
Некоторые запросы не нуждаются в ответе:
Интерпретация запросов и ответов IDBUS
Самый важный запрос IDBUS — это 0x74, он используется для двух целей: чтобы приказать HiFive включить полное напряжение и силу тока (в случае, если оно поддерживается аксессуаром), спросить его о конфигурации контактов, которые поддерживаются кабелем, и некоторых других метаданных.
О том, как кодируются данные ответа 0x75, известно не так уж много. Но некоторые биты доступны в старой спецификации Tristar:
Первый байт данных ответа 0x75
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
ACCx | Dx | DATA[43:40] |
ACCx[1:0] | ACC1 | ACC2 | HOST_RESET |
---|---|---|---|
00 | Hi-Z (IDBUS) | Hi-Z | Hi-Z |
01 | UART1_RX | UART1_TX | Hi-Z |
10 | JTAG_DIO | JTAG_CLK | Hi-Z |
11 | Hi-Z | Hi-Z | HIGH |
ACCx[1:0] | ACC1 | ACC2 | HOST_RESET |
---|---|---|---|
00 | Hi-Z | Hi-Z (IDBUS) | Hi-Z |
01 | UART1_RX | UART1_TX | Hi-Z |
10 | JTAG_DIO | JTAG_CLK | Hi-Z |
11 | Hi-Z | Hi-Z | HIGH |
Dx[1:0] | DP1 | DN1 | DP2 | DN2 |
---|---|---|---|---|
00 | Hi-Z | Hi-Z | Hi-Z | Hi-Z |
01 | USB0_DP | USB0_DN | Hi-Z | Hi-Z |
10 | USB0_DP | USB0_DN | UART1_TX | UART1_RX |
11 | Hi-Z | Hi-Z | Hi-Z | Hi-Z |
Dx[1:0] | DP1 | DN1 | DP2 | DN2 |
---|---|---|---|---|
00 | Hi-Z | Hi-Z | Hi-Z | Hi-Z |
01 | Hi-Z | Hi-Z | USB0_DP | USB0_DN |
10 | USB0_DP | USB0_DN | UART1_TX | UART1_RX |
11 | Hi-Z | Hi-Z | Hi-Z | Hi-Z |
Используя эти таблицы, давайте расшифруем ID нашего кабеля ( 10 0C 00 00 00 00 ) с учётом того, что линия ID найдена на контакте ID0:
Первый байт ответа 0x75 кабеля
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
ACCx | Dx | DATA[43:40] | |||||
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
Таким образом, ACCx — это 00, Это означает, что пин ID0 просто привязан к IDBUS, а Dx = 01 означает, что пины DP1/DN1 настроены как USB0_DP/USB0_DN. Именно то, что мы ожидали от стандартного USB-кабеля.
А теперь давайте перехватим что-нибудь поинтереснее:
Аксессуар | ID (HOSTID = 1) |
---|---|
DCSD | 20 00 00 00 00 00 |
KongSWD (без работающего Astris) | 20 02 00 00 00 00 |
KongSWD (с работающим Astris) | A0 00 00 00 00 00 |
KanziSWD (без работающего Astris) | 20 0E 00 00 00 00 |
KanziSWD (с работающим Astris) | A0 0C 00 00 00 00 |
Haywire (HDMI) | 0B F0 00 00 00 00 |
Зарядка UART | 20 00 10 00 00 00 |
Lightning на 3,5 мм/EarPods с Lightning | 04 F1 00 00 00 00 |
Вот полный (?) список запросов IDBUS от @spbdimka:
Совет №1: вы можете легко получить свойства аксессуара, включая его идентификатор, используя accctl:
Это внутренняя утилита Apple, поставляемая со сборками NonUI/InternalUI. Но вы можете легко запустить её на любом устройстве после джейлбрейка.
Совет №2: вы можете легко получить конфигурацию контактов кабеля с помощью diags:
Обратите внимание, что эта команда доступна только на iOS 7+.
Совет №3: вы можете легко отслеживать запросы/ответы 0x74/0x75, генерируемые SWD-пробами, установив debug env var, равное 3:
Затем на виртуальном COM от кабеля вы увидите что-то вроде этого:
HOSTID
В одной из таблиц выше можно увидеть упоминание некоего HOSTID. Это 16-битное значение, передаваемое в запросе 0x74. Похоже, что оно также влияет на ответ HiFive. По крайней мере, если установить для него недопустимое значение (да, это возможно с diags), HiFive перестаёт с ним работать:
Впрочем, в прошивке KongSWD/KanziSWD есть переменная окружения disableIdCheck, которую вы можете настроить так, чтобы игнорировать недопустимый HOSTID.
Важное примечание: У Kong и Kanzi нет HiFive в качестве выделенного непрограммируемого чипа. Эти аксессуары эмулируют его с помощью микроконтроллера и/или блока FPGA, что позволяет его легко обновлять/перепрограммировать.
В таблице Accessory ID выше можно заметить, что Kong и Kanzi посылают разные ответы в зависимости от того, запускается или нет Astris, это программное обеспечение AppleInternal, предназначенное для отладки с помощью SWD-проб (или зондов). Если вы расшифруете эти ответы с помощью приведённых выше таблиц, то обнаружите, что когда Astris не запускается, зонд будет действовать точно так же, как DCSD — USB на линиях D1 и debug UART на линиях D2. Но когда отладочное программное обеспечение работает, линии ACCID переключаются на SWD.
Но что, если мы хотим запустить Astris после того, как зонд уже подключён к устройству? Что будет делать кабель? Как он будет переключаться между линиями ACC на SWD? Вот тут-то WAKE и вступает в игру! HiFive (или устройство, которое его эмулирует) может инициировать WAKE — и процесс перечисления IDBUS начнётся снова: Tristar отправит запрос 0x74, Kong/Kanzi ответит новым идентификатором, Tristar подтвердит его и направит линии ACC на внутренние линии SWD (SoC должен это поддерживать на физическом уровне, конечно).
Рукопожатия питания
Последнее, что я собираюсь рассмотреть — рукопожатия питания (power handshakes). Это алгоритм, основанный на запросах/ответах IDBUS, которые драйверы ядра Tristar используют перед тем, как разрешить зарядку от аксессуара.
Когда кабель Lightning просто где-то лежит, подключённый к зарядному устройству/компьютеру, но не подключённый к устройству, HiFive ограничивает ток на PWR действительно небольшим значением (около 10-15 мА по моим измерениям). Чтобы включить полный ток, запрос 0x74 должен быть выдан Tristar и обработан HiFive. Для SecureROM/iBoot этого достаточно, но при загрузке ядра необходимо сделать дополнительные шаги:
- TriStar выдаёт два запроса 0x70
- Как только второй запрос обработан HiFive и отправлен ответ, он вообще отключает ток примерно на 20 миллисекунд
- По истечении этого времени Tristar выдаёт ещё один запрос 0x70, но с содержанием 0x80 в данных. HiFive обрабатывает его и отвечает
- На этом этапе драйвер ядра, ответственный за Tristar, должен разрешить зарядку
Важное замечание: это та часть, которую я знаю меньше всего. И это одна из тех частей, которые я в основном сам отреверсил. Таким образом, будьте осторожны с этой информацией
Несколько слов об ESN и интерфейсе Tristar I2C
Ещё одна особенность Tristar, о которой я хотел бы рассказать, — ESN. Это маленький блоб, который Tristar хранит в своём EEPROM (на CBTL1610A2 и более поздних версиях). Его можно получить по IDBUS с помощью кабеля Serial Number Reader (или Kanzi, они в основном одинаковые, за исключением разных USB-PID и немного отличающихся корпусов)
Проще говоря, отправив этот блоб на ttrs.apple.com, вы можете получить серийный номер устройства. Этот механизм используется сотрудниками Apple Store/Apple Premium Reseller для извлечения SN с мёртвых устройств (если Tristar ещё жив):
Что происходит на IDBUS при получении ESN, задокументировал @spbdimka:
Подготовка
Процедура «прошивки» ESN на Tristar называется подготовка (provisioning). Она происходит с диагностикой на стороне устройства, через EzLink на принимающей стороне в три этапа.
Вы можете проверить состояние с помощью diags:
… а также получить ESN:
Кстати, у diags вообще богатый набор команд Tristar (доступен, начиная с iOS 7):
Tristar I2C
Tristar доступен на шине I2C (адрес 0x34 для записи, 0x35 для чтения). Именно так diag и драйверы ядра с ним взаимодействуют.
О реестрах публично известно не так уж много. Много информации о самой карте регистра можно получить из утёкшего исходного кода iBoot (только для THS7383 — кажется, обратно совместимого с CBTL1608 — и CBTL1610), но не так много о том, что нужно туда записать, чтобы добиться каких-то интересных результатов.
Ещё одним источником знаний является модуль Tristar из diags (легко извлекаемый через SWD во время его работы). Например, мне удалось отреверсить алгоритмы чтения состояния подготовки и ESN. Затем я реализовал это как дополнение к моей нагрузке для iBoot под названием Lina:
Я также попытался изменить алгоритм записи ESN, но потерпел неудачу — механизм слишком сложный для меня. Однако фрагменты кода от Lina доступны здесь.
Электрические характеристики Tristar
Сам Tristar питается от источника 1,8 В. Линии для IDBUS устойчивы к 3,0 В, согласно моему осциллографу:
Таким образом, без схемы сдвига уровня лучше не пытаться взаимодействовать с IDBUS с помощью устройств, устойчивых к 5 В, как некоторые модели Arduino.
Источник