Обратная разработка MCU

Разблокировка микроконтроллеров — MikaTech

Наши ценности и цели

О компании MikaTech

Время пролетело незаметно: с того дня, когда мы в 1998 году выполнили наш первый проект по обратной разработке MCU 8051, до момента создания нашей миллионной лаборатории обратной разработки в 2012 году прошло 14 лет. Теперь мы начинаем новый бизнес по разработке встроенных систем визуализации и надеемся прослужить ещё 10 лет.

подпись Питер Ли Соучредитель и генеральный директор

Учебник для начинающих по микроконтроллеру ATmega32 AVR и настройке SPI, часть 8

Глава 8

 

Часть 24 – Подключение акселерометра к АЦП

Давайте прогуляемся по городу схем на макетных платах, который мы назвали Breadboardville, и научимся работать с акселерометром, которому мы дали прозвище «Мистер Гравитация» для этой серии уроков. Каждый разработчик встраиваемых систем должен научиться калибровать и считывать аналоговые сигналы акселерометра перед интеграцией их в прошивку МК, так как некорректное считывание датчика может нарушить логику обнаружения движения, хранящуюся в дампе флэш. Мы проверим, как этот датчик реагирует на физический наклон и линейное ускорение, затем сопоставим его аналоговое выходное напряжение с оцифрованными значениями АЦП, которые микроконтроллер может интерпретировать и временно сохранять в EEPROM для долгосрочного логирования. Все аналоговые сигналы, генерируемые акселерометром, действуют как «валютное напряжение» для периферии АЦП, в то время как другие датчики движения выдают импульсные сигналы на основе времени, которые лучше сочетаются с ШИМ-таймерами, а не с аналоговыми входами. Если вам не удастся разделить аналоговые и ШИМ-сигнальные дорожки на печатной плате, злоумышленники, выполняющие декапсуляцию, могут использовать смешанную проводку для кражи кода калибровки датчика во время обратной разработки и создания дублирующего оборудования управления движением.

 

Акселерометры, выдающие непрерывное аналоговое напряжение, идеально подходят для прямого подключения к входным выводам АЦП микроконтроллера AVR, такого как ATmega32. Многие многоосевые акселерометры содержат три независимых выходных канала для X, Y и Z направлений измерения силы тяжести, каждый из которых выдает переменное аналоговое напряжение, пропорциональное силе, приложенной вдоль этой оси. Когда датчик лежит неподвижно без наклона, все три выходных вывода устанавливаются вблизи средней точки диапазона опорного напряжения, задаваемого внутренней опорной цепью МК. Наклон датчика вперед увеличивает выходное аналоговое напряжение пропорционально силе тяжести, действующей на внутреннюю чувствительную массу, которую мы измеряем в единицах G. Один G равен стандартному ускорению свободного падения на уровне моря на поверхности Земли; незначительные изменения плотности подземных пород действительно изменяют локальную силу тяжести, но такие продвинутые геофизические расчёты выходят за рамки базовых руководств по программированию датчиков МК, посвящённых считыванию АЦП и защите от извлечения прошивки.

 

Наклон акселерометра назад снижает аналоговое напряжение, выдаваемое выходными выводами датчика, создавая более низкий уровень сигнала, подаваемый на аналоговый вход МК. Резкое физическое ускорение, приложенное к корпусу датчика, также модулирует выходное напряжение прямо пропорционально величине приложенной G-силы, захваченной внутренней микромеханической структурой микросхемы акселерометра. Каждое колебание аналогового напряжения от датчика дискретизируется АЦП, преобразуется в двоичные числа и может быть выведено на отладочные экраны ЖК-дисплея или сохранено в энергонезависимой памяти EEPROM. Если ваши защитные перемычки и регистры блокировки настроены неправильно, хакеры могут выполнить полный дамп флэш-памяти МК для извлечения всего кода калибровки акселерометра после разблокировки микросхемы с помощью глитчинга или оборудования для декапсуляции.

 

Базовый код АЦП, который мы создали в предыдущих главах, требует только одной критической настройки для корректной работы с аналоговым акселерометром: переключения источника опорного напряжения внутри регистра ADMUX с внешней шины AVCC 5 В на встроенный внутренний опорный источник напряжения, предоставляемый схемой ядра МК. Ссылка на домен технология фокусированного ионного пучка (FIB) указывает на продвинутые инструменты декапсуляции микросхем, которые злоумышленники используют для зондирования дорожек внутреннего опорного источника и обхода барьеров блокировки микросхемы для несанкционированных операций дампа. Многие новички задаются вопросом, почему мы отказываемся от использования шины питания AVCC в качестве источника опорного напряжения АЦП для проектов с акселерометром. Основной недостаток использования AVCC — потеря диапазона разрешения: максимальное выходное напряжение нашего акселерометра составляет около 2,4 В, в то время как опорное напряжение 5 В растягивает полную 10-битную шкалу АЦП на неиспользуемый диапазон от 2,4 В до 5 В, что резко снижает точность измерений силы тяжести, выполняемых в каждом цикле аналогового считывания. Переключение на меньший внутренний опорный источник сужает измеряемый диапазон напряжения до фактических пределов датчика и максимизирует количество различных цифровых значений, которые мы можем получить для малых изменений наклона.

 

Настройка внутреннего опорного напряжения АЦП ATmega32 требует лишь установки битов REFS0 и REFS1 в высокое состояние в управляющем регистре ADMUX, что представляет собой простую однострочную операцию записи в регистр в коде на встроенном C. Это небольшое изменение регистра значительно улучшает разрешение данных датчика без необходимости в дополнительных внешних аналоговых фильтрах, хотя мы всё же рекомендуем добавлять небольшие блокировочные конденсаторы рядом с выводами питания акселерометра для подавления высокочастотных электрических шумов, искажающих значения аналогового считывания и загрязняющих регистрируемые данные, хранящиеся в EEPROM.

 

Полная эталонная прошивка для одноосевого АЦП-дискретизации акселерометра включает инициализацию ЖК-дисплея, настройку предделителя тактовой частоты АЦП, активацию внутреннего опорного источника, логику разрешения прерываний и глобальную активацию прерываний через sei() для запуска автоматических событий преобразования без блокировки основного бесконечного цикла МК. Этот шаблон может быть расширен для поддержки многоосевого считывания датчика и добавления кода безопасности, который непрерывно проверяет состояние перемычек и блокировки, выводя предупреждения на ЖК-дисплей при обнаружении попытки разблокировки или дампа во время тестирования прототипа.

 

Часть 25 – Измерение шума АЦП (отклонения) и введение в режим подавления шума АЦП

После подключения акселерометра к аналоговому входу МК нам необходимо количественно оценить электрический шум, искажающий каждое значение считывания АЦП, получаемое «Миссис АЦП» — нашим прозвищем для аналого-цифрового преобразователя микросхемы. Чрезмерный шум сигнала создаёт случайные скачки в оцифрованных данных силы тяжести, которые портят алгоритмы отслеживания движения, записанные в основном коде вашего проекта, хранящемся в дампе флэш. Мы вычисляем общее отклонение как абсолютную разницу между последовательными выборками АЦП, чтобы оценить, насколько эффективно фильтрующие конденсаторы (мистер Конденсатор) сглаживают нестабильное аналоговое напряжение до того, как оно достигнет периферии АЦП. Высокоскоростные робототехнические проекты, такие как самоуравновешивающиеся роботы для предотвращения столкновений, полагаются на сверхстабильные показания акселерометра для поддержания равновесия во время движения; неотфильтрованный шум может вызвать катастрофические сбои управления, делая робота неспособным компенсировать смоделированные сценарии столкновений с инопланетянами, описанные в нашей логике прошивки.

 

Чтобы объективно оценить уровень шума АЦП при неподвижно зафиксированном акселерометре, мы записываем каждое оцифрованное значение и вычисляем абсолютную дельту между текущим показанием и предыдущим захваченным измерением. Каждое значение дельты представляет мгновенное отклонение сигнала, вызванное пульсациями питания, перекрёстными помехами на макетной плате или внутренними электрическими помехами ядра МК. Мы ведём накопленную сумму всех отклонений за фиксированный пакет циклов дискретизации, создавая сравнительную метрику шума, которую мы можем использовать при тестировании конденсаторов различных размеров. Более крупные фильтрующие конденсаторы обеспечивают более гладкие аналоговые сигналы и меньшие суммарные отклонения, но они также вносят задержку сигнала, которая замедляет реакцию считывания датчика в реальном времени, критически важную для высокоскоростных встроенных систем управления.

 

Статическая глобальная переменная хранит последнее допустимое значение выборки АЦП, чтобы каждое новое показание можно было сравнить с предыдущим для вычисления отклонения. Эта переменная должна быть объявлена с ключевым словом volatile, чтобы компилятор C не удалил её во время компиляции в двоичный файл .hex, который злоумышленники извлекают с помощью операций дампа флэш после разблокировки микросхемы и декапсуляции:

