Сколько циклов перезаписи flash памяти гарантируется для avr микроконтроллеров

Обновлено: 03.07.2024

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Это они осторожничают.. Реально на практике цифры такие 1 000 000 для FLASH и не менее 10 000 000 для EPROM откуда такие цифры? какая-такая практика позволила вам миллион раз прошить одну и ту же микросхему?!

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

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

В то время как производители контролеров PIC об этом не упоминают.

Если ты невнимательно изучаешь даташиты на PICи, это не означает что там об этом не упоминают. Кури параметры D120-D134.

Приглашаем всех желающих 25/11/2021 г. принять участие в вебинаре, посвященном антеннам Molex. Готовые к использованию антенны Molex являются компактными, высокопроизводительными и доступны в различных форм-факторах для всех стандартных антенных протоколов и частот. На вебинаре будет проведен обзор готовых решений и перспектив развития продуктовой линейки. Разработчики смогут получить рекомендации по выбору антенны, работе с документацией и поддержкой, заказу образцов.

Pahan писал (а):
"ты невнимательно изучаешь даташиты на PICи"

Да, видимо не усмотрел

А что вообще можно сказать по поводу JetFlash, т.е. тех самых которые сейчас продаются чуть-ли не на каждом углу. У них число циклов стирания/записи неограничено что-ли?

Приглашаем 30 ноября всех желающих посетить вебинар о литиевых источниках тока Fanso (EVE). Вы узнаете об особенностях использования литиевых источников питания и о том, как на них влияют режим работы и условия эксплуатации. Мы расскажем, какие параметры важно учитывать при выборе литиевого ХИТ, рассмотрим «подводные камни», с которыми можно столкнуться при неправильном выборе, разберем, как правильно проводить тесты, чтобы убедиться в надежности конечного решения. Вы сможете задать вопросы представителям производителя, которые будут участвовать в вебинаре

УСТРОЙСТВО МИКРОКОНТРОЛЛЕРОВ AVR

Память программ предназначена для хранения последовательности команд, управляющих функционированием микроконтроллера, и имеет 16-ти битную организацию. Все AVR имеют Flash-память программ, которая может быть различного размера - от 1 до 256 КБайт. Ее главное достоинство в том, что она построена на принципе электрической перепрограммируемости, т. е. допускает многократное стирание и запись информации. Программа заносится во Flash-память AVR как с помощью обычного программатора, так и с помощью SPI-интерфейса, в том числе непосредственно на собранной плате. Возможностью внутрисхемного программирования (функция ISP) через коммуникационный интерфейс SPI обладают все микроконтроллеры AVR, кроме Tiny11 и Tiny28.
Все микроконтроллеры семейства Mega имеют возможность самопрограммирования, т. е. самостоятельного изменения содержимого своей памяти программ. Эта особенность позволяет создавать на их основе очень гибкие системы, алгоритм работы которых будет меняться самим микроконтроллером в зависимости от каких-либо внутренних условий или внешних событий.
Гарантированное число циклов перезаписи Flash-памяти у микроконтроллеров AVR второго поколения составляет не менее 10 тыс. циклов при типовом значении 100 тыс. циклов. (В официальной технической документации Atmel Corp. указывается значение 10 тыс. циклов.)

Память данных разделена на три части: регистровая память, оперативная память (ОЗУ - оперативное запоминающее устройство или RAM) и энергонезависимая память (ЭСППЗУ или EEPROM).

Регистровая память (РОН и РВВ)

Регистровая память включает 32 регистра общего назначения (РОН или GPR), объединенных в файл, и служебные регистры ввода/вывода (РВВ). И те и другие расположены в адресном пространстве ОЗУ, но не являются его частью.
В области регистров ввода/вывода расположены различные служебные регистры (регистры управления микроконтроллером, регистры состояния и т. п.), а также регистры управления периферийными устройствами, входящими в состав микроконтроллера. По сути, управление микроконтроллером заключается в управлении этими регистрами.

Энергонезависимая память данных (EEPROM)

Для долговременного хранения различной информации, которая может изменяться в процессе функционирования микроконтроллерной системы, используется EEPROM-память. Все AVR имеют блок энергонезависимой электрически перезаписываемой памяти данных EEPROM от 64 Байт до 4 КБайт. Этот тип памяти, доступный программе микроконтроллера непосредственно в ходе ее выполнения, удобен для хранения промежуточных данных, различных констант, коэффициентов, серийных номеров, ключей и т.п. EEPROM может быть загружена извне как через SPI интерфейс, так и с помощью обычного программатора. Число циклов стирание/запись - не менее 100 тыс.

