Попытка восстановления прошивки заблокированного объектива Meiki 85mm f/1.8 (Неудачно — симметричный ключ зашифрован и чтение отключено).

Во‑первых, если Вы этого ещё не сделали, НИКОГДА не обновляйте прошивку рабочего объектива Meiki — сигнатура прошивки, по-видимому, общая, и можно прошить неправильную прошивку и окончательно кирпичить объектив.

То, что должно было быть учебным ремонтом, превратилось в предостерегающую историю...

В момент необдуманной глупости я поместил неправильный файл прошивки в папку, созданную объективом как USB-накопитель. Объектив обновился и перестал функционировать, больше не отображался как USB‑устройство. Обратного пути нет! Я оставлю это руководство, чтобы никто больше не проделывал ту же работу, только чтобы столкнуться с зашифрованной прошивкой и отсутствием запчастей от Meiki.

Правильный сайт с прошивками находится здесь: https://meikeglobal.com/pages/firmware-u...

''Я попал на старый китайский сайт с прошивками! http://www.mkgrip.com/down.html''

Указанный сайт с тех пор удалён!

Я пытался, имея ограниченные ресурсы, даташиты и задав несколько вопросов ChatGPT, ввести небольшой бортовой процессор STM32 ARM в DFU Mode, чтобы он появился в USB и его можно было перепрошить с помощью STM32CubeProgrammer.

Мне это удалось! Шаг выводов MCU был очень мелким, что делало подчистку отдельных выводов затруднительной, и припаяв даже тонкий медный провод к выводам было почти невозможно — особенно когда я использовал металлический магнитный прищеп как держатель платы и работал на мини‑холодильнике утюгом, больше подходящим для сквозных выводов!

Ко всеобщему удивлению и с новым оборудованием я заменил MCU и запрограммировал его. Я собрал объектив, но он не работал и не определялся по USB! Это то же поведение, что и у оригинального MCU с отключённым BOOT0 (за что я и винил поведение!). Сейчас я твердо уверен, что прошивка сильно зашифрована, STM32 MCU включают AES‑шифрование для защиты IP (энтропия 7.9487), и логично, что MCU настроен запрещать чтение, поэтому невозможно получить незашифрованную версию прошивки для загрузки через DFU mode.

Я обратился в Meiki с вопросом о покупке запасной платы:

"Извините, мы не продаём этот компонент."

Если Вы превратите объектив в кирпич, восстановить его нельзя, если только Вы не получите рабочую плату с такого же неисправного объектива!

Шаг 1

Это простая часть! Используйте отвёртку (PH000), чтобы снять два винта, указанных на первой фотографии.

Используйте отвёртку (PH00), чтобы снять четыре винта, указанных на второй фотографии.

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

Шаг 2

Сначала аккуратно отсоедините плоский шлейф, указанный стрелкой. Я использовал маленькие плоскогубцы с гладкими губками. Можно также воспользоваться ногтями, если они достаточно длинные.

После того как Вы сняли заднюю крышку с переключателем AF/MF, аккуратно снимите оставшиеся плоские шлейфы. Затем снимите два винта крепления платы, отмеченные кружком, с помощью

Шаг 3

Логическая плата Meiki 85mm f/1.8 с портом micro‑USB показана на первой картинке рядом с объективом. По сути это STM32 MCU с двумя драйверами моторов.

Вторая фотография показывает макросъёмку микроконтроллера STM32F072C8T6.

Третья фотография взята из даташита ST и показывает распиновку в исполнении LQFP48.

Шаг 4

При загрузке с заводской прошивки вывод 44 — BOOT0 удерживается в нуле, 0 В через подтягивающий вниз резистор 10 кОм. Вывод 7 — NRST — удерживается в 3.3 В через подтягивающий вверх резистор 10 кОм и имеет развязывающий конденсатор на 0 В.

Для загрузки в DFU режим вывод 44 — BOOT0 нужно удерживать в высоком уровне. Около 3.3 В. Затем вывод 7, NRST, кратковременно подтягивается к нулю для сброса MCU.

Я не знал, где BOOT0 была зажата внизу. Поэтому я отпаивал и отгибал вывод 44 и подтянул его к питанию через внешний 10 кОм резистор! Это сработало, но вывод 44 оторвался, когда я пытался вернуть всё назад, фактически уничтожив MCU!

NRST: На «картинке 1» видно развязывающий конденсатор, который нужно кратковременно замкнуть, он выделен красным. Для подачи 3.3 В на BOOT0 можно припаять ваш подтягивающий резистор к верхнему выводу подтягивающего вверх 10 кОм резистора NRST или к соседнему развязывающему конденсатору, оба отмечены синим. Можно зачистить дорожку и залудить её.

BOOT0: На картинке 2 видно, где трасса BOOT0 (вывод 44) выходит с обратной стороны платы и подключается к подтягивающему вниз резистору 10 кОм! Чёрный () Вывод 36 под ней — это VDDIO2 и находится на 3.3 вольта! Оранжевый (). Подключение подтягивающего резистора 1 кОм сюда и к удобной шине 3.3 В переводит MCU в DFU режим.

Изуродовано!: На картинке 3 показана плата без MCU (выглядит сильно испорченной). Красный квадрат показывает, где я брал 3.3 В, а розовые кружки — где трасса BOOT0 исчезает под MCU и где она выходит. [См. страницу переделки]