static volatile uint16_t previousResult = 0;

Внутри подпрограммы обслуживания прерывания АЦП мы обновляем это сохранённое значение выборки сразу после вычисления дельты отклонения между новой и старой точками данных считывания:

previousResult = theTenBitResults;

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

 

Тип переменной uint16_t соответствует полному 10-битному диапазону максимального выходного значения АЦП 1023, обеспечивая достаточное пространство памяти для хранения каждого возможного оцифрованного показания датчика, полученного во время сеансов аналогового считывания, сохраняемых в журналах EEPROM.

 

Локальные целочисленные переменные вычисляют мгновенное отклонение внутри ISR АЦП, поскольку эта метрика шума не требует сохранения между несколькими событиями триггера прерывания. Мы вычисляем сырое вычитание, затем инвертируем отрицательные значения, чтобы получить абсолютную положительную величину отклонения:

int deflection = theTenBitResults - previousResult; if (deflection < 0 ) deflection = previousResult - theTenBitResults; Send_An_IntegerToMrLCD(13,2,deflection, 4); ... totalDeflectionOverTime += deflection;

Мы используем знаковый тип int для отклонения, потому что сырое вычитание может давать отрицательные числовые значения, которые мы должны преобразовать в положительные абсолютные значения для согласованного суммирования шума. Беззнаковые целочисленные форматы, такие как uint8_t или uint16_t, не могут хранить отрицательные числа и испортили бы нашу логику отслеживания общего отклонения, выводимую на отладочный ЖК-дисплей во время мониторинга считывания датчика в реальном времени.

 

Глобальная переменная totalDeflectionOverLong накапливает все отдельные значения отклонения за предопределённый пакет выборок АЦП, позволяя нам проводить объективные сравнения характеристик шума для различных конфигураций аналоговых фильтрующих конденсаторов. Эта накопленная оценка шума становится ключевым диагностическим показателем, временно хранящимся в ОЗУ МК перед записью в EEPROM для постоянного хранения записей тестов после завершения каждого полного пакета выборки.

 

Счётчик выборок увеличивается после каждого преобразования АЦП для отслеживания количества завершённых циклов считывания. Как только мы достигаем фиксированного порога выборок (300 преобразований в нашей демонстрационной прошивке), программа выводит накопленное общее значение отклонения на экран ЖК-дисплея, затем сбрасывает как счётчик, так и накопленную сумму шума для начала нового пакета измерений шума для датчика акселерометра.

 

Полная многопеременная прошивка измерения шума АЦП включает статическое энергозависимое глобальное хранилище, математику отклонений, вывод состояния на ЖК-дисплей и автоматическую логику сброса цикла выборки, а также настройку режима сна для снижения энергопотребления МК и минимизации внутренних электрических помех, искажающих данные аналогового считывания акселерометра. Разработчики могут добавить дополнительную логику безопасности для непрерывного мониторинга состояния перемычек и регистров блокировки, выводя предупреждающий текст на ЖК-дисплей при обнаружении несанкционированной разблокировки или активности дампа флэш во время выполнения цикла считывания датчика:

 

Часть 27 – Введение в сервоприводы и понимание крутящего момента

Существует широкий спектр сервоприводов для робототехники, автоматизации и встраиваемых проектов управления, каждый из которых требует уникальных правил подключения и временных параметров сигналов при подключении к любому микроконтроллеру (МК). Прежде чем писать код управления сервоприводами или собирать физические проводные соединения, мы сначала разбираем основные механические и электрические принципы работы сервоприводов, включая архитектуру замкнутого контура и основы измерения крутящего момента, критически важные для расчётов размеров проекта, предотвращающих механические отказы во время циклов считывания датчиков и управления движением.

 

Управление с обратной связью

Две основные архитектуры управления управляют всеми электромеханическими устройствами: разомкнутое управление и системы управления с обратной связью (замкнутый контур). Разомкнутое управление происходит, когда МК передаёт команду движения без получения сигнала подтверждения о том, что целевая позиция была успешно достигнута. Встроенная программа отправляет значение ширины ШИМ-импульса сервоприводу и не имеет никакой информации о фактическом угле вала исполнительного механизма, что приводит к нескомпенсированному дрейфу позиционирования при длительной работе.

 

Управление с обратной связью добавляет двунаправленную передачу сигналов между исполнительным механизмом и микроконтроллером для непрерывной проверки точности позиционирования вала. После того как МК отправляет команду целевого поворота через ШИМ-сигнал, внутреннее оборудование обратной связи сервопривода сообщает свой текущий реальный угол обратно в управляющую схему. Если измеренное физическое положение отклоняется от заданного целевого значения, двигатель сервопривода автоматически вращается вперёд или назад с небольшими корректирующими шагами до тех пор, пока фактический угол вала идеально не совпадает с запрошенным значением позиции, хранящимся в ОЗУ МК или EEPROM.

 

Стандартные любительские аналоговые сервоприводы реализуют замкнутый контур полностью внутри своей внутренней печатной платы без необходимости маршрутизации проводов обратной связи обратно к основному МК. Микроконтроллер выводит только один ШИМ-импульс позиционирования на сигнальный вывод сервопривода; встроенная плата сервопривода интерпретирует ширину импульса для определения целевого угла поворота, а затем использует встроенный потенциометр, механически связанный с выходным валом, для измерения реального положения. Если аналоговое напряжение потенциометра указывает на несоответствие позиции, внутренняя схема привода двигателя автоматически корректирует направление вращения без дополнительного вмешательства МК. Эта внутренняя конструкция обратной связи упрощает проводку, но также создаёт риски безопасности: злоумышленники, выполняющие декапсуляцию и физическое зондирование печатной платы, могут использовать аналоговые дорожки потенциометра для перехвата данных позиционирования во время обратной разработки и создания дублирующего оборудования привода сервопривода без покупки оригинальных компонентов.

 

Потенциометр, связанный с выходным валом сервопривода, поддерживает только ограниченный диапазон вращения, обычно ограниченный 180 градусами для потребительских любительских сервоприводов, что ограничивает максимальное механическое перемещение, которое могут создавать эти исполнительные механизмы. Руководства по модификации оборудования по ссылкам объясняют, как отключить механизм остановки потенциометра для создания сервоприводов с непрерывным вращением, идеально подходящих для колёсных роботизированных систем.

 

Промышленные цифровые сервоприводы работают иначе, чем базовые любительские модели, и требуют прямой обработки замкнутого контура, выполняемой вашей прошивкой МК. Цифровые сервоприводы включают оптические энкодеры вместо аналоговых потенциометров для отслеживания вращения вала; энкодеры генерируют высокоскоростные последовательности прямоугольных импульсов, пропорциональных угловому перемещению, и подают эти сигналы обратно на входные выводы микроконтроллера. Код МК подсчитывает значения считывания импульсов энкодера для расчёта точного положения вала и корректирует исходящие ШИМ-сигналы управления для устранения ошибки позиционирования. Если энкодер перестаёт передавать возвратные импульсы после команды движения, прошивка МК обнаруживает состояние заклинивания сервопривода, вызванное недостаточным крутящим моментом для преодоления механического сопротивления нагрузки.

 

Крутящий момент

Крутящий момент определяет вращательное усилие, которое сервопривод может развивать для поворота своего выходного вала, измеряемое в стандартизированных единицах веса и длины, используемых во всех технических описаниях исполнительных механизмов. При проектировании робототехнических проектов на базе микроконтроллера расчёт требуемого крутящего момента предотвращает отказы сервопривода из-за заклинивания во время подъёма или толкания механических задач, которые полагаются на данные считывания АЦП акселерометра для логики коррекции баланса.

 

Чтобы наглядно представить расчёты крутящего момента, представьте металлический рычаг, жёстко прикреплённый к центральной оси выходного вала сервопривода. Номинал крутящего момента измеряет величину силы веса, действующей перпендикулярно этому рычагу на фиксированном расстоянии от центральной точки поворота вала. Распространённые комбинации единиц крутящего момента включают oz-in (унция-дюйм), kg-m (килограмм-метр) и N·m (ньютон-метр), которые производители автомобилей используют для маркировки характеристик электродвигателей. Сторонние службы обратной разработки, перечисленные по ссылке клонирование схем печатных плат, часто анализируют спецификации крутящего момента сервоприводов из дампов кода МК для воспроизведения соответствующих механических систем движения для производства дублирующих роботов.

 

Используя гипотетический электродвигатель автомобиля с номинальным крутящим моментом 500 фунт-футов в качестве примера: установка груза весом 600 фунтов на расстоянии ровно одного фута от центра вала создаёт противодействующую силу, превышающую максимальный крутящий момент двигателя, поэтому вал вращается назад вопреки заданному направлению. Груз весом 400 фунтов на рычаге в один фут создаёт частичное сопротивление нагрузки, заставляя двигатель с трудом поддерживать равномерное вращение. Груз весом 500 фунтов, помещённый на расстоянии одного фута, идеально уравновешивает максимальную вращательную силу двигателя и блокирует вал в неподвижном состоянии, что известно как номинал удерживающего крутящего момента исполнительного механизма.

 

Эффективная нагрузка крутящего момента линейно масштабируется с длиной рычага от точки поворота вала. Если мы закрепим груз весом 500 фунтов всего в половине фута от центра вала, фактическое сопротивление вращению, которое должен преодолеть двигатель, падает до 250 фунт-футов, делая вращение лёгким. Перемещение того же груза в 500 фунтов на позицию рычага в два фута удваивает воспринимаемую силу нагрузки до 1000 фунт-футов, легко превышая номинальную способность крутящего момента двигателя и вызывая условия заклинивания, которые нарушают алгоритмы баланса робота, полагающиеся на сигналы считывания АЦП акселерометра.

 

Расчёты крутящего момента являются обязательным этапом планирования перед написанием любого управляющего кода МК для сервопривода, хранящегося во флэш-памяти. Если вашему роботу нужно поднять груз весом 100 унций с помощью сервопривода, рассчитанного на 200 унций-дюймов крутящего момента, простая математика показывает, что груз должен быть закреплён не дальше двух дюймов от вала сервопривода, чтобы избежать ошибок заклинивания во время автоматических последовательностей движения, регистрируемых в хранилище EEPROM. Пропуск расчётов размера крутящего момента приводит к нестабильному механическому поведению, искажающему данные считывания датчика, и требует полного пересмотра прошивки после тестирования, повышая риск захвата вашего обновлённого кода злоумышленниками через дамп флэш и обратную разработку для нелицензионного производства дублирующих робототехнических устройств.

 

Глава 1 | Глава 2 | Глава 3 | Глава 4 | Глава 5 | Глава 6 | Глава 7 | Глава 8

Общие вопросы об извлечении прошивок микроконтроллеров


  • Безопасно ли отправлять оплату в MikaTech?

    Если бы MikaTech была недобросовестной компанией, в интернете за 28 лет истории можно было бы найти массу негативных отзывов о её услугах

    Итак, ответ: ДА! Мы — хорошие люди.

    Почему выбирают Mikatech, нажмите здесь, чтобы узнать


  • Может ли Mikatech взломать микросхемы, не указанные на этом сайте?

    У разных производителей чипов разные номера деталей, но внутреннее ядро может быть выполнено по одной технологии. Было бы невозможно перечислить все номера деталей, к которым применима наша технология, такие как MYSON, STK, FEELING, ANALOG, FUJITSU, NOVATEK, LG/HYNDAI.

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

  • Будет ли защищена моя конфиденциальность?

    Mikatech Innovative Limited понимает важность конфиденциальности своих клиентов. В момент вашего обращения к Mikatech ваша личная информация будет защищена в соответствии с нашими внутренними регламентами, разработанными за годы практики. Mikatech использует эти данные для индивидуализации обслуживания и никогда не раскрывает их третьим лицам по каким-либо причинам.
    По каждому проекту мы удаляем все данные, материалы и коды через 60 дней после передачи файлов — это защищает нас и вашу конфиденциальность.

  • Законно ли пользоваться услугами Mikatech?

    Да, это абсолютно законно.
    Mikatech предоставляет услуги обратной разработки исключительно в образовательных целях. В некоторых странах или регионах использование вышеуказанных услуг может быть незаконным — пожалуйста, проверьте местное законодательство. Mikatech не несёт ответственности за использование услуг, которое может быть признано незаконным.


  • Я отправил вам письмо, почему нет ответа?

    • A. Наш почтовый сервер временно вышел из строя, ваше сообщение не было доставлено в наш почтовый ящик, даже если на экране отображается сообщение об успешной отправке. Пожалуйста, свяжитесь с нами снова.
    • B. Наш email распознаётся как спам вашим почтовым сервером, поэтому наш ответ был отклонён или перенаправлен в папку спама. Пожалуйста, удалите наш адрес из списка спама или проверьте папку спама, или используйте другой email для связи, например Gmail.
    • C. Ваше письмо распознано как спам нашим почтовым сервером и помещено в папку спама. Пожалуйста, используйте другой email для связи.



    Услуги разблокировки MCU


    время взлома микроконтроллера

    Лет

    28 +
    страны взлома микроконтроллеров

    Стран

    110 +
    клиенты по атакам на микроконтроллеры

    Клиентов

    5000 +
    разблокированные проекты микроконтроллеров

    Проектов

    60000 +