Оперативная память (ОЗУ или RAM)

Внутренняя оперативная статическая память Static RAM (SRAM) имеет байтовый формат и используется для оперативного хранения данных.
Размер оперативной памяти может варьироваться у различных чипов от 64 Байт до 4 КБайт. Число циклов чтения и записи в RAM не ограничено, но при отключении питающего напряжения вся информация теряется.
Для некоторых микроконтроллеров возможна организация подключения внешнего статического ОЗУ объемом до 64К.

Порты ввода/вывода (I/O)

Система прерываний - одна из важнейших частей микроконтроллера. Все микроконтроллеры AVR имеют многоуровневую систему прерываний. Прерывание прекращает нормальный ход программы для выполнения приоритетной задачи, определяемой внутренним или внешним событием.
Для каждого такого события разрабатывается отдельная программа, которую называют подпрограммой обработки запроса на прерывание (для краткости - подпрограммой прерывания), и размещается в памяти программ.
При возникновении события, вызывающего прерывание, микроконтроллер сохраняет содержимое счетчика команд, прерывает выполнение центральным процессором текущей программы и переходит к выполнению подпрограммы обработки прерывания.
После выполнения подпрограммы прерывания осуществляется восстановление предварительно сохраненного счетчика команд и процессор возвращается к выполнению прерванной программы.
Для каждого события может быть установлен приоритет. Понятие приоритет означает, что выполняемая подпрограмма прерывания может быть прервана другим событием только при условии, что оно имеет более высокий приоритет, чем текущее. В противном случае центральный процессор перейдет к обработке нового события только после окончания обработки предыдущего.

Микроконтроллеры AVR имеют в своем составе от 1 до 4 таймеров/счетчиков с разрядностью 8 или 16 бит, которые могут работать и как таймеры от внутреннего источника тактовой частоты, и как счетчики внешних событий.
Их можно использовать для точного формирования временных интервалов, подсчета импульсов на выводах микроконтроллера, формирования последовательности импульсов, тактирования приемопередатчика последовательного канала связи. В режиме ШИМ (PWM) таймер/счетчик может представлять собой широтно-импульсный модулятор и используется для генерирования сигнала с программируемыми частотой и скважностью. Таймеры/счетчики способны вырабатывать запросы прерываний, переключая процессор на их обслуживание по событиям и освобождая его от необходимости периодического опроса состояния таймеров. Поскольку основное применение микроконтроллеры находят в системах реального времени, таймеры/счетчики являются одним из наиболее важных элементов.

Сторожевой таймер (WDT)

Сторожевой таймер (WatchDog Timer) предназначен для предотвращения катастрофических последствий от случайных сбоев программы. Он имеет свой собственный RC-генератор, работающий на частоте 1 МГц. Как и для основного внутреннего RC-генератора, значение 1 МГц является приближенным и зависит прежде всего от величины напряжения питания микроконтроллера и от температуры.
Идея использования стоpожевого таймеpа предельно проста и состоит в pегуляpном его сбpасывании под упpавлением пpогpаммы или внешнего воздействия до того, как закончится его выдеpжка вpемени и не пpоизойдет сбpос пpоцессоpа. Если пpогpамма pаботает ноpмально, то команда сбpоса стоpожевого таймеpа должна pегуляpно выполняться, пpедохpаняя поцессоp от сбpоса. Если же микpопpоцессоp случайно вышел за пpеделы пpогpаммы (напpимеp, от сильной помехи по цепи питания) либо зациклился на каком-либо участке пpогpаммы, команда сбpоса стоpожевого таймеpа скоpее всего не будет выполнена в течение достаточного вpемени и пpоизойдет полный сбpос пpоцессоpа, инициализиpующий все pегистpы и пpиводящий систему в pабочее состояние.

Аналоговый компаратор (AC)

Аналоговый компаратор (Analog Comparator) сравнивает напряжения на двух выводах (пинах) микроконтроллера. Результатом сравнения будет логическое значение, которое может быть прочитано из программы.
Выход аналогового компаратора можно включить на прерывание от аналогового компаратора. Пользователь может установить срабатывание прерывания по нарастающему или спадающему фронту или по переключению.
Присутствует у всех современных AVR, кроме Mega8515

Аналого-цифровой преобразователь (A/D CONVERTER)

Аналого-цифровой преобразователь (АЦП) служит для получения числового значения напряжения, поданного на его вход. Этот результат сохраняется в регистре данных АЦП. Какой из выводов (пинов) микроконтроллера будет являться входом АЦП, определяется числом, занесенным в соответствующий регистр.

Универсальный последовательный приемопередатчик (UART или USART)

Универсальный асинхронный или универсальный синхронно/асинхронный приемопередатчик (Universal Synchronous/Asynchronous Receiver and Transmitter - UART или USART) - удобный и простой последовательный интерфейс для организации информационного канала обмена микроконтроллера с внешним миром. Способен работать в дуплексном режиме (одновременная передача и прием данных). Он поддерживает протокол стандарта RS-232, что обеспечивает возможность организации связи с персональным компьютером. (Для стыковки МК и компьютера обязательно понадобится схема сопряжения уровней сигналов. Для этого существуют специальные микросхемы, например MAX232.)

Последовательный периферийный интерфейс SPI

Последовательный периферийный трехпроводный интерфейс SPI (Serial Peripheral Interface) предназначен для организации обмена данными между двумя устройствами. С его помощью может осуществляться обмен данными между микроконтроллером и различными устройствами, такими, как цифровые потенциометры, ЦАП/АЦП, FLASH-ПЗУ и др. С помощью этого интерфейса удобно производить обмен данными между несколькими микроконтроллерами AVR.
Кроме того, через интерфейс SPI может осуществляться программирование микроконтроллера.

Двухпроводной последовательный интерфейс TWI

Двухпроводной последовательный интерфейс TWI (Two-wire Serial Interface) является полным аналогом базовой версии интерфейса I2C (двухпроводная двунаправленная шина) фирмы Philips. Этот интерфейс позволяет объединить вместе до 128 различных устройств с помощью двунаправленной шины, состоящей из линии тактового сигнала (SCL) и линии данных (SDA).

Тактовый генератор вырабатывает импульсы для синхронизации работы всех узлов микроконтроллера. Внутренний тактовый генератор AVR может запускаться от нескольких источников опорной частоты (внешний генератор, внешний кварцевый резонатор, внутренняя или внешняя RC-цепочка). Минимальная допустимая частота ничем не ограничена (вплоть до пошагового режима). Максимальная рабочая частота определяется конкретным типом микроконтроллера и указывается Atmel в его характеристиках, хотя практически любой AVR-микроконтроллер с заявленной рабочей частотой, например, в 10 МГц при комнатной температуре легко может быть "разогнан" до 12 МГц и выше.

Система реального времени (RTC)

RTC реализована во всех микроконтроллерах Mega и в двух кристаллах "classic" - AT90(L)S8535. Таймер/счетчик RTC имеет отдельный предделитель, который может быть программным способом подключен или к источнику основной тактовой частоты, или к дополнительному асинхронному источнику опорной частоты (кварцевый резонатор или внешний синхросигнал). Для этой цели зарезервированы два вывода микросхемы. Внутренний осциллятор оптимизирован для работы с внешним "часовым" кварцевым резонатором 32,768 кГц.

AVR функционируют при напряжениях питания от 1,8 до 6,0 Вольт. Ток потребления в активном режиме зависит от величины напряжения питания и частоты, на которой работает микроконтроллер, и составляет менее 1 мА для 500 кГц,5 . 6 мА для 5 МГц и 8 . 9 мА для частоты 12 МГц.
AVR могут быть переведены программным путем в один из трех режимов пониженного энергопотребления.
Режим холостого хода (IDLE). Прекращает работу только процессор и фиксируется содержимое памяти данных, а внутренний генератор синхросигналов, таймеры, система прерываний и сторожевой таймер продолжают функционировать. Ток потребления не превышает 2,5 мА на частоте 12 МГц.
Стоповый режим (POWER DOWN). Сохраняется содержимое регистрового файла, но останавливается внутренний генератор синхросигналов, и, следовательно, останавливаются все функции, пока не поступит сигнал внешнего прерывания или аппаратного сброса. При включенном сторожевом таймере ток потребления в этом режиме составляет около 80 мкА, а при выключенном - менее 1 мкА. (Все приведенные значения справедливы для напряжения питания 5 В).
Экономичный режим (POWER SAVE). Продолжает работать только генератор таймера, что обеспечивает сохранность временной базы. Все остальные функции отключены.

Почитав наш форум, стало ясно, что не все понимают разницу между прошивкой и исходником, FLASH и EEPROM. Чтобы данных вопросов больше не возникало, решил написать этот краткий обзор. Возьмем, к примеру, МК ATMega16. Внутри данного контроллера имеются 2 основные области памяти: ПЗУ, она же память программ или flash-память, и ОЗУ, она же память данных или SRAM. В довесок ко всему этому идет память для хранения данных (EEPROM).

