Arduino EEPROM сохраняет старые данные после прошивки новой программой

У меня есть специальный 5V 16MHz Arduino Uno (своего рода макетная плата Uno), который запускает прошивку grbl. После первоначального мигания я вижу все настройки (через последовательный монитор), и все работает. Однако если я внесу какие-либо изменения в файлы прошивки и перепрошью их заново, то увижу, что старые значения настроек не были заменены новыми. Я могу только предположить, что эти значения находятся в EEPROM и не стираются при каждом цикле повторной прошивки. Затем я попробовал программу eeprom_clear из примеров в Arduino IDE, а затем повторно прошил ее новыми настройками прошивки, после чего увидел новые значения настроек.

Я немного покопался и обнаружил, что за это отвечает предохранитель EESAVE. Однако у Uno этот бит предохранителя не запрограммирован (установлен на 1). Почему же тогда я могу видеть старые настройки EEPROM и должен явно запустить программу очистки eeprom перед повторной прошивкой обновленной прошивкой?

, 👍3

Обсуждение

Я почти уверен, что Arduino IDE вообще не загружает eeprom. И, например, в Platform IO CLI есть другая команда для загрузки данных eeprom вместо мигающей памяти программы., @KIIV

IDE-это не так. Программа устанавливает значения в EEPROM. Я просто хочу очищать EEPROM каждый раз, когда загружается новая программа., @electrophile

Также опубликовано на http://forum.arduino.cc/index.php?topic=469061, @per1234

сохраните старую дату сборки в eeprom и при загрузке, если она отличается от текущей сборки, запустите процедуру clear, @dandavis


2 ответа


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


1

Параметр-e в avrdude должен стирать EEPROM только в том случае, если бит предохранителя

Сохранение памяти EEPROM в течение цикла стирания чипа; [EESAVE=0]

не установлено. Однако, похоже, УСТАНОВИТЬ этот бит предохранителя невозможно. (по крайней мере, с АВРДУДЕССОМ.

,