Спалах та EEPROM


14

Паспорт даних Atmega16 говорить, що він має

а) 16 Кбайт внутрішньосистемної самопрограмованої флеш-пам’яті Flash і б) 512 байт EEPROM.

Чи може мікроконтролер мати два окремих ПЗУ, які можна запрограмувати за допомогою технології EEPROM та технології Flash?

Або мій висновок (як зазначено вище) з таблиці невірний?

Я знаю, що наша програма зберігається у флеш-пам'яті, ніж чому комусь знадобиться EEPROM? Яке його використання, якщо у нас є флеш-пам’ять для програми?

Також будь-хто може пояснити, що таке термін "Програмування в системі"

Що я знаю: Flash-технологія може записувати програму в блоки даних, тоді як EEPROM може записувати дані по байтах.

Відповіді:


21

На сьогодні флеш-пам’ять використовується для зберігання програмного коду, а EEPROM (Електрично стирається пам'ять лише для читання) використовується для зберігання стійких даних. Ще 30 років тому, до появи Flash, EEPROM використовувались для утримання програмного коду.

Насправді спочатку прийшов ROM (лише для читання), потім PROM (програмований ROM, лише один раз), EPROM (PROM Erasable ультрафіолетовим світлом), EEPROM та нарешті Flash. ПЗУ до сих пір застосовуються для додатків із великим обсягом та низькими витратами (наприклад, вітальні листівки).

Важлива відмінність поточних мікроконтролерів полягає в тому, що зазвичай не можна виконувати код поза EEPROM, і програма незручно зберігати дані у спалах. (Дані зберігаються у спалах, коли, наприклад, ви використовуєте ключове слово "const" в декларації даних або визначаєте рядок, але це обробляється поза кадром компілятором і лінкером.)

Область EEPROM може використовуватися для зберігання конфігурації або інших даних, які ви хочете бути доступними через перезавантаження, в тому числі, якщо мікроконтролер втратив живлення і потім живиться резервним пристроєм. Функціонально ви можете розглядати EEPROM як дуже маленький жорсткий диск або SD-карту.

На мікроконтролерах без EEPROM можна зберігати стійкі дані у флеш-пам’яті, але це стає важким, оскільки мікроконтролери насправді для цього не були розроблені, і ви повинні знайти спеціальне місце, яке не заважатиме програмному коду, і відкладіть це з лінкером. Крім того, як було сказано нижче, зазвичай ви можете оновити EEPROM у багато разів більше, ніж спалах.

Якщо ви робите дані програми у спалах, це не означає, що ви можете отримати доступ до даних як змінних у вашій програмі C, оскільки немає можливості сказати компілятору, де ці змінні знаходяться у вашому коді (тобто ви не можете зв’язати const змінюється на цю область спалаху.) Отже, читання їх повинно здійснюватися через спеціальний набір регістрів, які використовуються для їх запису. Зауважте, це обмеження стосується також даних у EEPROM, тому воно не має переваги в цьому плані.

Щоб запрограмувати спалах або EEPROM, спочатку слід стерти блок пам'яті. Потім це програмується. Для спалаху написання, як правило, також виконується блоком. Для EEPROM це може здійснюватися блоками або байтами одночасно, залежно від мікроконтролера.

Як для спалаху, так і для EEPROM, існує максимальна кількість разів, коли ви можете оновити їх, перш ніж зношувати пам'ять. Це число вказано в аркуші даних як мінімальне гарантоване значення. Зазвичай це набагато вище для EEPROM, ніж для флеш-пам’яті. Для спалаху я бачив цифри аж 1000. Для EEPROM я бачив цифри аж до 1 000 000.

Однією з переваг EEPROM над спалахом є те, що ви можете стерти їх набагато більше разів, ніж можете стерти спалах.

"Внутрішньопрограмоване в системі" просто означає, що мікроконтролер може оновлювати власний спалах під час роботи. Ця функція зазвичай використовується для оновлення коду в полі. Хитрість полягає в тому, що потрібно залишати деякий код у системі під час оновлення основної програми, що називається завантажувачем. Ця схема використовується в системі Arduino для програмування мікросхеми.


Дякую за вашу відповідь, пане. Отже, для введення даних всередині EEPROM мені знадобиться програміст EEPROM, як у програміст USBASP, щоб скинути програму всередині флеш-пам'яті? Я прав, сер.
Джассер

1
@Jasser Ні, вам не потрібен зовнішній програміст. Ви отримаєте доступ до EEPROM зсередини своєї програми. Всередині ATmega буде встановлений набір регістрів, який, пишучи до них, дозволить оновити EEPROM. Вам також потрібно буде використовувати ці регістри, щоб прочитати EEPROM, оскільки він не відображатиметься у звичайній карті адрес. Інформація про те, як стерти, записати та прочитати EEPROM, буде міститись у таблиці даних для мікросхеми.
tcrosley

Оскільки ми можемо записувати чи читати з EEPROM всередині мікроконтролера, ніж мікроконтролер повинен мати схему для зберігання даних всередині EEPROM, і це має бути схоже на програміста EEPROM. Це знову призводить мене до іншого питання, що, оскільки EEPROM може бути використаний приблизно 100 000 разів, ніж після цього, ми не зможемо зберігати дані всередині EEPROM через регістри. Чи є ці твердження змістовними? @tcrosley
Jasser

1
@Jasser Правильно, існує обмеження кількості разів ви можете оновити EEPROM. Зазвичай це набагато вище (іноді на порядок більше), ніж кількість разів ви можете оновити спалах. Я мав би сказати, що у своїй відповіді, і оновлю це. Цитований вами номер - це мінімально гарантований виробником чіпів; Я зробив кілька тестів один раз з чіпом, який був написаний на 100 000 записів, і це було набагато більше 500 000, перш ніж виявлені помилки.
tcrosley

1
@Jasser Так, налаштувати дані спалахом трохи складніше. Крім того, як обговорювалося в моєму оновленні моєї відповіді, ви можете стерти та перепрограмувати EEPROM у багато разів більше (як правило, у 10 разів), ніж спалах.
tcrosley

4

Я додам трохи більше інформації до чудової відповіді від @tcrosley.

ATmega16 реалізує архітектуру Гарварду , тобто системну топологію, де пам'ять даних відокремлена від пам'яті програми. Цитуючи відповідний абзац з таблиці даних Atmega16 (стор. 8):

Для того, щоб досягти максимальної продуктивності та паралелізму, AVR використовує гарвардську архітектуру - з окремими пам’ятками та шинами для програми та даних. Інструкції в пам'яті програми виконуються однорівневим конвеєром. Під час виконання однієї інструкції наступна інструкція заздалегідь витягується з пам'яті програми. Ця концепція дозволяє виконувати інструкції у кожному тактовому циклі. Пам'ять програми - це внутрішньосистемна перепрограмована флеш-пам'ять.

Гарвардська архітектура має перевагу в тому, що немає суперечок між шинами між циклами вилучення інструкцій та циклами доступу до даних, оскільки дані та вказівки не поділяють ту саму шину, як у звичайній архітектурі ПК.

Тому флеш-пам’ять використовується як пам'ять програми, тоді як пам'ять даних розділена між SRAM (для перехідних даних, як стек викликів функцій і купа - якщо ви програмуєте, наприклад, на C) і EEPROM (для постійного зберігання) .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.