Arduino EEPROM сохраняет старые данные после прошивки новой программой
У меня есть специальный 5V 16MHz Arduino Uno (своего рода макетная плата Uno), который запускает прошивку grbl. После первоначального мигания я вижу все настройки (через последовательный монитор), и все работает. Однако если я внесу какие-либо изменения в файлы прошивки и перепрошью их заново, то увижу, что старые значения настроек не были заменены новыми. Я могу только предположить, что эти значения находятся в EEPROM и не стираются при каждом цикле повторной прошивки. Затем я попробовал программу eeprom_clear из примеров в Arduino IDE, а затем повторно прошил ее новыми настройками прошивки, после чего увидел новые значения настроек.
Я немного покопался и обнаружил, что за это отвечает предохранитель EESAVE. Однако у Uno этот бит предохранителя не запрограммирован (установлен на 1). Почему же тогда я могу видеть старые настройки EEPROM и должен явно запустить программу очистки eeprom перед повторной прошивкой обновленной прошивкой?
@electrophile, 👍3
Обсуждение2 ответа
Flash-это не EEPROM. Когда вы перепрограммируете флэш, она не касается EEPROM.
Он управляется флагом-U...
, чтобы включить
:
avrdude ... -Uflash:w:<hex file>
Если вы хотите настроить EEPROM на что-то конкретное, вы можете использовать avrdude
для программирования файла EEPROM, если загрузчик поддерживает его (не уверен, что это так, поэтому для этого может потребоваться программатор):
avrdude ... -Ueeprom:w:<hex file>
Я не хочу программировать EEPROM. Я просто хочу очищать его содержимое всякий раз, когда я перепрошиваю Uno новой программой. Когда вы записываете загрузчик Arduino, этот бит остается неизменным, и, следовательно, всякий раз, когда IDE запускает "avrdude" с параметром "- e", он стирает флэш-память и eeprom. я прав? Если это так, то, похоже, это не относится к моему Uno, и я надеюсь понять, почему., @electrophile
Все это связано с тем, на что способен загрузчик. Вы не программируете плату, вы загружаете встроенное ПО для того, чтобы плата сама программировалась - это совсем другой сценарий., @Majenko
Вы можете добавить кнопку "сброс к заводским настройкам" - если ее удерживать во время включения питания (или сброса платы, или программирования и т. Д.), Она стирает EEPROM., @Majenko
Параметр-e в avrdude должен стирать EEPROM только в том случае, если бит предохранителя
Сохранение памяти EEPROM в течение цикла стирания чипа; [EESAVE=0]
не установлено. Однако, похоже, УСТАНОВИТЬ этот бит предохранителя невозможно. (по крайней мере, с АВРДУДЕССОМ.
- о том, как разделить один внешний последовательный EEprom с помощью двух микроконтроллеров?
- Как постоянно считывать/записывать переменные на Arduino Due (без EEPROM/shield)?
- Пытаюсь прошить ESP8266 с помощью Arduino UNO
- Программирование микроконтроллера Attiny85 без arduino
- Заменить предохранители Arduino Uno (может ли Arduino Uno заменить свои собственные предохранители?)
- Как увеличить срок службы EEPROM?
- Использование EEPROM в цикле ()
- Светодиод Arduino мигает одним нажатием кнопки
Я почти уверен, что Arduino IDE вообще не загружает eeprom. И, например, в Platform IO CLI есть другая команда для загрузки данных eeprom вместо мигающей памяти программы., @KIIV
IDE-это не так. Программа устанавливает значения в EEPROM. Я просто хочу очищать EEPROM каждый раз, когда загружается новая программа., @electrophile
Также опубликовано на http://forum.arduino.cc/index.php?topic=469061, @per1234
сохраните старую дату сборки в eeprom и при загрузке, если она отличается от текущей сборки, запустите процедуру clear, @dandavis