BOOT0 имеет подтяжку вниз 10 кОм. Напряжение = Vdd * Rdown / (Rup+Rdown).' -- 1 кОм → ~3.0В (0.91·Vdd, 0.3мА) ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' - 2.2 кОм → ~2.7В (0.82·Vdd, 0.27мА) ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' - - 3.3 кОм → ~2.5В (0.75·Vdd)

Шаг 5

Как показано на картинке 1, резистор 1 кОм с шестью цветными полосами подключён к проводу 32 swg, который, в свою очередь, припаян к трассе 3.3 В с одной стороны и к верхней точке подтягивающего вниз резистора 10 кОм для BOOT0 с другой стороны.

Когда плата настроена для DFU режима, подключите её к системе, на которой установлен STM32CubeProgrammer, и запустите программу. Плата должна определиться по USB, и программатор подключится к ней. На картинке 2 показано появление загрузчика DFU в диспетчере устройств Windows 10. Отображается как STM BOOTLOADER.

Картинка 3 показывает скриншот после перепрошивки. На следующих страницах я пройду шаги программирования.

Шаг 6

Во-первых, загрузите корректную прошивку с сайта Meiki. Вам потребуется извлечь файл прошивки .SKY и переименовать файл прошивки в .BIN, если он ещё не имеет этого имени.

Разместите плату на непроводящей поверхности и подключите USB. Откройте STM32CubeProgrammer и нажмите «синюю кнопку» рядом с «зелёной кнопкой подключения», затем выберите USB. Теперь нажмите Connect. Программатор должен подключиться к вашей плате и показать информацию.

Теперь нажмите вторую сверху зелёную кнопку слева, выбрав «Erasing and Programming». В центре справа на вкладке «Erase Flash Memory» нажмите Full Erase. (Изображение 1) Нажмите OK для удаления. После завершения операции появится сообщение (Изображение 2)

В разделе Download используйте Browse, чтобы выбрать ваш файл прошивки .Bin. Установите флажок «Verify Programming», затем нажмите кнопку «Start Programming». После завершения программирования и проверки вы увидите диалог подтверждения (Изображение 3)

После этого я отломал ножку 44!! Вы же должны отключить плату, аккуратно удалить подтягивающий резистор BOOT0 1 кОм. Затем снова подключите плату к USB и проверьте, появляется ли папка, как это было при корректной прошивке объектива. Если появляется — соберите объектив и протестируйте.

Если папка не появляется, вы можете протестировать плату в объективе или сразу вернуть резистор 1 кОм и повторить процедуру с другим образом прошивки.

Шаг 7

Я купил очень дешёвую станцию с горячим воздухом за $35 и собираюсь ставить новый микроконтроллер!!

Работаю над картированием входов/выходов

Я перепаивал плату. Третья рука, паяльная паста и флюсовый карандаш были обязательны! Работал 858D при примерно 333°C и воздушном потоке 4¾, паяльник был на 312°C. Я очистил контактные площадки, нанес паяльную пасту, установил микроконтроллер и использовал наибольшую из трёх насадок для пайки. Пришлось дорабатывать флюсовой пастой, паяльником и оплеткой, прогревать флюс и использовать самую маленькую насадку. Часы работы.

Сегодня вечером, после двух попыток с сообщением «USB Device not recognised» и доработок, плата определилась, и я смог стереть, прошить и проверить прошивку.

Шаг 8

Я перепрошил новый микроконтроллер переименованным образом .sky, как показано на этих трёх изображениях.

Я снял подтягивающий резистор, убедившись по падению напряжения на нём, что в цепи присутствует подтяжка к земле.

Я собрал объектив, но он ни работал, ни определялся. Хотя замена микроконтроллера могла привести к неполадкам, USB‑связь работала и микроконтроллер запускался, поэтому он должен был определиться, если бы прошивка выполнялась. Это поведение совпадает с тем, как вёл себя оригинальный микроконтроллер.

Мне нужен чистый образ прошивки для DFU в несжатом/незашифрованном виде.

Шаг 9

Как специалист 80‑х, возможно, я недооценил современную озабоченность «интеллектуальной собственностью». Я думал, что прошивка может быть сжата или обфусцирована. Но я не учёл, что эта защита предоставляется ST и реализована аппаратно и программно.

Я работал с прошивкой в Linux‑виртуальной машине, но когда дальше идти стало нельзя, я обратился к ИИ; он предложил получить значение энтропии с помощью binwalker. После анализа файла он вернул меня в консоль и дал Python‑скрипт для расчёта энтропии — 7.9497.

Шифрование почти наверняка симметричное. Хуже того, аппаратная реализация включает «No Read», что, если Meike предусмотрели использование сильного шифрования от ST в их инструментах разработки…

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

Если Вы «забрикнете» один из этих объективов, единственный возможный способ восстановить его — получить исправную плату от физически повреждённого объектива того же типа. Я спрашивал Meiki — они не продают заменяемые платы, хотя именно их меры защиты интеллектуальной собственности мешают восстановлению прошивки объектива...

От ST по защите интеллектуальной собственности: https://www.st.com/content/st_com/en/eco...

Заключение

Не обновляйте прошивку на работающем объективе Meiki!

Перевод руководства с ifixit.com