Сохранение EEPROM после программирования на Arduino uno

arduino-uno eeprom programmer

Я использую Arduino Uno, и я использую EEPROM для хранения некоторых настроек. Это прекрасно работает. Но когда я перепрограммирую Arduino, EEPROM уничтожается. Есть ли способ предотвратить это и не менять EEPROM после программирования Arduino?

Я использую программатор USBtinyISP.

Большое вам спасибо за вашу помощь и продвижение вперед.

Вот подробный результат моего программирования:

Sketch uses 5,298 bytes (16%) of program storage space. Maximum is 32,256 bytes.
Global variables use 286 bytes (13%) of dynamic memory, leaving 1,762 bytes for local variables. Maximum is 2,048 bytes.
/Users/fed/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino9/bin/avrdude -C/Users/fed/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino9/etc/avrdude.conf -v -patmega328p -cusbtiny -Uflash:w:/var/folders/lb/5zdjdm6153jcx_5nq32tt7gw0000gn/T/buildb926e4430d002b65d0ca44bda9d693e2.tmp/LED_strip_08.ino.hex:i 

avrdude: Version 6.3, compiled on Jan 17 2017 at 12:01:35
        Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
        Copyright (c) 2007-2014 Joerg Wunsch

        System wide configuration file is "/Users/fed/Library/Arduino15/packages/arduino/tools/avrdude/6.3.0-arduino9/etc/avrdude.conf"
        User configuration file is "/Users/fed/.avrduderc"
        User configuration file does not exist or is not a regular file, skipping

        Using Port                    : usb
        Using Programmer              : usbtiny
avrdude: usbdev_open(): Found USBtinyISP, bus:device: 006:003
        AVR Part                      : ATmega328P
        Chip Erase delay              : 9000 us
        PAGEL                         : PD7
        BS2                           : PC2
        RESET disposition             : dedicated
        RETRY pulse                   : SCK
        serial program mode           : yes
        parallel program mode         : yes
        Timeout                       : 200
        StabDelay                     : 100
        CmdexeDelay                   : 25
        SyncLoops                     : 32
        ByteDelay                     : 0
        PollIndex                     : 3
        PollValue                     : 0x53
        Memory Detail                 :

                                 Block Poll               Page                       Polled
          Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
          ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
          eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
          flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
          lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
          hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
          efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
          lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
          calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
          signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

        Programmer Type : USBtiny
        Description     : USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/
avrdude: programmer operation not supported

avrdude: Using SCK period of 10 usec
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
        To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: Using SCK period of 10 usec
avrdude: reading input file "/var/folders/lb/5zdjdm6153jcx_5nq32tt7gw0000gn/T/buildb926e4430d002b65d0ca44bda9d693e2.tmp/LED_strip_08.ino.hex"
avrdude: writing flash (5298 bytes):

Writing | ################################################## | 100% 7.80s

avrdude: 5298 bytes of flash written
avrdude: verifying flash memory against /var/folders/lb/5zdjdm6153jcx_5nq32tt7gw0000gn/T/buildb926e4430d002b65d0ca44bda9d693e2.tmp/LED_strip_08.ino.hex:
avrdude: load data flash data from input file /var/folders/lb/5zdjdm6153jcx_5nq32tt7gw0000gn/T/buildb926e4430d002b65d0ca44bda9d693e2.tmp/LED_strip_08.ino.hex:
avrdude: input file /var/folders/lb/5zdjdm6153jcx_5nq32tt7gw0000gn/T/buildb926e4430d002b65d0ca44bda9d693e2.tmp/LED_strip_08.ino.hex contains 5298 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 4.98s

avrdude: verifying ...
avrdude: 5298 bytes of flash verified

avrdude done.  Thank you.

, 👍3

Обсуждение

Я считаю, что avrdude позволяет получить доступ к каждому типу памяти независимо, так что это, вероятно, проблема с командами, которые выдает IDE. Другой вариант-использовать avrdude для резервного копирования eeprom, а затем перезаписать его. В принципе, вам нужно ознакомиться с avrdude и выяснить, как вы можете изменить способ его использования IDE. Или же только IDE создаст ваш скетч и использует avrdude вручную для его загрузки., @Chris Stratton

Я должен уточнить, что мой предыдущий комментарий был больше об использовании avrdude для ISP; с моей точки зрения, я не уверен, какое подмножество этого поддерживает загрузчик., @Chris Stratton


1 ответ


1

Вы можете изменить предохранители для Atmega328, чтобы сохранить EEPROM во время стирания микросхемы (для программирования ISP). В принципе, если вы используете USBtiny, подключенный к UNO с помощью контактного разъема 3x2, вы используете программирование ISP. Это означает, что стирание чипа также стирает EEPROM, если значение EESAVE предохранителя равно 1 (незапрограммировано).

Загрузка через загрузчик Arduino (это означает, что UNO подключен непосредственно к компьютеру, и нет другого устройства, такого как USBtiny). Тогда EEPROM должен быть сохранен.

,

Итак, вы хотите сказать, что замена предохранителей (я понятия не имею, как это сделать) может сработать, а может и не сработать. Но не использование Arduino IDE, а использование AVRdude в командной строке должно работать?, @Fed

@Fed EEPROM может быть изменен avrdude, но Arduino обычно ничего с ним не делает (вы можете увидеть всю команду в Arduino IDE, если вы включите подробную загрузку)., @KIIV

Я обновил подробный вывод Arduino IDE, когда программировал Arduino. Есть какие-нибудь предложения?, @Fed

@fed Самое главное - это USBtiny-он выполняет стирание чипа и без предохранителя EESAVE, запрограммированного на 0, он также стирает EEPROM., @KIIV