Как очистить EEPROM на APM без терминала

Часто повторяется один и тот же вопрос: «в крайних версиях прошивки, например в 3.2 (>3.2.rc-12) нет терминала, как тогда сделать очистку EEPROM»? Отвечаю.

На данный момент в Mission Planner явно присутствует только кнопка «Reset to Default», которая сбрасывает настройки контроллера на «заводские», т.е. проставляет первоначальные значения и далее подразумевается калибровка. Но случается, что проблема сохраняется и после этого помогает очистка EEPROM. На 100% это не утверждаю, т.к. исходный код функции кнопки не смотрел. И вот тут возникают опять вопросы, чистится ли EEPROM этой кнопкой?…

 

 

Чтобы явно очистить данные, есть 3 способа:

1. Народный метод.

Запускаем среду Arduino, выбираем скетч, меню Файл — Примеры — EEPROM — eeprom_clear. Меняем конечное значение 512 в цикле очистки на 4096, согласно даташиту на ATmega2560.

Скетч в среде Arduino.

Скетч в среде Arduino.

2. Очистка старой прошивкой.

Загружаем в контроллер старую (3.0.1, 3.1-rc5, 3.1…) прошивку обычным способом. Делаем очистку стандартными командами setup erase, setup reset, описанными в статье по ссылке.

3. Штатный метод в MP. (Не работает!)

Имеется кнопка «WIPE eeprom», но она спрятана. Необходимо вызвать скрытое окно MP, нажав комбинацию клавиш «Ctrl+F» так, чтобы не вызвать поиск, например по Full Parameter List. Для этого сначала щелкнуть мышкой по пустой области окна.

Как я не пробовал нажимать эту кнопку, так и появляется ошибка отсутствия COM порта.

4. Сброс на заводские настройки через Mission Planner.

Первым делом нам надо включить режим отображения продвинутых настроек. Делается это включением галочки «Advanced View» во вкладке Config/Tuning.

ParamReset_MPAdvancedView[1]

Подключите контроллер к Mission Planner, затем откройте вкладку Config/Tuning — Full Parameter List и нажмите кнопку «Reset to Default». Настройки будут сброшены на заводские. После нажатия надо подождать секунд 10 и желательно перезагрузить контроллер.

ParamReset_MPResetToDefault[1]

PS: Прошу любителей ковыряться в коде глянуть, что делает кнопка «Reset to Default», чтобы раз и навсегда ответить на вопрос, чистит ли она EEPROM.


Если вы нашли ошибку на странице, то нажмите Shift + Enter или нажмите здесь, чтобы уведомить нас.

