Кабель apple lightning что это
Как устроен 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:
Что такое 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 :
И вот что появляется на IDBUS после запроса 0x74:
HiFive ответил! И если вы прокрутите дальше, то увидите много других пар запрос/ответ:
Некоторые запросы не нуждаются в ответе:
Интерпретация запросов и ответов IDBUS
Самый важный запрос IDBUS — это 0x74, он используется для двух целей: чтобы приказать HiFive включить полное напряжение и силу тока (в случае, если оно поддерживается аксессуаром), спросить его о конфигурации контактов, которые поддерживаются кабелем, и некоторых других метаданных.
О том, как кодируются данные ответа 0x75, известно не так уж много. Но некоторые биты доступны в старой спецификации Tristar:
Первый байт данных ответа 0x75
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 кабеля
Таким образом, 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 этого достаточно, но при загрузке ядра необходимо сделать дополнительные шаги:
Несколько слов об 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.
Выбор качественного недорогого кабеля Lightning для зарядки вашего любимого iPhone и iPad
Цирк-шапито возвращается! В прошлый раз он приезжал к вам с кабелями micro-USB. Но пользователи и адепты истинной веры были расстроены, что в цирковых представления не участвовали кабели Lightning для устройств компании Apple. Только сегодня и впервые в рунете шестнадцать кабелей-артистов покажут вашим iPhone, iPad и iPod представление с конями. После представления кого-то захлестнёт гордость, а кто-то выбросить свой кабель в мусорное ведро от злости, но равнодушным никто не уйдёт.
Зайдём издалека… Права на разъём Lightning принадлежат компании Apple. Сторонние производители легально не могут просто взять и выпустить кабель с таким разъёмом и продавать его в дальнейшем. Для этого нужно получить авторизацию MFi Manufacturing Licensees от Apple, выполнив ряд требований. Более того, производитель должен отчислять компании Apple 4$ за каждый разъём Lightning, т.е. кабель. Получается, что сертифицированный MFi (Made for iPod, Made for iPhone, Made for iPad) кабель не может стоить дешевле 4$.
В продаже есть как сертифицированные, так и несертифицированные кабели. Более того, рынок полон подделок под самые популярные бренды (например, Apple, Belkin и пр.).
С несертифицированными кабелями Lightning есть ещё один нюанс. В разъём Lightning встроен чип аутентификации, с помощью которого компания Apple пытается бороться с несертифицированными аксессуарами. Раньше можно было столкнуться с тем, что кабель переставал работать после обновления iOS, устройство сообщало о несертифицированном аксессуаре. Но китайские производители давно уже научились обходить эту «проблему», подобные сообщения стали редкостью. В обзоре мы обязательно это проверим.
В обзоре мы не сможем протестировать все существующие кабели, их сотни или тысячи. Но приблизительную картину рынка составить получится. Ещё попробуем сформулировать общий подход к покупке кабелей Lightning.
Оригинальный кабель от Apple (MFi)
Небольшая рекомендация по покупке этого кабеля. Это самый подделываемый Lightning кабель. Я не удивлюсь, если подделок продаётся больше, чем оригинальных кабелей. Продавцы на eBay с удовольствием продадут вам такой кабель за 3$ в фирменной упаковке, учитывая, что в официальном магазине Apple он стоит 19$. Покупать такой кабель нужно только в авторизованном магазине, чтобы снизить риск покупки подделки.
Оригинальный кабель от Apple после пары лет активного использования (MFi)
Один из самых дешевых кабелей с Aliexpress
С похожим кабелем мы уже сталкивались в предыдущем обзоре, тогда это был micro-USB кабель CN4 — один из худших кабелей по результатам теста.
Кабель KALUOS (MFi)
Кабель Belkin (MFi)
Что есть, то есть. Будем называть этот кабель «Belkin».
Кабель Lemfo (MFi)
Кабель от YourCharger
Кабель SNOWKIDS (MFi)
Кабель Nillkin
Тройной кабель
Кабель ESK (MFi)
Кабель Biaze (MFi)
Просто дешевый кабель №1
Просто дешевый кабель №2
Длинный дешевый кабель
Кабель micro-USB LG и переходник Lightning
Тест выходной мощности
В тесте будем использовать зарядное устройство Tronsmart TS-UC5PC. Это качественное многопортовое зарядное устройство недавно участвовало в битве зарядных устройств.
С помощью нагрузочного модуля (мощность рассеивания 10 Вт) будем проверять выходную мощность у кабелей. К зарядному устройству подключим кабель. К концу кабеля подключим переходник Lightning — micro-USB. Переходник подключим к тестеру, который имеет micro-USB разъём. Этот тестер не лучший, но позволяет использовать минимальное количество переходников. К самому тестеру подключим нагрузочный модуль.
Переходник Lightning — micro-USB увеличит сопротивление, но для нас это не важно, т.к. все кабели тестируются при одинаковых условиях.
Результаты теста покажут, какие кабели имеют меньшее общее сопротивление (сами провода, разъёмы, пайка).
Подключим нагрузочный модуль к зарядному устройству напрямую.
Теперь подключим поочередно кабели и сделаем замеры.
Apple: 4,52 В, 1,69 А, 7,64 Вт.
Apple U: 4,41 В, 1,65 А, 7,26 Вт.
RED: 3,6 В, 1,34 А, 4,82 Вт.
Belkin: 4,18 В, 1,57 А, 6,56 Вт.
YourCharger: 4,29 В, 1,6 А, 6,86 Вт.
Nillkin: 4,40 В, 1,64 А, 7,22 Вт.
Lemfo: 4,54 В, 1,69 А, 7,67 Вт.
KALUOS: 3,95 В, 1,47 А, 5,8 Вт.
Biaze: 4,21 В, 1,57 А, 6,60 Вт.
Snowkids: 4.61 В, 1,72 А, 7,93 Вт.
Fake 3: 3,2 В, 1,19 А, 3,81 Вт.
Тройной: 4,51 В, 1,68 А, 7,58 Вт.
ESK: 4,20 В, 1,56 А, 6,55 Вт.
Fake 1: 3,69 В, 1,37 А, 5,06 Вт.
Fake 2: 4,09 В, 1,52 А, 6,22 Вт.
LG: 4,38 В, 1,63 А, 7,14 Вт.
Отсортируем по выходной мощности и сведём в единую диаграмму. Больше — лучше.
Замеры силы тока при зарядке iPad
Будем использовать iPad mini (третьего поколения) и замерять силу тока на выходе из зарядного устройства. iPad почти разряжен. В идеальной ситуации он должен потреблять ток силой 2 А.
Замеры силы тока при зарядке батарейного блока
Будем использовать разряженный батарейный блок Yoobao и переходник Lightning — micro-USB.
Тест совместимости
Я планировал составлять таблицы, но надобности не возникло. За все время тестирования ни с одним из кабелей не возникло проблем. Какой бы стороной разъёма я их не подключал к зарядному устройству, ни iPhone 6, ни iPad не сообщали о том, что подключен несертифицированный аксессуар. На устройствах была установлена iOS 9.2. То же самое было с компьютером. iPhone и iPad прекрасно определялись в iTunes и позволяли синхронизировать данные. Исключение только кабель YourCharger, с ним компьютер не видел устройства, т.к. кабель предназначен только для зарядки.
Выводы
Из нашего теста только 4 кабеля из 16 обеспечивают силу тока предельную для iPad mini. Наши герои: Apple (MFi), Snowkids (MFi), Lemfo (MFi), тройной кабель.
Гарантирует ли наличие логотипа MFi, что вы получите кабель максимального качества, который обеспечит зарядку устройства с предельной силой тока? Не гарантирует, но шансы приобрести качественный кабель повышаются.
Гарантируют ли отсутствие сертификации MFi возникновение проблем с зарядкой или передачей данных? Абсолютно все кабели из обзора без проблем заряжали iPad и iPhone с iOS 9.2 без каких-либо сообщений о несертифицированных аксессуарах. Абсолютно все кабели из обзора обеспечивали подключение к персональному компьютеру для передачи данных без предупреждений.
Если вам нужен кабель и вы готовы легко расстаться с 1500 рублей, то спокойно покупайте оригинальный кабель Apple в любом авторизованном магазине. Вы получите отличное качество (на пару лет, пока он опять не надорвётся) без компромиссов.
Если вы хотите купить кабель подешевле, то общие рекомендации к покупке следующие (если вы чётко не знаете, какой кабель купить):
— на упаковке должен присутствовать логотип MFi (Made for iPod, Made for iPhone, Made for iPad)
— убедитесь, что бренд есть в базе Apple
— кабель должен стоить дороже 5$ (с учетом отчислений и качественных компонентов)
Кабель Snowkids является абсолютным лидером в обзоре. Он превзошёл по измеренным характеристикам все кабели в обзоре, в том числе и оригинальный кабель от Apple. С этим кабелем вы сможете заряжать любое устройство от Apple с предельной выходной мощностью, а с переходником легко сможете заряжать любые устройства без существенных потерь. Качество материалов кабеля отличное. Длина составляет 1 метр 30 сантиметров, что длиннее большинства кабелей Lightning. Есть «липучка» для укладки кабеля. Купить его можно на площадке JD за 10,5$ с экспресс доставкой до двери в Россию. Я не любитель JD (если кто ещё помнит, как я воевал с ними по поводу утечки личных данных пользователей), но сейчас с купоном jd558, этот кабель можно купить всего за 2,5$. Вы будете жалеть, если не воспользуетесь этой возможностью.
Если вам нужны универсальность, приемлемое качество при самой низкой цене, то возьмите качественный кабель micro-USB кабель LG из предыдущего обзора, он стоит от 2$, и самый просто несертифицированный переходник Lightning дешевле 1$ (я встречал лоты по 3 штуки за 1$). Есть жалобы, что такие переходники хрупкие и часто ломаются, имейте это в виду.
Если вам нужен длинный кабель, то ситуация плачевная. Более-менее в тесте справился лишь кабель YourCharger, но просадка существенная. Учитывая его стоимость, его можно рекомендовать.
Конечно, стоит упомянуть «копеечный» тройной кабель в тряпичной оплётке. Этот кабель удивил во второй раз. Я им не пользуюсь, но показатели у него превосходный (из-за малой длины). Через него тестовый iPad заряжался с предельной силой тока, как и с качественными MFi кабелями.
Надо упомянуть ещё кабель KALUOS. Он отлично описывается пословицей: «Не всё то золото, что блестит». Если бы мне предложили выбирать по внешнему виду и тактильным ощущениям, то я бы непременно выбрал его. А на деле кабель оказался полным хламом.
Другие мои обзоры можно почитать по ссылке.