Память программ

Память программ используется для хранения так называемой прошивки. Прошивка представляет из себя набор инструкций (команды и операнды) в машинных кодах, понятных контроллеру, в соответствии с которыми контроллер выполняет требуемую последовательность действий. Прошивку получают посредством компилятора. Компилятор – это программа, которая выполняет преобразование текста, написанного на каком-либо языке программирования (исходник), в код машинных инструкций (прошивка, hex-файл). Каждая инструкция имеет длину 16 или 32 бита (в основном 16 бит), а также имеет адрес, под которым она хранится во flash-памяти.

flash-память, и ОЗУ

Так как объем flash-памяти контроллера составляет 16 кбайт (16384 байта), то в него можно впихнуть 8192 16-ти битных инструкции (8К х 16). Кроме основной программы во flash-памяти могут быть размещены различные константы, значения которых используются при выполнении программы и которые не могут быть изменены, а также может быть секция бутлоадера (сморим статью про fuse-биты). Число циклов перепрограммирования flash-памяти составляет 10000. Т.е. после 10000 (или около того) циклов возможно будет запись с ошибками, либо вообще программа не запишется. Пугаться не стоит, если немного посчитать, то получается чтобы дойти до этого надо шить контроллер каждую минуту в течение примерно семи дней без отрыва на сон, перекуры, распитие пива и прочие радости холостой или семейной (у кого как) жизни.

Память данных

память данных состоит из: регистрового файла

Возьмем, к примеру, порты ввода/вывода (самый простой пример). Для каждого порта есть 3 РВВ:

1) регистр, определяющий направление передачи данных через выводы порта (вход или выход);

2) регистр, считывающий состояние выводов порта, если выводы настроены на прием (вход) информации;

3) регистр, определяющий логический уровень на выводе порта если вывод настроен на выход, либо управлять внутренним подтягивающим резистором, если вывод настроен на вход.

Следует заметить, что блок РОН можно разделить на 2 группы: РОН младшей половины регистрового файла (R0…R15) и РОН старшей половины регистрового файла (R16…R31). Разница заключается в том, что не все команды, относящиеся к старшей половине регистров, можно применить к младшей половине, то есть регистры R0…R15 получаются немного урезанными по набору команд.

И теперь само ОЗУ. Это оперативная память, как в компьютере, предназначенная для хранения различных переменных, сохранение которых не требуется после отключения питания. Выделение места под переменные (задается в программе) идет он начала к концу ОЗУ. Также ОЗУ нужно для такой штуковины как стек, который является частью ОЗУ и служит для сохранения различных данных, а также для сохранения адресов при вызове подпрограмм и прерываний. Стек работает по принципу «первым зашел – последним вышел» и растет от конца ОЗУ к началу.


При использовании ОЗУ под переменные и стек необходимо следить за тем, чтобы одно не наехало на другое.

EEPROM

электрически стираемая программируемая постоянная память

Тут все просто – электрически стираемая программируемая постоянная память размером 512 байт. В отличии от flash-памяти здесь адресация побайтная.

Сюда можно сохранять всякие константы, данные, которые используются при работе программы, либо необходимо сохранить перед отключением питания и т.п. В EEPROM данные можно писать непосредственно при выполнении программы либо путем прошивки через прошивальщик (eep-файл). Если чтение из EEPROM в процессе работы МК осуществляется очень быстро, то запись в него происходит очень долго, несколько миллисекунд. Тут надо быть осторожным, чтоб при процессе записи в EEPROM не выскочило прерывание, а то запишем в итоге какую-либо бяку. Так что тут надо быть внимательней. Число циклов запись/стирание в EEPROM составляет 100000. Автор материала: skateman.

Originally posted 2019-09-26 04:47:30. Republished by Blog Post Promoter

Большинство современных микроконтроллеров имеют Гарвардскую архитектуру и содержат 3 вида памяти:

  • память программ FLASH;
  • оперативная память (ОЗУ) SRAM (Static RAM);
  • энергонезависимая память данных EEPROM.

Адресные пространства указанных видов памяти, как правило, разделены. Способы адресации и доступа к этим областям памяти также различны. Такая структура позволяет центральному процессору работать одновременно как с памятью программ, так и с памятью данных, что существенно увеличивает производительность. Каждая из областей памяти данных (SRAM и EEPROM) также расположена в своем адресном пространстве.