35 комментариев (я)

  1. Евгений Ответить

    Будьте осторожны, у меня после чистки EEPROM народным методом, APM2.6 перестал подавать признаки того, что он контроллер. Кроме зеленого LED (Alive) ничего не горит. При подключении по USB определяется нормально, но в Mission Planer приконектиться нельзя! PPM-encoder шьется, контроллер нет. Юлиан подскажите как исправить. Думаю слетел загрузчик APM контроллера(

    1. raefa Автор Ответить

      КАК? В коде явно видно, что очищается только EEPROM, а не место под код и загрузчик.
      По признакам похоже, что действительно слетел загрузчик в ATmega2560. Залейте заново и еще для интереса попробуйте очистить EEPROM таким же способом.

      PS: Вопрос только к Юлиану и почему именно к нему? 🙂

      1. Евгений Ответить

        К сожалению нет программатора( Куплю на днях и проделаю все вышесказанное Вами снова, самому стало интересно)

        PS: Александр простите), был не внимателен, думал этот сайт ведет Юлиан 😉

            1. gtsky Ответить

              Установил arduinoIDE, подключил контроллер открыл ардуино ид далее инструменты — выбрал свой порт подключил — выбрал плату мега 2560- далее Файл — примеры EEPROM — EEProm clear и согласно 1. Народный методё из даннйо статьи, он прошился и остался гореть только один зеленый светодиодёё

      2. Евгений Ответить

        Чтот не получается((( avrdude: warning: cannot set sck period. please check for usbasp firmware update все портит

        Лог фьюзы:
        ———————————-
        avrdude: warning: cannot set sck period. please check for usbasp firmware update
        .
        avrdude: AVR device initialized and ready to accept instructions
        avrdude: Device signature = 0x1e9801
        avrdude: reading input file «0xFD»
        avrdude: writing efuse (1 bytes):
        avrdude: 1 bytes of efuse written
        avrdude: verifying efuse memory against 0xFD:
        avrdude: load data efuse data from input file 0xFD:
        avrdude: input file 0xFD contains 1 bytes
        avrdude: reading on-chip efuse data:
        avrdude: verifying …
        avrdude: 1 bytes of efuse verified
        avrdude: reading input file «0xD8»
        avrdude: writing hfuse (1 bytes):
        avrdude: 1 bytes of hfuse written
        avrdude: verifying hfuse memory against 0xD8:
        avrdude: load data hfuse data from input file 0xD8:
        avrdude: input file 0xD8 contains 1 bytes
        avrdude: reading on-chip hfuse data:
        avrdude: verifying …
        avrdude: 1 bytes of hfuse verified
        avrdude: reading input file «0xFF»
        avrdude: writing lfuse (1 bytes):
        avrdude: 1 bytes of lfuse written
        avrdude: verifying lfuse memory against 0xFF:
        avrdude: load data lfuse data from input file 0xFF:
        avrdude: input file 0xFF contains 1 bytes
        avrdude: reading on-chip lfuse data:
        avrdude: verifying …
        avrdude: 1 bytes of lfuse verified
        avrdude: reading input file «0x0F»
        avrdude: writing lock (1 bytes):
        avrdude: 1 bytes of lock written
        avrdude: verifying lock memory against 0x0F:
        avrdude: load data lock data from input file 0x0F:
        avrdude: input file 0x0F contains 1 bytes
        avrdude: reading on-chip lock data:
        avrdude: verifying …
        avrdude: 1 bytes of lock verified

        avrdude: safemode: Fuses OK

        avrdude done. Thank you.
        ———————————-

        Лог:
        ———————————-
        avrdude: warning: cannot set sck period. please check for usbasp firmware update
        .
        avrdude: AVR device initialized and ready to accept instructions
        avrdude: Device signature = 0x1e9801
        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: warning: cannot set sck period. please check for usbasp firmware update
        .
        avrdude: reading input file «stk500boot_v2_mega2560.hex»
        avrdude: input file stk500boot_v2_mega2560.hex auto detected as Intel Hex
        avrdude: writing flash (262106 bytes):
        avrdude: 262106 bytes of flash written
        avrdude: verifying flash memory against stk500boot_v2_mega2560.hex:
        avrdude: load data flash data from input file stk500boot_v2_mega2560.hex:
        avrdude: input file stk500boot_v2_mega2560.hex auto detected as Intel Hex
        avrdude: input file stk500boot_v2_mega2560.hex contains 262106 bytes
        avrdude: reading on-chip flash data:
        avrdude: verifying …
        avrdude: verification error, first mismatch at byte 0x1e000
        0xff != 0x0d
        avrdude: verification error; content mismatch

        avrdude: safemode: Fuses OK

        avrdude done. Thank you.
        ———————————-

        1. raefa Автор Ответить

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

          Avrdude предлагает обновить прошивку в программаторе, в которой есть исправление.
          avrdude: warning: cannot set sck period. please check for usbasp firmware update
          Я сам это делать не пробовал, но скорее всего должно помочь.
          А по поводу того, что верификация проходит с ошибками, более подробно в комментариях статьи (это косяк дешевого USBasp.):

          Прошиваем контроллер APM. Загрузчик

        2. Евгений Ответить

          Повторил еще раз очистку EEPROM, все прошло успешно! Пользоваться программатором больше не пришлось 😉 Видимо в первый раз я где-то затупил…

          P.S. Прошивка должна слетать?

          1. raefa Автор Ответить

            Когда слетать? Куда слетать?
            При очистке EEPROM не должна. При новом подключении платы, MP должен цепляться без каких-либо приколов.
            Ну а сейчас необходимо заново через MP залить прошивку и выполнить ряд настроек.
            Удачи!

  2. hatuul Ответить

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

  3. Александр Ответить

    Странно. У меня точно такая же история, как у Евгения. Выполняю следующие шаги:
    Подключаю плату. Заливаю прошивку. Выхожу из МП. Запускаю среду ардуино, выбираю плату Atmega 2560, открываю скетч очистки EEPROM, меняю значение цикла на 4096, заливаю скетч на плату и….плата перестает загружаться. передергивания USB не помогают. лампочка Alive горит, но плата не грузится и МП не коннектится. приходится заново заливать прошивку через МП. и плата оживает…

    1. raefa Автор Ответить

      А не могли бы посмотреть любой программой прошивальщиком, что видно во Flash и EEPROM до и после выполнения очистки?

    2. Cooler Ответить

      Там с новыми версиями ардуино ИДЕ пошли какие то другие пляски. У меня например засветить светодиод прямо в setup() никак не вышло. Да и вывод 13 не работает. Я смог почистить ЕЕПРОМ таким кодом

      #include

      #define PIN 26 //код пина к которому подключен светодиод которым будем мигать 25 или 26 или 27 (разные цвета)
      void setup() {
      pinMode(PIN, OUTPUT);

      delay(2000);
      for (int i = 0 ; i < 4096 ; i++) {
      EEPROM.write(i, 0);
      }

      //задержка 10 секунд что бы уж точно было понятно что setup() вызывается (можно удалить, впринципе)
      delay(10000);
      }

      void loop() {
      //мигаем светодиодом в главном лупе, индикация того что setup() прошел
      digitalWrite(PIN, HIGH);
      delay(500);
      digitalWrite(PIN, LOW);
      delay(500);
      }

    1. raefa Автор Ответить

      Ничего страшного. Надо восстановить загрузчики и залить прошивки. Т.е. сделать все с нуля.

            1. raefa Автор Ответить

              3.1) Прошиваем PPM-encoder. Загрузчик
              4.1) Прошиваем контроллер APM. Загрузчик
              3) Прошиваем PPM-encoder
              4) Прошиваем контроллер APM

              1. gtsky Ответить

                спасибо, но я читал и что то непонял чем иы шьем згрузчики??? что то меня смущает опять ))) не похороню ли я его вообще???? И это еще нужен программатор(((

                1. raefa Автор Ответить

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

                  Чем шьем? Самое лучшее — avrdude.

                  Если фьюзы не трогать, то шанс похоронить — мал.

  4. KoriSkull Ответить

    Если после чистки EEPROM поставить крайнюю прошивку APM, есть вероятность того что придется снова чистить EEPROM?

    1. raefa Автор Ответить

      Я рекомендую чистить EEPROM всегда. До заливки прошивки и после. Если заливаете 3.2.1, то должно быть достаточным сделать сброс штатными средствами в MP.

  5. Константин Ответить

    Всем добрый день!
    Возникла следующая проблема, надеюсь на вашу помощь и постараюсь описать все по этапно:
    Купил АПМ2.6 на алике вместе с 8 ЖПС., подключил к МП через юсб, установил драйвера, МП видит 7сом порт. Начал производить заливку прошивки , после того ка прошивка на коптер была установлена, выставил скорость порта, нажал на коннект….
    Но коннект не произошел….
    Я решил перепрошить атмегу 32U2, перепрошил через ФЛИП, снял перемычку, и подключил к МП.
    Устанавливаю прошивку коптер 3.1.5, все прекрасно заливается , но опять коннектиться не хочет!
    Вот видео :
    https://youtu.be/wgmqEJuXkrI

    далее пробую очистить Еепром через среду андурино, устанавливая значение в цикле очистки…
    все очищается и сохраняюсь.
    пробую заливать разные версии коптерных прошивок… они заливаются но АПМ не коннектится….
    Что делать не знаю!

  6. раймонд Ответить

    в один момент просто коптер начал тупить, даю газу он не взлетает, а когда убераю газ, коптер продолжает газовать , уже опустились руки, пробовал многое

  7. Дамир Ответить

    Добрый день!
    Почистил eeprom, теперь горит только alive и не подключается к MP.

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

    Загружал через Arduino Nano328P (old bootloader) все загрузилось нормально, но проблема не прошла. Alive и не подключается к MP

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *