Леонардо (32u4): способы его кирпичного программирования

Когда появился Леонардо, я думаю, что я прочитал несколько статей о том, чтобы быть осторожными, чтобы сделать что-то, что может привести к тому, что он не загрузит никаких новых эскизов, поэтому нужно переписать загрузчик. Потому что я планирую использовать варианты энергосбережения, например. для отключения неиспользуемых аппаратных компонентов, таких как USB-порт, я боюсь сделать что-то неправильно.

Один Леонардо-деликатес, который я нашел до сих пор:

  • Если прерывания отключены, загрузка новых эскизов завершается неудачей, если не нажать кнопку «Сброс», как только в IDE Arduino появится «Загрузка ...»

Какие вещи (за исключением обычных аппаратных средств, которые думают, как подключать выходные сигналы с установленными потенциалами) могут повредить контроллер или потребовать перепрограммировать Leonardo с помощью нового загрузчика?

8 голосов | спросил Thomas S. 20 J000000Sunday14 2014, 22:13:24

4 ответа


1

Если вы загружаете программу, которая меняет скорость ядра USB, она будет почти кирпичной. Что произойдет:

  1. Включение питания, запуск загрузчика, устройство USB, перечисленное на ПК.
  2. Спустя несколько секунд запуск программы, скорость ядра USB изменилась, USB-устройство исчезает с ПК.

Проблема заключается в том, что вам не нужно ударять только сброс в программу, после сброса вам нужно быстро выбрать правильный COM-порт, а затем загрузить до запуска программы.

Redbearlab Blend Micro требует, чтобы в программе пользователя была установлена ​​скорость ядра USB. В их инструкциях по установке есть шаг для редактирования Arduino main.cpp и добавления раздела для этого. Если этот шаг пропущен, проблема выше.

ответил geometrikal 23 J000000Wednesday14 2014, 17:49:42
1

Мне удалось создать кирпичную панель ATMega128RFA1. Загрузочный загрузчик и программное обеспечение, которое я загрузил в него, работали нормально. Но было невозможно стереть /записать ПЗУ.

После проверки того, что произошло, я обнаружил в техническом описании, что некоторые предохранители в ядре AVR предназначены для защиты случайной записи на ПЗУ. Некоторые предохранители безопасности.

Я не нашел ошибку, которая написала в этих байтах (поскольку это была действительно большая программа, и мы были 3 людьми, участвующими в кодировании), но да, мы просто взорвали плавкий предохранитель и потеряли MCU из-за ошибки.

Что касается леонардо, может произойти несколько вещей, но ни одна из них не может блокировать вашу доску, если вы не взорвите один из этих предохранителей.

ответил CopperMaze 27 AM00000030000004531 2014, 03:01:45
1

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

Выдержки:

  

Решение на самом деле концептуально довольно просто. Загрузочный загрузчик   его сама природа предназначена для загрузки новой прошивки на устройство.   Поэтому он будет содержать хотя бы одну инструкцию spm. Поскольку   регистр конфигурации spm должен быть записан не более 4 циклов   это означает, что до команды spm имеется очень мало последовательностей, которые   практически происходят: просто sts, spm или out, последовательности spm. Итак, все, что вы   необходимо найти последовательность в разделе загрузчика; настроить   правый регистр и назовите его.

     

Однако оказалось, что с этим тоже была серьезная проблема.   Инструкции по самопроверке V-USB для самопрограммирования не являются аккуратными   небольшая рутина, но встроены в основной код; так называя это   просто приведет к сбою AVR, поскольку он попытался выполнить оставшуюся часть   загрузчик V-USB.

     

Неприятно, но опять же есть решение. Используя таймер, синхронизированный на   Частота процессора (что легко на AVR), вы можете создать процедуру в   ассемблер, который устанавливает регистры для Bootloader's out, spm   последовательность; называет его и только в тот момент, когда он выполняется первым   цикла самого spm, прерывание таймера отключается, и AVR   должен перейти к вашей процедуре прерывания (в Application space).   процедура прерывания выдает адрес загрузчика, а затем возвращается к   предыдущий код - это процедура, которая устанавливает out, spm   последовательность. Это должно работать, потому что когда вы применяете инструкции spm для   раздел загрузчика, процессор останавливается до его завершения.

В принципе, вы можете сделать какое-то причудливое программирование и заставить загрузчик подключиться к самому себе, что делает MCU бесполезным без специального программиста.

ответил Connor Wolf 27 AM00000060000002631 2014, 06:32:26
0

Тот, о котором я знаю, делает действие Леонарда, как USB-мышь, которая закрывается повсюду и набирает случайные ключи, поэтому вы не можете перепрограммировать ее, не делая своего рода трюк, чтобы обойти это. Но они упоминают об этом в api docs.

ответил EternityForest 23 J000000Wednesday14 2014, 15:18:43

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132