
Он ловко держал инструменты и припаивал последний проводок. Весь такой пушистый и красивый. Дымок витиевато поднимался вверх, а в енотской разливался приятный запах канифоли…
+++
Однажды нам с Кряком попался симпатичный смартфон. Стало любопытно залезть в него, установить приложения и продолжить эксперименты с ним. Но путь преградил экран с паролем. Потыкав пальцем и осознав, что попыток больше трёх, мы обрадовались, ведь это увеличивало наши шансы. Телефон временно отправился на полку, а Кряк по своим делам. Мне нужно было ещё доделать текущие проекты.
В один из дней меня внезапно посетила интересная мысль.
– Давай сюда, тебе понравится! – зову я пернатого коллегу.
– …?
– Совмещаем интересы: исследуем сенсор, пишем приложение на Питоне и взламываем пароль! Попробуем новое, заодно получим доступ! А?! Круто?
Утёнок явно заинтересовался новой забавой и пошёл за своими инструментами.
Любопытно, что из этого получилось?)

❯ Какой интерфейс?
Просматривая схемы смартфонов, можно заметить, что интерфейс у контроллеров ёмкостного сенсора I2C, есть пара дополнительных линий (RST, INT) и интерфейс стандартный:
Alcatel 6043D.

Explay A351.

Huawei G620.


Huawei-g6.

Документации частенько нет либо она неполная, поэтому требуется обратная разработка.
Пожалуй, Кряк справится – специалист он хороший:

– Печеньки?! ПЕЧЕНЬКИИИ!!!

– Сначала займёмся делом. Мысли рационально.
– Но я всё равно хочу печеньку!
– Ладно.
[Перерыв на обед] …
❯ Изучаем нашу жертву
Точную модель смартфона мы не определили. Какой-то китАйфон 6(S).

Позже удалось выяснить, что при подключении по USB определяется как AQ5001. Видимо, вариантов подделок много.

R7126_MainBoard_V3.0

На задней крышке видим надписи FCC ID BCG-E2816A и Model A1586.

Если поискать по FCC ID, то находится какая-то полезная информация. Но не для нашей подделки, а для оригинала. Экранчик и внутренности там несколько иные.

У нашего пациента контроллер тача на шлейфе.


Focal Tech FT6336DMB. На шлейфе даже подписаны контакты. Удобно!
Есть пусть неполный, но даташит на контроллер. Какая удача!
FT6236 FT6336 FT6436L FT6436_Datasheet
❯ Что интересного в даташите?
FT6X36 – контроллеры ёмкостной сенсорной панели со встроенным 16-битным микроконтроллером. Поддерживают одну точку касания и жест или две точки касания одновременно.

Подключение довольно простое. Данные передаются по обычному I2C интерфейсу.

Контроллер сенсора может работать в нескольких режимах:
- Активный. В этом режиме он активно сканирует сенсорную панель. По умолчанию 60 кадров/с. Можно настроить быстрее или медленнее.
- Слежение (monitor mode). Панель сканируется на пониженной частоте (25 кадров/с, настраивается). В данном режиме большинство алгоритмов отключено. Работает простое определение наличия касания для перехода в активный режим.
- Спящий. Можно пробудить сигналом Reset.
Если у FT6X36 есть полезные данные по касаниям, то он информирует управляющий процессор сигналом прерывания (/INT).
❯ Делаем стендик для работы
Даташит – это хорошо. Но в данном случае в нём описано далеко не всё, что нам нужно. Зато у нас есть рабочее устройство и логический анализатор.
– Кряк, позови монтажника! Пусть проводки к разъёму припаяет.
[Спустя 20 минут в енотской] …

– О, нормально так припаял!

Знакомьтесь. Это наш монтажник Кузя. В школе ему делали замечания по поводу воровства хлеба из столовки, но потом парень взялся за ум и стал прекрасным специалистом.

Получается вот такой удобный стендик:

Анализатор подключаем с помощью гребёнки контактов. Штатная кнопка выключения неудобная, поэтому припаяем свою. Питание удобно подключать с помощью разъёма с ключом. Для перезапуска телефона достаточно просто разъединить и соединить обратно.
Чтобы проводки не отваливались, можно прикрепить их термоклеем. При необходимости он легко удаляется. Если есть такая цель, то можно сделать ещё аккуратнее. В данном случае хочется быстро сделать интересный проект без лишних усложнений.
❯ Записываем и анализируем обмен
Рассмотрим обмен контроллера сенсорной панели с процессором телефона при включении, а потом немного реакцию на касания.
Файлы с записанным обменом можно найти здесь.
Анализ общей картины.

В самом начале мы видим импульсы. Затем большая пауза. Это телефон включается. На курсоре 1 появляется стартовый экран.

На курсоре 2 экран отключается. На курсоре 3 включаем экран кнопкой блокировки. На курсоре 4 экран вновь отключается. На курсоре 5 через некоторое время после включения экрана кнопкой блокировки пробуем касаться экрана (в тот момент начинается активность импульсов на линиях SDA и SCL). Смахиваем заставку вправо, потом пробуем вводить пароль.
При касаниях на лини INT наблюдается активность.

Подключим I2C декодер и посмотрим, что там передаётся.
Подробнее изучим область в начале записи.

До включения питания сенсора есть активность на SCL и SDA. На этом интерфейсе сидят ещё какие-то устройства. К тачу это не имеет отношения.
До появления заставки на экране и большой активности на SCL и SDA у нас есть 3 места малой активности. На картинке они отмечены стрелочками. Из-за масштаба левая стрелка указывает сразу на 2 места.

Анализ общей картины подробнее
Через 100 мс после отпускания RST (линия перешла высокое состояние) INT тоже переходит в высокий уровень. Затем с 428й начинаются посылки для сенсорной панели (на интерфейсе сидят несколько устройств).

После прочтения ДШ на контроллер тача всё становится понятнее. Что мы тут видим?
0b111000 – это I2C адрес контроллера тача
0х70 = 0b111000 и последний бит 0 (запись)
0х71 = 0b111000 и последний бит 1 (чтение)

Сначала записываем адрес, из ктр будем читать – 0х00, затем читаем.

Из DEVICE_MODE считывается код 0х00 – WORKING MODE.
Далее из 0xА8 (FOCALTECH_ID) считывается 0x11.
Из 0xА6 (Firmware Version) – 0x01.
Через длительное время пишется в В0 (описания такого регистра нет) 00.
Далее адреса записи/чтения 4C/4D. Это какое-то другое устройство, процесор общается с ним до подачи питания на тач. Там ещё несколько устройств.
После этого на экране появляется стартовая заставка и начинается пачка импульсов до отключения экрана.

В пачке посылки для и от устройства с адресом записи/чтения 4C/4D.
Периодически что-то читается из регистра 02 этого устройства. Есть и другие посылки, но по адресам 70/71 для/от нашего тача ничего нет.
Чтобы ничего не пропустить, используем поиск строки «Address write: 70» и переключаемся по результатам поиска.

Оп! В большой пачке мы сразу не заметили посылки для тача (смотрели быстро). А там есть.

Эта позиция показана курсором. Как раз в конце пачки.
Процессор пишет в регистр А5 (PWR_MODE) значение 03 (описания нет, похоже на спящий режим).
[7:0] Current power mode which system is in R/W
Далее конец пачки – экран отключился.
Потом новая пачка – это я нажал кнопку блокировки и экран включился.
В начале этой пачки сигнал Reset, чтобы контроллер тача проснулся.

А в конце пачки снова процессор пишет в регистр А5 (PWR_MODE) значение 03 (описания нет, но видимо спящий режим).
Изучим участок, где мы начали касаться тача.

После включения экрана кнопкой блокировки процессор будит контроллер тача импульсом Reset. Затем касаемся сенсора и начинается активность на линии INT.

Процессор пишет адрес регистра 00 (Device Mode), из ктр будет читать.
Контроллер сенсора отвечает 00 00 01 00 52 03 65 00
Процессор считывает данные из регистра 08 (P1_MISC 1st Touch Area)
Ответ 00 FF FF FF FF FF FF FF
Процессор читает из 10 (описания нет) Ответ FF FF FF FF FF FF FF FF
Процессор читает из А6 (Firmware Version) Ответ 01.
Странно: зачем снова читать версию прошивки контроллера тача при касании?

Рассмотрели левую пачку после первого касания.
Теперь посмотрим правую (после курсора 2).
Запрос от процессора на чтение из 00 (Device Mode) Ответ 00 00 01 80 63 03 62 00
Запрос от процессора на чтение из 08 (P1_MISC 1st Touch Area) Ответ 00 FF FF FF FF FF FF FF
Процессор читает из 10 (описания нет) Ответ FF FF FF FF FF FF FF FF
Процессор читает из А6 (Firmware Version) Ответ 01.

После прочтения ДШ на контроллер тача всё становится понятнее. Что мы тут видим?
0b111000 – это I2C адрес контроллера тача
0х70 = 0b111000 и последний бит 0 (запись)
0х71 = 0b111000 и последний бит 1 (чтение)

Сначала записываем адрес, из ктр будем читать – 0х00, затем читаем.

Из DEVICE_MODE считывается код 0х00 – WORKING MODE.
Далее из 0xА8 (FOCALTECH_ID) считывается 0x11.
Из 0xА6 (Firmware Version) – 0x01.
Через длительное время пишется в В0 (описания такого регистра нет) 00.
Далее адреса записи/чтения 4C/4D. Это какое-то другое устройство, процесор общается с ним до подачи питания на тач. Там ещё несколько устройств.
После этого на экране появляется стартовая заставка и начинается пачка импульсов до отключения экрана.

В пачке посылки для и от устройства с адресом записи/чтения 4C/4D.
Периодически что-то читается из регистра 02 этого устройства. Есть и другие посылки, но по адресам 70/71 для/от нашего тача ничего нет.
Чтобы ничего не пропустить, используем поиск строки «Address write: 70» и переключаемся по результатам поиска.

Оп! В большой пачке мы сразу не заметили посылки для тача (смотрели быстро). А там есть.

Эта позиция показана курсором. Как раз в конце пачки.
Процессор пишет в регистр А5 (PWR_MODE) значение 03 (описания нет, похоже на спящий режим).
[7:0] Current power mode which system is in R/W
Далее конец пачки – экран отключился.
Потом новая пачка – это я нажал кнопку блокировки и экран включился.
В начале этой пачки сигнал Reset, чтобы контроллер тача проснулся.

А в конце пачки снова процессор пишет в регистр А5 (PWR_MODE) значение 03 (описания нет, но видимо спящий режим).
Изучим участок, где мы начали касаться тача.

После включения экрана кнопкой блокировки процессор будит контроллер тача импульсом Reset. Затем касаемся сенсора и начинается активность на линии INT.

Процессор пишет адрес регистра 00 (Device Mode), из ктр будет читать.
Контроллер сенсора отвечает 00 00 01 00 52 03 65 00
Процессор считывает данные из регистра 08 (P1_MISC 1st Touch Area)
Ответ 00 FF FF FF FF FF FF FF
Процессор читает из 10 (описания нет) Ответ FF FF FF FF FF FF FF FF
Процессор читает из А6 (Firmware Version) Ответ 01.
Странно: зачем снова читать версию прошивки контроллера тача при касании?

Рассмотрели левую пачку после первого касания.
Теперь посмотрим правую (после курсора 2).
Запрос от процессора на чтение из 00 (Device Mode) Ответ 00 00 01 80 63 03 62 00
Запрос от процессора на чтение из 08 (P1_MISC 1st Touch Area) Ответ 00 FF FF FF FF FF FF FF
Процессор читает из 10 (описания нет) Ответ FF FF FF FF FF FF FF FF
Процессор читает из А6 (Firmware Version) Ответ 01.
Анализ общей картины кратко.
После подачи питания на контроллер сенсорной панели из DEVICE_MODE считывается 0х00 – WORKING MODE.
Далее из 0xА8 (FOCALTECH_ID) считали 0x11.
Из 0xА6 (Firmware Version) считали 0x01.
Через длительное время пишем в В0 значение 00 (описания такого регистра в даташите нет).
После этого на экране появляется стартовая заставка и начинается пачка импульсов до отключения экрана. Почти все посылки в пачке для других устройств. В конце пачки процессор пишет в регистр А5 (PWR_MODE) контроллера тача значение 03 (описания нет, похоже на спящий режим).
Далее конец пачки – экран отключился.
После включения экрана кнопкой блокировки процессор будит контроллер тача импульсом Reset. Затем касаемся сенсора и начинается активность на линии INT. Этим сигналом контроллер сенсора сообщает процессору, что есть полезные данные.
Получив прерывание INT от тача, процессор начинает считывать данные. Это всегда происходит по одной схеме:
- Процессор пишет адрес регистра 00 (Device Mode), из ктр будет читать.
В ответ контроллер сенсора посылает 8 посылок, например, 00 00 01 00 52 03 65 00.
- Процессор считывает данные из регистра 08 (P1_MISC 1st Touch Area)
Ответ 00 FF FF FF FF FF FF FF - Процессор читает из 10 (описания нет). Ответ FF FF FF FF FF FF FF FF
- Процессор читает из А6 (Firmware Version). Ответ 01.
И при каждом касании процессор зачем-то считывает версию прошивки. Постоянно забывает или проверяет обновления?
Поделиться ссылкой:
Интересные статьи
Интересные статьи
Всем привет! Меня зовут Мария Ходякова, я продуктовый аналитик Тинькофф Страхования. В этой статье мы поговорим о множественном тестировании. Хорошо известен такой подход, как А/В-тестирование, когда ...
Субботний вечер омрачен скандалом - сайт не работает, провайдер негодяй, админы - не специалисты, а сервера - решето. Вызов принят, или почему при всей нелюбви к 1С-Битри...
Как-то у нас исторически сложилось, что Менеджеры сидят в Битрикс КП, а Разработчики в Jira. Менеджеры привыкли ставить и решать задачи через КП, Разработчики — через Джиру.
Вам приходилось сталкиваться с ситуацией, когда сайт или портал Битрикс24 недоступен, потому что на диске неожиданно закончилось место? Да, последний бэкап съел все место на диске в самый неподходящий...
Увидев заголовок статьи «One inch tesla coil», я поначалу подумал, что речь идёт о трансформаторе Теслы высотой в один дюйм. Оказалось, что он несколько больше, но выполнен на плате площадью ...