Память программ

Память программ представляет собой электрически стираемое ППЗУ (FLASH) и может поддерживать команды с разрядностью больше 8 бит. В некоторых микроконтроллерах память программ разделена на 2 секции:

  • секцию загрузчика (Boot Program);
  • секцию прикладных программ (Application Program).

Память программ чаще всего является электрически перепрограммиру­емой, количество циклов перезаписи превышает 10 тысяч.

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

Оперативная память

Оперативная память, как правило, содержит 3 области:

  • регистры общего назначения;
  • служебные регистры;
  • память для хранения данных.

Регистры общего назначения (РОН) находятся в непосредственной близости к АЛУ. Однако в микроконтроллерах некоторых фирм (в частности, PIC фирмы Microchip) имеется только один рабочий регистр, играющий роль одного из операндов в командах.
Применение набора регистров общего назначения в сочетании с конвейерной обработкой позволяет АЛУ выполнять одну операцию (извлечение операндов из набора регистров, выполнение команды и запись результата обратно в регистр) за один такт.

Остальная часть оперативной памяти предназначена для хранения пользовательских данных.

Энергонезависимая память данных

Энергонезависимая память данных (EEPROM) организована таким образом, что содержимое каждого байта отдельно может быть считано или записано. Количество циклов перезаписи энергонезависимой памяти превышает 100 тысяч. Энергонезависимая память предназначена для хранения настроек и конфигурации программы, то есть тех данных, которые должны сохраняться при пропадании питания.

Чтение и запись данных в EEPROM, как правило, осуществляется посредством использования соответствующих регистров из области служебных регистров SRAM. Как правило, это:

данных SRAM (ОЗУ), энергонезависимая EEPROM-память данных, а также конфигурационные ячейки, ячейки защиты, калибровочные ячейки и ячейки идентификаторов. Возможность доступа к различным ресурсам памяти приведена в табл.1.

Табл.1. Возможность доступа к различным ресурсам памяти.

Последовательное
программирование при низком напряжении

Параллельное и последовательное
программирование при высоком напряжении

Калибровочные
ячейки и ячейки идентификатора

Память программ FLASH

Коды программ микроконтроллера размещаются в энергонезависимом ПЗУ, выполненной по технологии FLASH. При нормальных условиях эксплуатации, FLASH-память позволяет сохранять свое содержимое в неизменном виде в течение 40 лет и допускает как минимум 10000 циклов стирания/записи.

Организация FLASH памяти программ ATmega8


Рис.5 Организация FLASH памяти программ ATmega8

Организация памяти программ, на примере ATmega8, приведена на рис.5. Размер FLASH-памяти этой модели составляет 8192 байт. Но, поскольку каждая команда занимает 2 или 4 байта, то по отношению к AVR точнее будет говорить об объеме в 4096 слов. Такая размерность определяет максимально возможное число слов команд (кодов операций), доступное при написании программы.

Для адресации памяти программ используется программный счетчик PC (Program Counter) (другое название: регистр или счетчик команд). Он представляет собой регистр, в котором находится текущей адрес команды во FLASH-памяти. Таким образом, счетчик команд адресует 16-разрядные слова, а не байты, и имеет переменную разрядность, которая зависит от размера FLASH. Так у ATmega8 (4096 слов), PC имеет разрядность 12 бит, у ATmega16 (8192 слова) - 13 бит и т.д. В архитектуре AVR, PC является недоступным для программиста регистром.

Помимо своего основного назначения (хранение команд), FLASH-память AVR-микроконтроллеров также позволяет хранить пользовательские данные произвольного типа: константы, таблицы, постоянные коэффициенты и т.д. Минимальный адресуемый элемент в этом случае 1 байт. Доступ к таким данным из прикладной программы производится различными модификациями инструкции lpm.

Как правило, алгоритмы работы микроконтроллера, записанные в памяти программ, не должны изменяться во времени. Однако у AVR все-таки имеется возможность модифицировать содержимое FLASH посредством собственного программного обеспечения. Обсуждению этого вопроса посвящена глава «Самопрограммирование микроконтроллеров AVR». Там же показан и другой способ разделения FLASH на секцию прикладной программы (Application Section) и секцию загрузчика (Boot Loader Section). Изменять содержимое памяти программ можно только из области загрузчика.

В процессе программирования запись во FLASH-память происходит постранично. Размер страницы зависит от объема памяти конкретной модели и может быть равен 32, 64 или 128 слов.

Читайте также: