Если бы MikaTech была недобросовестной компанией, в интернете за 28 лет истории можно было бы найти массу негативных отзывов о её услугах
Итак, ответ: ДА! Мы — хорошие люди.Почему выбирают Mikatech, нажмите здесь, чтобы узнать
О компании MikaTech
Время пролетело незаметно: с того дня, когда мы в 1998 году выполнили наш первый проект по обратной разработке MCU 8051, до момента создания нашей миллионной лаборатории обратной разработки в 2012 году прошло 14 лет. Теперь мы начинаем новый бизнес по разработке встроенных систем визуализации и надеемся прослужить ещё 10 лет.
Питер Ли
Соучредитель и генеральный директор
Глава 9
Часть 28 – Использование UART и USART для связи с помощью микроконтроллера AVR
В этом разделе мы разбираем полную функциональность аппаратного модуля USART, встроенного в каждый AVR-микроконтроллер, простым и понятным для новичков языком, переводя описания регистров из официального даташита в практический код без излишнего технического жаргона. USART расшифровывается как Universal Synchronous Asynchronous Receiver Transmitter (универсальный синхронный/асинхронный приёмопередатчик) — это встроенная периферия последовательной связи, позволяющая микроконтроллеру обмениваться данными с внешними устройствами, включая другие микроконтроллеры, настольные компьютеры, датчики и удалённые встраиваемые модули. Последовательная передача данных через USART является основным вектором для атак несанкционированного считывания, так как злоумышленники могут подключаться к незащищённым линиям TX/RX для перехвата переменных времени выполнения, калибровочных данных, хранящихся в EEPROM, и критических значений безопасности, таких как перемычки и конфигурации блокировки, перед запуском полного дампа флэш для обратной разработки и извлечения прошивки дублирующих устройств.
Периферия USART использует выделенные сдвиговые регистры передачи и приёма, а также внутренние буферы данных для постановки в очередь входящих и исходящих кадров, устраняя потерю данных из-за несовпадения синхронизации между ядром микроконтроллера и внешним последовательным оборудованием. Каждое передаваемое двоичное значение упаковывается в стандартизированный кадр данных, который интерпретируется одинаково как передающим, так и принимающим устройством, обеспечивая безошибочный обмен. В модуле USART существуют два основных режима связи: асинхронный режим UART, работающий на согласованных скоростях без общего тактового провода, и синхронный режим USART, добавляющий выделенный тактовый сигнал между соединёнными микроконтроллерами. Разработчики должны защищать все линии USART, если они хранят проприетарный код во флэш-памяти микросхемы, так как открытые последовательные дорожки позволяют злоумышленникам выполнять считывание данных в реальном времени и собирать подсказки, необходимые для разблокировки защищённых областей памяти после декапсуляции кремниевого кристалла.
Простая аналогия с железнодорожной станцией отлично иллюстрирует, как работает конвейер передачи USART. Сырые данные сначала попадают во внутренний буфер хранения, подобный залу ожидания, где пассажиры ожидают отправления. Затем каждый байт последовательно загружается в сдвиговый регистр, который действует как очередь посадки, загружая отдельные биты на линию последовательной передачи по одному. Данные не могут попасть в сдвиговый регистр, пока предыдущий битовый поток полностью не передан по линии TX, что подобно поезду, который не может загрузить новых пассажиров, пока предыдущий вагон не покинул платформу. Вся логика последовательной передачи находится в аппаратной части МК и требует минимального вмешательства со стороны пользовательского кода, однако слабая практика последовательной защиты создаёт возможности для злоумышленников перехватывать данные и восстанавливать полный поток программы после извлечения дампа.
Приём последовательных данных работает как обратный процесс в аналогии с железнодорожной станцией. Последовательные битовые сигналы поступают по проводу RX непосредственно в сдвиговый регистр приёма, который собирает отдельные биты обратно в полные байты данных. Микроконтроллер Atmega32 включает два дополнительных буфера приёма данных вместе со сдвиговым регистром, создавая трёхступенчатый конвейер приёма, который значительно снижает риск ошибок переполнения данных (Data Overrun — DOR). Флаг DOR устанавливается всякий раз, когда новые данные прибывают до того, как программное обеспечение МК считает предыдущий байт; разработчики могут опрашивать этот флаг через регистры состояния USART для обнаружения повреждённых данных считывания, которые могут содержать изменённую информацию о блокировке или перемычках, полученную в результате вредоносных попыток последовательного зондирования.
Скорость передачи (baud rate) действует как тактовый сигнал, управляющий скоростью передачи битов по проводке UART/USART. В асинхронном режиме UART каждый подключённый микроконтроллер должен быть запрограммирован на одинаковое значение скорости для правильного декодирования входящих битовых потоков без рассогласования. Синхронный режим USART добавляет физический тактовый провод между микроконтроллерами, по которому передаётся непрерывный сигнал синхронизации для координации выборки битов. Если злоумышленник получает физический доступ к вашей печатной плате, он может подключить логические анализаторы к тактовой и сигнальной дорожкам во время декапсуляции для захвата полных журналов последовательного считывания, а затем восстановить ваш проприетарный протокол связи для создания дублирующих аппаратных клонов, имитирующих поведение вашего оригинального МК при последовательном обмене.
Режимы тактирования:
Разработчики выбирают синхронный или асинхронный режим, изменяя управляющий бит UMSEL в регистре UCSRC микроконтроллера AVR:
Асинхронный:
Асинхронная UART-связь не требует общего тактового провода между двумя микроконтроллерами, но оба устройства должны быть откалиброваны на одинаковую скорость для надёжной выборки входящих битовых кадров. Математическая формула UBBR вычисляет правильное значение регистра для установки целевой скорости на основе основной тактовой частоты МК:
Вычисленное значение незначительно отклоняется от стандартной скорости 2400 бод с погрешностью 0,2%, что не нарушает нормальные операции считывания и записи. Всегда проверяйте максимально допустимые погрешности скорости, указанные в даташите вашего микроконтроллера, при проектировании логики связи, передающей конфиденциальные данные безопасности, такие как статус блокировки, на внешние отладочные ЖК-экраны.
Настройка регистров UBBR высокого и низкого байтов требует осторожного обращения с флагом выбора URSEL, так как UBBRH разделяет то же адресное пространство, что и регистр управления периферией UCSRC:
Очистка URSEL гарантирует, что шина памяти микроконтроллера направляет операции записи в регистр высокого байта скорости вместо регистра конфигурации кадра. UBBRH хранит биты 8–11 значения UBBR, а UBBRL — младшие восемь бит вычисленной константы скорости. Неправильное управление битом URSEL нарушает синхронизацию последовательной связи и блокирует все каналы считывания, не позволяя разработчикам выводить значения перемычек и статуса блокировки через отладочные терминалы USART во время тестирования безопасности аппаратуры.
Настройка асинхронного режима:
Обычный асинхронный
Двойная скорость асинхронного — бит U2X в регистре UCSRA управляет асинхронным режимом двойной скорости
Бит U2 удваивает эффективную тактовую частоту последовательной передачи, сокращая требуемое значение UBBR вдвое для одинаковой скорости. Режим двойной скорости уменьшает задержку связи, но повышает чувствительность к электрическим помехам на незащищённых последовательных кабелях, создавая нестабильные потоки считывания, которые маскируют оповещения о состоянии блокировки в реальном времени, отправляемые через линии отладки USART.
Синхронный
Синхронный USART требует выделенного тактового провода XCK, подключённого между микроконтроллерами. Регистр направления данных DDR_XCK определяет, какое устройство является мастером тактирования, а какое — ведомым. Если DDR_XCK настроен как выход, локальный микроконтроллер генерирует тактовый сигнал для подключённого ведомого оборудования.
Синхронная проводка мастер-ведомый несёт дополнительные риски безопасности; физическое зондирование дорожки XCK во время декапсуляции даёт злоумышленникам полное выравнивание синхронизации для захвата каждого переданного бита между модулями МК, упрощая извлечение прошивки и рабочие процессы клонирования печатных плат, упомянутые по ссылке
Кадр данных:
Кадр данных USART соответствует нашей аналогии с вагоном поезда, содержа все двоичные биты данных и управляющие флаги. Максимальный формат кадра поддерживает девять бит данных, один стартовый бит, два стоповых бита и один бит контроля чётности, создавая общую длину кадра в тринадцать отдельных битов сигнала. Каждый сегмент кадра служит стандартизированной сигнальной цели, которой должны следовать как передающее, так и принимающее оборудование, чтобы избежать искажённого считывания данных.
Состояние ожидания: Железнодорожный путь — состояние ожидания сигнала — всегда высокое (5В)
Бит 01: Локомотив поезда — Бит 1: Стартовый бит — всегда низкий (0)
Бит 02: Пассажир №1 в поезде — Бит данных №0 — высокий или низкий в зависимости от данных
Бит 03: Пассажир №2 в поезде — Бит данных №1 — высокий или низкий в зависимости от данных
Бит 04: Пассажир №3 в поезде — Бит данных №2 — высокий или низкий в зависимости от данных
Бит 05: Пассажир №4 в поезде — Бит данных №3 — высокий или низкий в зависимости от данных
Бит 06: Пассажир №5 в поезде — Бит данных №4 — высокий или низкий в зависимости от данных
Бит 07: Пассажир №6 в поезде — Бит данных №5 — высокий или низкий в зависимости от данных
Бит 08: Пассажир №7 в поезде — Бит данных №6 — высокий или низкий в зависимости от данных
Бит 09: Пассажир №8 в поезде — Бит данных №7 — высокий или низкий в зависимости от данных
Бит 10: Пассажир №9 в поезде — Бит данных №8 — высокий или низкий в зависимости от данных
Бит 11: Вагон перед последним вагоном — Бит чётности — высокий или низкий в зависимости от единиц данных
Бит 12: Последний вагон — Стоповый бит — всегда высокий
Бит 13: Дополнительный стоповый бит — всегда высокий и всегда игнорируется приёмником
Возврат к высокому состоянию ожидания — или к новому стартовому биту.
Максимальное количество бит в кадре — 13.
Установка размера бит данных — количество бит данных, которое вы хотите в кадре. Используйте биты UCSZ2:0 (UCSZ0, UCSZ1, UCSZ2) в регистре UCSRC. Обратите внимание, что если все биты UCSZ2:0 не установлены, устанавливается длина данных в 5 бит.
UCSZ — Размер символа
Активация TXEN и RXEN отключает исходную функциональность GPIO выводов TX и RX микроконтроллера. Пока разрешение передачи активно, вы не можете переназначить вывод TX для управления светодиодами или считывания физических переключателей; аналогичные ограничения применяются к выводу RX, пока активен режим приёма. Флаг TXEN не может быть сброшен во время передачи, пока в буфере сдвигового регистра находятся необработанные данные, так как это повредит постановку в очередь последовательного считывания, содержащую конфиденциальные журналы отладки кода, связанные с логикой защиты от разблокировки, упомянутой по ссылке прототип печатной платы. Если ваша конструкция использует тактовый вывод XCK для синхронной связи USART, все функции GPIO этого вывода становятся недоступными во время последовательной работы.
Передача данных!!
Все исходящие последовательные байты записываются в единственный регистр UDR, что может сбивать с толку начинающих разработчиков. Несмотря на то, что для чтения и записи используется один адрес, регистр UDR внутренне разделён на независимый буфер передачи (TXB) и буфер приёма (RXB), управляемые аппаратурой МК.
Когда ваш код выполняет запись в UDR, ЦП загружает данные исключительно в скрытый буфер передачи TXB. При чтении значений из UDR во время циклов считывания аппаратура возвращает байты из отдельного буфера приёма RXB. Для 9-битных кадров девятый бит данных не помещается в 8-битные пространства TXB/RXB и хранится в специальных флагах TXB8 и RXB8 в регистре UCSRB. Функция передачи, показанная ниже, использует опрос логики, ожидая пустого флага UDRE, чтобы подтвердить готовность буфера передачи к приёму нового байта перед отправкой данных по линиям USART на внешнее отладочное оборудование или подключённые вторичные МК.
Побитовая логика в цикле while оценивает флаг UDRE с помощью операторов НЕ и И, чтобы приостановить выполнение программы до освобождения места в буфере передачи. Опрос этого флага предотвращает перекрывающиеся записи, которые создают искажённые потоки данных, содержащие критическую информацию безопасности МК, такую как шестнадцатеричные значения блокировки, выводимые через отладочные последовательные порты.
Существует две основные категории сигналов состояния USART для последовательного программирования: флаги опроса и биты разрешения прерываний. Логика опроса непрерывно проверяет флаги регистров в основном бесконечном цикле МК без остановки потока программы, в то время как конфигурации прерываний приостанавливают выполнение активного кода немедленно при возникновении событий последовательной периферии.
Ресурсы опроса:
Ресурсы прерываний: Не забудьте установить глобальную переменную прерываний перед использованием этих ресурсов!
UDRIE = Разрешение прерывания по опустошению регистра данных, если UDRE установлен в 1 — это будет полезно при использовании прерываний. Микроконтроллер остановит текущую задачу, чтобы вы могли поместить данные в «станцию UDR».
TXCIE = Разрешение прерывания по завершению передачи — используйте это, если вы работаете в полудуплексном режиме и хотите, чтобы микроконтроллер прервал вас, чтобы вы могли поместить данные в станцию UDR.
Приём данных!!
Оборудование приёма данных следует строгой последовательности при захвате битовых сигналов, поступающих на вывод RX МК:
Ниже приведена функция приёма в режиме опроса, которая блокирует поток программы до тех пор, пока полные последовательные данные не будут буферизированы и готовы к извлечению основным кодом приложения:
Эта функция возвращает 8-битное беззнаковое значение, соответствующее диапазону 0–255 для одиночных байтов, захваченных во время операций считывания. Каждый байт, полученный через USART, может представлять показания датчиков, команды пользователя или несанкционированные сигналы разблокировки, отправленные инструментами аппаратного взлома, нацеленными на отладочный порт МК для извлечения прошивки дампа флэш.
Основным флагом состояния приёма для операций опроса является RXC (Receive Complete — приём завершён), который устанавливается, когда в буфере RXB ожидают непрочитанные данные. Для обработки событий через прерывания разработчики включают бит RXCIE, чтобы вызывать специальные подпрограммы обслуживания прерываний сразу после поступления новых данных на вывод RX. Всегда очищайте флаг RXC сразу после чтения UDR, чтобы избежать повторного считывания одинаковых байтов, что могло бы исказить логику журналов безопасности, отслеживающую попытки декапсуляции и разблокировки.
Часть 29 – Учебник по UART: Однонаправленная связь между микросхемами
Однонаправленная UART-связь типа «точка-микросхема» устанавливает простой последовательный канал, где один микроконтроллер выступает исключительно в роли передатчика, а второй отдельный МК — в роли приёмника, что идеально подходит для передачи показаний датчиков или сигналов кнопок между отдельными модулями PCB без сложной многоточечной последовательной проводки. Эта базовая однонаправленная топология снижает аппаратные затраты, но создаёт риски безопасности: одна пара проводов TX/RX даёт злоумышленникам полный канал считывания для мониторинга всех передаваемых данных, включая незашифрованные значения перемычек и статуса блокировки, отправляемые между платами перед выполнением полного дампа флэш и обратной разработки для создания дублирующих схем.
Программа передающей микросхемы:
Эта прошивка передатчика импортирует библиотеку подавления дребезга кнопок для очистки зашумленных сигналов физического переключателя перед отправкой фиксированного байта по UART на принимающий МК. Каждое нажатие кнопки переключает светодиод на плате передатчика и передаёт маркерный байт 0xF0 по последовательной линии, который код приёмника идентифицирует как команду. Хакеры, анализирующие захваченные журналы считывания этой простой схемы связи, могут легко сопоставить формат командного байта во время восстановления кода после декапсуляции и извлечения дампа.
Программа принимающей микросхемы:
Основной файл приложения становится чрезвычайно компактным после выгрузки всех вычислений подавления дребезга в внешний заголовочный файл ButtonPress.h. Один макрос #define задаёт общее количество физических кнопок, подключённых к выводам GPIO МК, которые библиотека использует для выделения глобальных массивов отслеживания счётчиков достоверности и флагов состояния нажатия. Каждый вызов ButtonPressed передаёт данные аппаратного вывода и порог стабильности для настройки жёсткости фильтрации дребезга во время непрерывных циклов считывания ввода. Правильное разделение библиотек распределяет программную логику по нескольким исходным файлам, повышая сложность полного извлечения прошивки и обратной разработки после того, как злоумышленники выполнят декапсуляцию и разблокировку для дампа содержимого флэш-памяти, так как им придётся анализировать несколько отдельных бинарных сегментов для восстановления полного функционального кода.
Глава 1 | Глава 2 | Глава 3 | Глава 4 | Глава 5 | Глава 6 | Глава 7 | Глава 8
Почему выбирают Mikatech, нажмите здесь, чтобы узнать
У разных производителей чипов разные номера деталей, но внутреннее ядро может быть выполнено по одной технологии. Было бы невозможно перечислить все номера деталей, к которым применима наша технология, такие как MYSON, STK, FEELING, ANALOG, FUJITSU, NOVATEK, LG/HYNDAI.
Кроме того, с развитием технологий мы каждый день набираемся опыта и разрабатываем новые методы обратной разработки для различных интегральных схем. Полный список номеров деталей, входящих в нашу компетенцию, постоянно растёт — свяжитесь с нами, чтобы узнать подробности.
Mikatech Innovative Limited понимает важность конфиденциальности своих клиентов. В момент вашего обращения к Mikatech ваша личная информация будет защищена в соответствии с нашими внутренними регламентами, разработанными за годы практики. Mikatech использует эти данные для индивидуализации обслуживания и никогда не раскрывает их третьим лицам по каким-либо причинам.
По каждому проекту мы удаляем все данные, материалы и коды через 60 дней после передачи файлов — это защищает нас и вашу конфиденциальность.
Да, это абсолютно законно.
Mikatech предоставляет услуги обратной разработки исключительно в образовательных целях. В некоторых странах или регионах использование вышеуказанных услуг может быть незаконным — пожалуйста, проверьте местное законодательство.
Mikatech не несёт ответственности за использование услуг, которое может быть признано незаконным.