Могу ли я повредить Arduino, если отключить от сети во время загрузки?
Когда я возился с кодом и загружал скетч на плату Arduino, я почти случайно вытащил USB-шнур. Все хорошо, но потом я начал думать, что было бы, если бы я вытащил его.
Насколько безопасен avrdude? Может ли это повредить или испортить плату? Я бы предположил, что вам просто нужно будет снова загрузить в него код... но что произойдет до того, как вы загрузите новый код? Я видел кое-что о том, как вы всегда можете загрузить новый код, если загрузчик не поврежден, но я бы предположил, что возникнут некоторые проблемы. Если бы это произошло, должен ли я отключить все подключенное на случай, если Arduino запишет ВЫСОКИЙ уровень на вход (или аналогичный), который может повредить компонент?
3 ответа
Лучший ответ:
AVRDUDE на самом деле не выполняет запись, он просто направляет ее. Фактические записи выполняются либо загрузчиком, либо прошивкой / оборудованием ISP внутри самого MCU.
С загрузчиком это зависит от того, как он закодирован, но в худшем случае он завершит работу с байтом flash или страницей или страницей EEPROM, заполненной нулем или единицей, а затем не сможет продолжить общение с AVRDUDE, прерывая программирование.
При использовании ISP команда записи страницы никогда не будет получена, и программирование будет прервано на последней полной странице. Байты предохранителя выполняются поодиночке, и поэтому программирование одного предохранителя можно рассматривать как атомарную операцию.
В любом случае операция стирания микросхемы должна привести MCU в известное рабочее состояние, за исключением замены предохранителя.
* С загрузчиком это зависит от того, как он закодирован, но в худшем случае он завершит работу с байтом flash или страницей или страницей EEPROM, заполненной нулем или единицей, а затем не сможет поддерживать дальнейшую связь с AVRDUDE, прерывая программирование.* Подожди... как он может прервать его, если нет питания?, @Anonymous Penguin
@AnnonomusPerson: Внешнее питание, USB / последовательное программирование., @Ignacio Vazquez-Abrams
Что делать, если я использую только USB-питание? Это не отвечает на мой вопрос о вашем ответе., @Anonymous Penguin
Если все, что у вас есть, это питание от USB, то все просто останавливается. Загрузчик не может завершить текущий байт. Но это не повредит ни одной флэш-памяти., @Ignacio Vazquez-Abrams
Все должно быть хорошо.
Большинство плат не требуют повторной загрузки загрузчика каждый раз, когда вы загружаете скетч, поэтому ваша программа будет повреждена, а загрузчик - нет. Я предполагаю, что загрузчик похож на загрузчик на других чипах, которые я видел*, он остановит выполнение, если код не будет работать должным образом. Я бы также подумал, что micro не примет передачу, если ее контрольная сумма отсутствует.
На вашем месте я бы не стал этого делать, но вы могли бы быть немного менее осторожны в подобных вещах.
*: чип пропеллера, среди прочего
Очень немногие встроенные микроконтроллеры имеют какие-либо средства улавливания ошибок. Если под код не работает должным образом
вы подразумеваете, что код в памяти программы недействителен / поврежден, вы ошибаетесь. MCU просто с радостью продолжит выполнение недопустимого кода, что приведет к неопределенному поведению. Если вы имеете в виду, что загрузчик будет игнорировать недопустимые команды, это полностью зависит от загрузчика., @Connor Wolf
Да, ничего не нужно ловить или проверять на наличие ошибок в пользовательском коде в Optiboot. Для этого и предназначен сторожевой таймер., @Cybergibbons
Одна из функций безопасности, которая до сих пор не упоминалась, заключается в том, что ATmega328 имеет набор битов блокировки, которые препятствуют доступу на чтение / запись к определенным областям. Насколько мне известно, при настройке ардуино эти биты всегда настроены на предотвращение записи в область загрузчика, если в данный момент не активна команда "Записать загрузчик", и поскольку вы можете использовать эту команду только с внешним программатором, вы всегда можете написать новый загрузчик, если что-то все идет не так.
Я думаю, что единственный способ замуровать плату (в смысле оставить микроконтроллер в работоспособном, но почти безвозвратно невосприимчивом состоянии) - это записать неправильные настройки предохранителей.
- "avrdude: stk500_getsync(): not in sync: resp=0x00", или некто по имени Avr не позволяет мне загрузить мою программу
- avrdude: ошибка проверки, первое несоответствие в байте 0x0000 : 0x00 != 0x16 с использованием USBasp
- Загрузить код на Arduino Leonardo с помощью командной строки
- Где параметры avrdude определяются в Arduino IDE?
- Проблема с загрузкой скетча в Леонардо
- Не могу загружать шестнадцатеричные файлы вне Arduino IDE на Pro Micro
- avrdude: Ошибка: butterfly programmer uses avr_write_page() but does not provide a cmd() method
- Невозможно загрузить скетчс помощью Platformio (но Arduino IDE работает)
Итак, я случайно сделал это с моим Arduino Nano 33 BLE, и теперь мой компьютер не может его видеть.. Я попробовал перезагрузить компьютер, нажать кнопку сброса на плате, отсоединить и снова подключить его, но по-прежнему ничего. Есть ли способ оживить его?, @Coy
@Coy, используй двойной сброс, чтобы активировать загрузчик, @Juraj