Контакти

Що таке eeprom контролера. Що таке чіп пам'яті і як програмувати мікросхеми. Дивитися що таке "EEPROM" в інших словниках

Мікросхеми різного призначення застосовуються в складі електроніки сучасної техніки. Величезне різноманіття такого роду компонентів доповнюють мікросхеми пам'яті. Цей вид радіодеталей (серед електронників і в народі) найчастіше називають просто - чіпи. Основне призначення чіпів пам'яті - зберігання певної інформації з можливістю внесення (записи), зміни (перезапису) або повного видалення (Стирання) програмними засобами. Загальний інтерес до чіпів пам'яті зрозумілий. Майстрам, які знають як програмувати мікросхеми пам'яті, відкриваються широкі простори в області ремонту і настройки сучасних електронних пристроїв.

Мікросхема пам'яті - це електронний компонент, внутрішня структура якого здатна зберігати (запам'ятовувати) внесені програми, будь-які дані або одночасно те й інше.

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

Слід зазначити: чіпи пам'яті завжди є невід'ємним доповненням мікропроцесорів - керуючих мікросхем. У свою чергу мікропроцесор є основою електроніки будь-якої сучасної техніки.

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

Таким чином, мікропроцесор управляє, а чіп пам'яті зберігає відомості, необхідні процесору.

Програми або дані зберігаються в чіпі пам'яті як ряд чисел - нулів і одиниць (біти). Один біт може бути представлений логічними нулем (0) або одиницею (1).

В одиничному вигляді обробка бітів бачиться складною. Тому біти об'єднуються в групи. Шістнадцять біт складають групу «слів», вісім біт складають байт - «частина слова», чотири біта - «шматочок слова».

Програмним терміном для чіпів, що використовується частіше інших, є байт. Це набір з восьми біт, який може приймати від 2 до 8 числових варіацій, що в цілому дає 256 різних значень.

Для уявлення байта використовується шістнадцяткова система числення, де передбачається використання 16 значень з двох груп:

  1. Цифрових (від 0 до 9).
  2. Символьних (від А до F).

Тому в комбінаціях двох знаків шестнадцатеричной системи також укладаються 256 значень (від 00h до FFh). Кінцевий символ «h» вказує на приналежність до шістнадцятковим числах.

Організація мікросхем (чипів) пам'яті

Для 8-бітових чіпів пам'яті (найбільш поширений тип) біти об'єднуються в байти (8 біт) і зберігаються під певним «адресою».

За призначеного адресою відкривається доступ до байтам. Висновок восьми бітів адреси доступу здійснюється через вісім портів даних.


Організація структури пристрою, що запам'ятовує. На перший погляд складний і незрозумілий алгоритм. Але при бажанні розібратися, розуміння приходить швидко

Електрично прані програмовані мікросхеми постійної пам'яті (EEPROM) є металевими оксидними напівпровідниковими комп'ютерними мікросхемами, які використовуються на друкованої плати. Цей тип чіпа можна стерти і перепрограмувати з використанням сильного електронного сигналу. Оскільки це можна зробити, не видаляючи чіп з пристрою, до якого він підключений, чіпи EEPROM використовуються в багатьох галузях.
Мікросхема EEPROM містить незалежну пам'ять, тому її дані не втрачаються при порушенні харчування чіпа. Мікросхема такого типу може бути запрограмована вибірково, що означає, що частина її пам'яті може бути змінена за допомогою нової перезапису, не зачіпаючи решту пам'ять. Інформація, що зберігається всередині мікросхеми EEPROM, є постійною, поки вона не буде стерта або перепрограмовано, що робить її цінним компонентом в комп'ютерах і інших електронних пристроях.

Мікросхеми EEPROM створені на основі транзисторів з плаваючим затвором. Мікросхема EEPROM запрограмована шляхом примусової програмованої інформації у вигляді електронів через оксид затвора. Потім плаваючий затвор забезпечує зберігання цих електронів. Осередок пам'яті вважається запрограмованої, коли вона заряджається електронами, і це представляється нулем. Якщо осередок пам'яті не заряджена, вона не запрограмована, і вона представлена \u200b\u200bодиницею.

Для широкого спектру пристроїв потрібно пам'ять, тому чіпи EEPROM мають безліч застосувань в області побутової електроніки. Вони використовуються в ігрових системах, телевізорах і комп'ютерних моніторах. Слухові апарати, Цифрові камери, технологія Bluetooth і ігрові системи також використовують чіпи EEPROM. Вони використовуються в телекомунікаційній, медичної та обробної промисловості. Персональні та бізнес-комп'ютери містять ЕСППЗУ.

Чіп EEPROM також має широкий спектр застосувань в автомобільній галузі. Він використовується в антиблокувальних системах, подушках безпеки, електронних засобах контролю стійкості, трансмісіях і блоках управління двигуном. Чіпи EEPROM також використовуються в кондиціонерах, дисплеях приладовій панелі, Модулях управління корпусом і системах введення без ключа. Ці чіпи допомагають контролювати витрату палива, а також використовуються в різних діагностичних системах.

Існує обмеження на кількість повторень, яке може бути перезаписано чіпом EEPROM. Шар всередині чіпа поступово пошкоджується численними переписування. Це не велика проблема, тому що деякі чіпи EEPROM можуть бути змінені до мільйона разів. Подальші успіхи в області технологій, швидше за все, зроблять позитивний вплив на те, на що можуть розраховувати мікросхеми пам'яті в майбутньому.

На зорі виникнення пам'яті, що зберігає дані при відключенні живлення (EPROM, E rasable P rogrammable ROM , Стирається / програмована ROM, або по-російськи - Пізу, програмований ПЗУ), основним типом її була пам'ять, стирається ультрафіолетом: UV-EPROM ( Ultra-Violet EPROM , УФ-ППЗУ). Причому часто приставку UV опускали, т. К. Всім було зрозуміло, що EPROM - це стирається ультрафіолетом, a ROM (або ПЗУ) просто, без додавань - це одноразово програмовані кристали OTP-ROM. Мікроконтролери з УФ-пам'яттю програм були поширені ще в середині 1990-х. У робочих зразках пристроїв з УФ-пам'яттю кварцове віконце, через яке здійснювалося стирання, заклеювали шматочком чорної липкої стрічки, т. К. Інформація в UV-EPROM повільно руйнується і на сонячному світлі.

На рис. 18.7 показано пристрій елементарної комірки EPROM, яка лежить в основі всіх сучасних типів flash-пам'яті. Якщо виключити з неї те, що позначено написом «плаваючий затвор», ми отримаємо самий звичайний польовий транзистор - точно такий же входить в клітинку DRAM. Якщо подати на керуючий затвор такого транзистора позитивне напруга, то він відкриється, і через нього потече струм (це вважається станом логічної одиниці). На рис. 18.7 вгорі зображено такий випадок, коли плаваючий затвор не робить ніякого впливу на роботу осередку, - наприклад, такий стан характерно для чистої flash-пам'яті, в яку ще жодного разу нічого не записували.

Мал. 18.7. Пристрій елементарної комірки EPROM

Якщо ж ми якимось чином (яким - поговоримо окремо) примудрилися розмістити на плаваючому затворі кілька зарядів - вільних електронів, які показані на рис. 18.7 внизу у вигляді темних кружечків із позначкою мінуса, то вони будуть екранувати дію керуючого електрода, і такий транзистор взагалі перестане проводити струм. Цей стан логічного нуля. Оскільки плаваючий затвор тому так і називається, що він «плаває» в товщі ізолятора (двоокису кремнію), то повідомлені йому одного разу заряди в спокої нікуди діватися не можуть. І записана таким чином інформація може зберігатися десятиліттями (до останнього часу виробники зазвичай давали гарантію на 10 років, але на, практиці в звичайних умовах час зберігання значно більше).

Нотатки на полях

Строго кажучи, в NAND-чіпах (про які далі) логіка повинна бути зворотною. Якщо в звичайній EPROM запрограмовану осередок ви не можете відкрити подачею зчитувального напруги, то там навпаки - її не можна замкнути зняттям напруги. Тому, зокрема, чиста NAND-пам'ять видає всі нулі, а не одиниці, як EPROM. Але це нюанси, які не змінюють суть справи.

Залишилося всього нічого - придумати, як розміщувати заряди на ізольованому від всіх зовнішніх впливів плаваючому затворі. І не тільки розміщувати - адже іноді пам'ять і прати доводиться, тому повинен існувати спосіб їх витягувати звідти. У UV-EPROM шар оксиду між плаваючим затвором і підкладкою був досить товстим (якщо величину 50 нанометрів можна охарактеризувати словом «товстий», звичайно), і працювало все це досить грубо. При записи на керуючий затвор подавали досить високе позитивне напруга - іноді до 36-40 В, а на стік транзистора - невелике позитивне. При цьому електрони, які рухалися від джерела до стоку, настільки прискорювалися полем керуючого електрода, що просто перестрибували бар'єр у вигляді ізолятора між підкладкою і плаваючим затвором. Такий процес називається ще инжекцией гарячих електронів .

Струм заряду при цьому досягав міліампера - можете собі уявити, як було споживання всієї схеми, якщо в ній одночасно програмувати хоча б кілька тисяч осередків. І хоча такий струм був потрібний на досить короткий час (втім, з точки зору швидкодії схеми не таке вже й коротке - мілісекунди), але це було найбільшим недоліком всіх старих зразків EPROM-пам'яті. Ще гірше інше - і ізолятор, і сам плаваючий затвор такого знущання довго не витримували і поступово деградували, чому кількість циклів стирання / запису було обмежено кількома сотнями, максимум - тисячами. У багатьох зразках flash-пам'яті більш пізнього часу навіть була передбачена спеціальна схема для зберігання карти «битих» осередків - в точності так, як це робиться для жорстких дисків. У сучасних моделях з мільйонами осередків така карта теж є - проте число циклів стирання / запису тепер зросла до сотень тисяч. Як цього вдалося досягти?

Спочатку подивимося, як здійснювалося в цій схемі стирання. У UV-EPROM при опроміненні ультрафіолетом фотони високої енергії повідомляли електронам на плаваючому затворі достатній імпульс для того, щоб вони «стрибнули» назад на підкладку самостійно, без будь-яких електричних впливів. Перші зразки електрично стирається пам'яті (EEPROM, Electrically Erasable Programmable ROM , Електрично стирається перепрограммируемое ПЗУ, ЕСППЗУ) були створені в компанії Intel в кінці 1970-х при безпосередній участі майбутнього засновника Atmel Джорджа Перлегоса. Він використав квантовий ефект тунелювання Фаулера-Нордхейма . За цим незрозумілою назвою криється досить просте по суті (але дуже складне з фізичної точки зору) явище - при досить тонкої плівці ізолятора (її товщину довелося зменшити з 50 до 10 нм) електрони, якщо їх злегка підштовхнути подачею не дуже високої напруги в потрібному напрямку, можуть проникати через бар'єр, що не перестрибуючи його. Сам процес показаний на рис. 18.8 вгорі (зверніть увагу на знак напруги на керуючому електроді).

Мал. 18.8. Процес стирання в елементарній комірці EPROM

Старі зразки EEPROM саме так і працювали: запис проводився «гарячої инжекцией», а стирання - «квантовим туннелированием». Тому вони були досить складні в експлуатації - розробники зі стажем пам'ятають, що перші мікросхеми EEPROM вимагали два, а то і три живлять напруги, причому подавати їх під час запису і стирання потрібно в певній послідовності.

Перетворення EEPROM у flash відбувалося за трьома різними напрямками. В першу чергу - в напрямку вдосконалення конструкції самої комірки. Для початку позбулися самої супротивної стадії - «гарячої інжекції». Замість неї під час запису стали також використовувати «квантове тунелювання», як і при стирання. На рис. 18.8 внизу показаний цей процес - якщо при відкритому транзисторі подати на керуючий затвор досить висока (але значно менше, ніж при «гарячої інжекції») напруга, то частина електронів, що рухаються через відкритий транзистор від джерела до стоку, «просочиться» через ізолятор і виявиться на плаваючому затворі. Споживання струму під час запису знизилося на кілька порядків. Ізолятор, правда, довелося зробити ще тонше, що зумовило досить великі труднощі з впровадженням цієї технології у виробництво.

Другий напрямок - осередок зробили трохи складніше, добудувавши до неї другий транзистор (звичайний, не двозатворного), який розділив висновок стоку і прочитує шину всієї мікросхеми. Завдяки всьому цьому вдалося добитися значного підвищення довговічності - до сотень тисяч циклів запису / стирання (мільйони циклів, характерні для флеш-карток, виходять, якщо додати схеми корекції помилок). Крім того, схеми формування високої напруги і відповідні генератори імпульсів запису / стирання перенесли всередину мікросхеми, чому користуватися цими типами пам'яті стало незрівнянно зручніше - вони стали харчуватися від одного напруги (5, 3,3 або навіть 1,8 В).

І, нарешті, третє, чи не найголовніше, удосконалення полягало в зміні організації доступу до осередків на кристалі, внаслідок чого цей тип пам'яті і заслужив найменування - flash (Т. Е. «Блискавка»), нині відоме кожному власникові цифрової камери або кишенькового МРЗ-плеєра. Так в середині 1980-х назвали різновид EEPROM, в якій записування та стирання проводилися відразу цілими блоками - сторінками. Процедура читання з довільною осередки, втім, зі зрозумілих причин сповільнилася - для його прискорення доводиться на кристалах flash-пам'яті розташовувати проміжну (буферну) SRAM. Для флеш-накопичувачів це не має особливого значення, т. К. Там все одно дані читаються і пишуться відразу великими масивами, але для використання в мікроконтролерах це може виявитися незручним. Тим більше, в МК незручно використовувати самий швидкодіючий варіант flash-технології - так звану пам'ять типу NAND (від назви логічної функції «І-НЕ»), де читати і записувати пам'ять в принципі можливо тільки блоками по 512 байт (це звичайна величина сектора на жорсткому диску, також читаного і записується цілком за один раз, - звідси можна зрозуміти основне призначення NAND).

У МК зазвичай використовують традиційну (типу NOR) flash-пам'ять програм, в якій сторінки відносно невеликі за розмірами - порядку 64-256 байтів. Втім, якщо користувач сам не береться за створення програматора для такої мікросхеми, він може про сторінковому характер пам'яті і не здогадуватися. А для призначених для користувача даних застосовують EEPROM або з можливістю читання довільного байта, або Секціонірованние, але на дуже маленькі блоки - наприклад, по 4 байта. При цьому для користувача все одно доступ залишається побайтное. Характерною рисою такої пам'яті є досить повільна (близько мілісекунд) процедура запису, в той час як читання протікає нітрохи не повільніше будь-яких інших операцій в МК.

Розвиток технологій flash-пам'яті мало величезне значення для здешевлення і доступності мікроконтролерів. Надалі ми будемо мати справу з енергонезалежною пам'яттю не тільки у вигляді вбудованих в мікроконтролер пам'яті програм і даних, а й з окремими мікросхемами, що дозволяють записувати досить великі обсяги інформації.

мікроконтролери Atmel AVR

Загальна кількість існуючих сімейств мікроконтролерів оцінюється приблизно в 100 з гаком, причому щорічно з'являються все нові і нові. Кожне з цих родин може включати десятки різних моделей. Причому левова частка випускаються чіпів доводиться на спеціалізовані контролери - наприклад, для управління USB-інтерфейсом або ЖК-дисплеями. Іноді досить важко класифікувати продукт - так, багато представників сімейства ARM, яке широко застосовується для побудови мобільних пристроїв, З точки зору розвиненою вбудованої функціональності відносяться до типових контролерам, але в той же час досить потужне ядро \u200b\u200bдозволяє віднести їх і до класу мікропроцесорів.

З сімейств універсальних 8-розрядних мікроконтролерів, так би мовити, «на всі випадки життя», найбільш поширені три: контролери класичної архітектури х51 (перший контролер сімейства 8051 був випущений фірмою Intel ще в середині 1980-х), контролери PIC фірми Microchip (Ідеально підходять для проектування нескладних пристроїв, особливо призначених для тиражування), і розглядаються нами Atmel AVR .

Нотатки на полях

У 1995 році два студенти Норвезького університету науки і технологій в м Тронхеймі, Альф Боген і Вегард Воллей, висунули ідею 8-розрядного RISC-ядра, яку запропонували керівництву Atmel. Імена розробників увійшли в назву архітектури AVR: Alf + Vegard + RISC. У Atmel ідея настільки сподобалася, що в 1996 році був заснований дослідний центр в Тронхеймі, і вже в кінці того ж року розпочато випуск першого дослідного мікроконтролера нової серії AVR під назвою AT90S1200. У другій половині 1997 року корпорація Atmel приступила до серійного виробництва сімейства AVR.

Чому AVR?

У AVR-контролерів "з народження" є кілька особливостей, які відрізняють це сімейство від інших МК, спрощують його вивчення і застосування. Одним з істотних переваг AVR стало використання конвеєра. В результаті для AVR не існує поняття машинного циклу: більшість команд, як ми говорили, виконується за один такт (для порівняння відзначимо, що користуються великою популярністю МК сімейства PIC виконують команду за 4 такту). Правда, при цьому довелося трохи пожертвувати простотою системи команд, є деякі складності і в області операцій з бітами. Тим не менш, це не призводить до помітних труднощів при вивченні AVR-асемблера - навпаки, програми виходять коротше і більше нагадують програму на мові високого рівня (відзначимо, що AVR проектувалися спеціально в розрахунку на максимальне наближення до структури мови З).

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

Але це, звичайно, не означає, що AVR - однозначно краще в світі сімейство МК. У нього є і ряд недоліків (наприклад, недосконала система захисту незалежної пам'яті даних - EEPROM, деякі питання з помехоустойчивостью, зайві складності в системі команд і структурі програм і т. П.). А враховуючи, що будь-які універсальні сучасні МК дозволяють робити все те ж саме, питання вибору платформи - питання в значній мірі переваг і особистого досвіду розробника.

Безсумнівно, істинним подарунком для фірми Atmel стала позиція італійських інженерів, які обрали в 2004 році AVR для аматорської платформи Arduino, чому популярність цього сімейства швидко виросла, і за його майбутнє можна не турбуватися. про Arduino ми будемо детально говорити в останніх главах цієї книги.

Classic, Mega і Tiny

Лінійка універсальних контролерів AVR загального призначення ділиться на сімейства: Classic, Mega і Tiny (Є і новітнє сімейство Xmega , Що містить вельми «наворочені» кристали). МК сімейства Classic (Вони іменувалися, як АТ908<марка контроллера>) Нині вже не виробляються, проте все ще поширені в літературі, т. К. Для них напрацьовано значну кількість програм. Щоб користувачам не довелося переписувати все ПО, фірма Atmel подбала про спадкоємність - більшість МК сімейства Classic має функціональні аналоги в сімействі Mega, наприклад, AT90S8515 - ATmega8515, AT90S8535 - ATmega8535 і т. п. (тільки AT90S2313 має аналог в сімействі Tiny - ATtiny2313).

Повна сумісність забезпечується спеціальним інсталяційний бітом (з набору так званих Fuse-бітoв) , При програмуванні якого Mega-контролер починає функціонувати, як Classic (Докладніше про це читайте в главі 19). Для тих, що розробляються пристроїв зазвичай немає ніякого сенсу у використанні їх в режимі сумісності, проте такий прийом в ряді випадків може виявитися корисним для початківців, оскільки програми для МК Classic влаштовані простіше і часто зустрічаються в літературі.

Сімейство Tiny (що в буквальному перекладі означає «крихітний») призначено для найбільш простих пристроїв. Частина МК цього сімейства не має можливості програмування по послідовному інтерфейсу, і тому ми їх, за винятком ATtiny2313, не будемо розглядати в цій книзі (це не означає, що інших Tiny слід уникати - серед них є дуже зручні і функціональні мікросхеми, нерідко взагалі не мають аналогів). У що становить виняток МК ATtiny2313 відсутня біт сумісності з «класичним» аналогом AT90S2313, одним з найпростіших і зручних контролерів Atmel , Але при уважному розгляді виявляється, що вони і без такого біта сумісні «знизу вгору», - програми для «класичного» 2313 практично повністю підходять і для Tiny2313 (див. главу 19).

структура МК AVR

Загальна структура внутрішнього устрою МК AVR приведена на рис. 18.9. Тут показані всі основні компоненти AVR (за винятком деяких спеціалізованих) - в окремих моделях деякі компоненти можуть бути відсутніми або відрізнятися за характеристиками, незмінним залишається тільки загальне 8-розрядний процесорний ядро \u200b\u200b(GPU, General Processing Unit). Коротко розглянемо найбільш важливі компоненти, з більшістю з яких ми познайомимося надалі докладніше.

Мал. 18.9. Загальна структурна схема мікроконтролерів AVR

Почнемо з пам'яті. У структурі AVR є три різновиди пам'яті: flash-пам'ять програм, ОЗУ (SRAM) для тимчасового зберігання даних і незалежна пам'ять (EEPROM) для довготривалого зберігання констант і даних. Розглянемо їх окремо.

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

Вбудована flash-пам'ять програм в AVR-контролерах має обсяг від 1 Кбайт у ATtiny11 до 256 Кбайт у ATmega2560. Перше число в найменуванні моделі містить величину цієї пам'яті в кілобайтах з ряду: 1, 2, 4, 8, 16, 32, 64, 128 і 256 Кбайт. Так, ATtiny2313 має 2 Кбайт пам'яті, a ATmega8535 - 8 Кбайт.

З точки зору програміста пам'ять програм можна вважати побудованої з окремих осередків - слів по два байта кожне. Пристрій пам'яті програм (і тільки цієї пам'яті!) По двобайтовим словами - дуже важливий момент, Який ассемблерного програмісту потрібно твердо засвоїти. Така організація обумовлена \u200b\u200bтим, що будь-яка команда в AVR має довжину рівно 2 байта. Виняток становлять команди jmp, call і деякі інші (наприклад, lds), Які оперують з адресами 16-розрядної і більш довжини. Довжина цих команд становить 4 байта, і вони використовуються лише в моделях з пам'яттю програм більше 8 Кбайт, тому в цьому розділі книги ви їх не зустрінете. Arduino засноване на AVR-контролерах з великим об'ємом пам'яті, але там нам про ці тонкощі знати необов'язково. У всіх інших випадках лічильник команд зсувається при виконанні чергової команди на 2 байта (одне слово), тому необхідну ємність пам'яті легко підрахувати, знаючи просто число використовуваних команд.

За замовчуванням всі контролери AVR завжди починають виконання програми з адреси $ 0000. Якщо в програмі не використовуються переривання, то з цієї адреси може починатися прикладна програма, Як ми побачимо далі. В іншому випадку за цією адресою розташовується так звана таблиця векторів переривань , Докладніше про яку ми будемо говорити в главі 19 .

Пам'ять даних ( ОЗУ, SRAM)

На відміну від пам'яті програм, адресний простір пам'яті даних адресується побайтно (а не пословно). Адресація повністю лінійна, без будь-якого поділу на сторінки, сегменти або банки, як це прийнято в деяких інших системах.

Виключаючи деякі молодші моделі Tiny, обсяг вбудованої SRAM коливається від 128 байтів (наприклад, у ATtiny2313) до 4-8 Кбайт у старших моделей Mega . Адресний простір статичної пам'яті даних (SRAM) умовно ділиться на кілька областей, показаних на рис. 18.10. До власне вбудованої SRAM відноситься лише затемнена частина, до неї по порядку адрес розташоване адресний простір регістрів, де перші 32 байта займає масив регістрів загального призначення (РОН), ще 64 - регістрів введення / виводу (РВВ).

Мал. 18.10. Адресний простір статичної пам'яті даних ( SRAM) мікроконтролерів AVR

Для деяких моделей Mega (ATmega8515, ATmega162, ATmega128, ATmega2560 і ін.) Передбачена можливість підключення зовнішньої пам'яті об'ємом до 64 Кбайт. Відзначимо, що адресні простори РОН і РВВ не віднімають простір у ОЗУ даних - так, якщо в конкретної моделі МК є 512 байтів SRAM, а простір регістрів займає перші 96 байтів (до адреси $ 5f), to адреси SRAM займуть адресний простір від $ 0060 до $ 025F (т. Е. Від 96 до 607 осередки включно). Кінець вбудованої пам'яті даних позначається константою RAMEND . Слід врахувати, що останні адреси SRAM, як мінімум, на чотири-шість осередків від кінця (в залежності від кількості вкладених викликів процедур - для надійності краще прийняти це число рівним десяти або навіть більше) займати даними годі було, т. К. Вони при використанні підпрограм і переривань зайняті під стек.

Операції читання / запису в пам'ять однаково працюють з будь-якими адресами з доступного простору, і тому при роботі з SRAM потрібно бути уважним, - замість запису в пам'ять ви легко можете «потрапити» в який-небудь регістр. Для звернення до РОН, як до осередків пам'яті, можна в якості адреси підставляти номер регістра, а ось при зверненні до РВВ таким же способом до номера останнього потрібно додавати $ 20. Слід також пам'ятати, що за замовчуванням при включенні харчування все РВВ встановлюються в нульове стан у всіх бітах (поодинокі винятки все ж є, тому в критичних випадках треба дивитися документацію), а ось РОН і осередки SRAM можуть приймати довільні значення.

Незалежна пам'ять даних ( EEPROM)

Всі моделі МК AVR (крім знятого з виробництва ATtiny11) мають вбудовану EEPROM для зберігання констант і даних при відключенні живлення. В різних моделях обсяг її варіюється від 64 байтів (ATtinylx) до 4 Кбайт (старші моделі Mega). Число циклів перепрограмування EEPROM може досягати 100 тис.

Нагадаємо, що EEPROM відрізняється від flash-пам'яті можливістю вибіркового програмування побайтно (взагалі-то, навіть побитно, але ця можливість прихована від користувача). Читання з EEPROM здійснюється з такою ж швидкістю, як і читання з РОН, - протягом одного машинного циклу (правда, на практиці воно розтягується на 4 циклу, але програмісту стежити за цим спеціально не потрібно). А ось запис в EEPROM протікає значно повільніше і до того ж з невизначеною швидкістю - цикл записи одного байта може займати від 2 до 4 і більше мілісекунд. Процес запису регулюється вбудованим RC-генератором, частота якого нестабільна (при низькій напрузі харчування можна очікувати, що час запису буде більше). За такий час при звичайних тактових частотах МК встигає виконати кілька тисяч команд, тому програмування процедури запису вимагає акуратності - наприклад, потрібно стежити, щоб в момент запису не "вклинилося» переривання (докладніше про це далі).

Головна ж складність при використанні EEPROM - то, що при недостатньо швидкому зниженні напруги живлення в момент вимикання вміст її може бути зіпсовано. Обумовлено це тим, що при зниженні напруги живлення нижче деякого порога (нижче порога стабільної роботи, Але недостатнього для повного виключення) і внаслідок його брязкоту МК починає виконувати довільні команди, в тому числі може виконати і процедуру запису в EEPROM, якщо вона є в програмі. Якщо врахувати, що типова команда МК AVR виконується за десяті частки мікросекунди, то ясно, що ніякої реальний джерело живлення не може забезпечити зниження напруги до нуля за потрібний час. З досвіду автора при харчуванні від звичайного стабілізатора типу LM7805 з рекомендованими значеннями ємності конденсаторів на вході і на виході вміст EEPROM буде зіпсовано приблизно в половині випадків.

Цієї проблеми не повинно існувати, якщо запис констант в EEPROM виробляється при програмуванні МК, а процедура запису в програмі відсутній. У всіх же інших випадках (а їх, очевидно, абсолютна більшість - EEPROM найчастіше використовується для зберігання призначених для користувача установок і поточної конфігурації при виключенні живлення) доводиться вживати спеціальних заходів. Вбудований детектор падіння напруги ( Brown-Out Detection , BOD), наявний практично у всіх моделях Tiny і Mega , Зазвичай з цим не справляється. Найбільш кардинальної з таких заходів є установка зовнішнього монітора харчування, який утримує МК при зниженні напруги живлення нижче порогової величини в стані скидання (подробиці див.).

  • Tutorial

резюме: Якщо ви періодично оновлюєте деяке значення в EEPROM кожні кілька хвилин (або кілька секунд), ви можете зіткнутися з проблемою зносу осередків EEPROM. Щоб уникнути цього, потрібно знижувати частоту записів в клітинку. Для деяких типів EEPROM навіть частота запису частіше ніж один раз на годину може бути проблемою.

Коли ви записуєте дані, час летить швидко

EEPROM повсюдно використовується для збереження настройок і журналу роботи у вбудованих системах. Наприклад, ви можете хотіти функцію «чорного ящика», для запису останніх даних на момент аварії чи втрати харчування. Я бачив специфікації з вимогою записувати подібні дані кожні кілька секунд.

Але проблема в тому, що EEPROM має обмежений ресурс числа записів. Після 100,000 або мільйона записів (залежить від конкретного чіпа), деякі з ваших систем почнуть випробовувати проблеми з відмовою EEPROM. (Подивіться в даташит, щоб дізнатися конкретну цифру. Якщо ви хочете випустити велику кількість пристроїв, «найгірший випадок», ймовірно, більш важливий ніж «типовий»). Мільйон записів здається великою цифрою, але насправді він закінчиться дуже швидко. Давайте подивимося на прикладі, припустивши, що нам потрібно зберігати виміряна напруга в одну клітинку кожні 15 секунд.

1,000,000 записів при запису в 15 секунд дають записи в хвилину:
1,000,000 / (4 * 60 хвилин / год * 24 години / день) \u003d 173.6 днів.
Іншими словами, ваша EEPROM вичерпає резерв в мільйон записів менш ніж через 6 місяців.

Нижче наведено графік, що показує час до зносу (в роках), заснований на періоді поновлення конкретного осередку EEPROM. Обмежувальна лінія для продукту з тривалістю життя 10 років становить одне оновлення кожні 5 хвилин 15 секунд для мікросхеми з ресурсом 1 мільйон записів. Для EEPROM з ресурсом 100К можна оновлювати конкретний осередок не частіше ніж один раз на 52 хвилини. Це означає, що не варто і сподіватися оновлювати осередок кожні кілька секунд, якщо ви хочете, щоб ваш продукт працював роки, а не місяці. Вищесказане масштабується лінійно, правда, в цьому приладі є ще й вторинні фактори, такі як температура і режим доступу.

зменшити частоту

Самий безболісний спосіб вирішити проблему-це просто записувати дані рідше. У деяких випадках вимоги до системи це дозволяють. Або можна записувати тільки при будь-яких великих змінах. Однак, із записом, прив'язаною до подій, пам'ятайте про можливий сценарій, при якому значення буде постійно коливатися, і викличе потік подій, які приведуть до зносу EEPROM.
(Буде непогано, якщо ви зможете визначити, скільки разів проводився запис в EEPROM. Але це зажадає лічильника, який буде зберігатися в EEPROM ... при цьому проблема перетворюється проблему зносу лічильника.)

Переривання по зниженню рівня харчування

У деяких процесорах є переривання по низькому рівню харчування, яке можна використовувати для запису одного останнього значення в EEPROM, в той час як система вимикається по втраті живлення. У загальному випадку, ви зберігаєте цікавить значення в ОЗУ, і зберігаєте його в EEPROM тільки при виключенні живлення. Або, можливо, ви записуєте EEPROM час від часу, і записуєте іншу копію в EEPROM як частина процедури виключення, щоб переконатися, що найостанніші дані запишуться.
Важливо переконатися, що є великий конденсатор з харчування, який буде підтримувати напругу, достатню для програмування EEPROM досить тривалий час. Це може спрацювати, якщо вам потрібно записати одне або два значення, але не великий блок даних. Обережно, тут є великий простір для помилки!

Кільцевій буфер

Класичне рішення проблеми зносу-використовувати кільцевої буфер FIFO, що містить N останніх записів значення. Так-же знадобиться зберігати покажчик на кінець буфера в EEPROM. Це зменшує знос EEPROM на величину, пропорційну числу копій в цьому буфері. Наприклад, якщо буфер проходить через 10 різних адрес для збереження одного значення, кожна конкретна осередок модифікується в 10 разів рідше, і ресурс записи зростає в 10 разів. Вам також знадобиться окремий лічильник або відмітка часу для кожної з 10 копій, щоб можна було визначити, яка з них остання на момент виключення. Іншими словами, знадобиться два буфера, один для значення, і один для лічильника. (Якщо зберігати лічильник по одному і тому-ж адресою, це призведе до його зносу, тому що він повинен збільшуватися при кожному циклі записи.) Недолік цього методу в тому, що потрібно в 10 разів більше місця щоб отримати в 10 разів більшу тривалість життя. Можна проявити кмітливість, і упакувати лічильник разом з даними. Якщо ви записуєте велика кількість даних, додавання декількох байт для лічильника - не така вже й велика проблема. Але в будь-якому випадку, знадобиться багато EEPROM.
Atmel приготував аппноут, що містить всі криваві подробиці:
AVR-101: High Endurance EEPROM Storage: www.atmel.com/images/doc2526.pdf

Особливий випадок для лічильника числа записів

Іноді потрібно зберегти лічильник, а не самі значення. Наприклад, ви можете хотіти знати число включень приладу, або час роботи вашого пристрою. Найгірше в лічильниках, це те, що у них постійно змінюється молодший значущий біт, зношуючи молодші осередку EEPROM швидше. Але і тут можливо застосувати деякі трюки. У аппноуте від Microchip є кілька розумних ідей, таких як використання коду Грея, щоб тільки один біт з мультибайтних лічильника змінювався при зміні значення лічильника. Також вони рекомендують використовувати коригувальні коди для компенсації зносу. (Я не знаю, наскільки ефективно буде застосування таких кодів, тому що це буде залежати від того, наскільки незалежні будуть помилки в бітах в байтах лічильника, використовуйте на свій страх і ризик, прим. Авт.). Дивись аппноут: ww1.microchip.com/downloads/en/AppNotes/01449A.pdf

Примітка: для тих, хто хотів би дізнатися більше, Microchip підготував документ, що містить детальну інформацію про влаштування осередків EEPROM і їх знос з діаграмами:
ftp.microchip.com/tools/memory/total50/tutorial.html

Дайте мені знати, якщо у вас є які-небудь цікаві ідеї з приводу боротьби з зносом EEPROM.

Источик: Phil Koopman, «Better Embedded System SW»
betterembsw.blogspot.ru/2015/07/avoiding-eeprom-wearout.html

Примітка перекладача: в останні роки з'явилися мікросхеми EEPROM з сторінкової організацією стирання (подібної мікросхем FLASH), де логічно можна адресувати комірки (читати, записувати і стирати) побайтно, але при цьому мікросхема невидимо для користувача стирає всю сторінку цілком і перезаписує новими даними. Тобто стерши осередки за адресою 0, ми фактично стерли і перезаписали осередки з адресами 0 ... 255 (при розмірі сторінки 256 байт), тому трюк з буфером в цьому випадку не допоможе. При вичерпанні ресурс записів у такий мікросхеми виходить з ладу не одна осередок, а вся сторінка цілком. У даташітах для таких мікросхем ресурс записи вказано для сторінки, А не для конкретної комірки. Дивись, наприклад, даташит на 25LC1024 від Microchip.

Теги: Додати теги

Обнулення пам'яті EEPROM

Приклад циклом проходимо по всіх осередків пам'яті, і записує в них нулі.

// Підключення бібліотеки для роботи з EEPROM. #include "EEPROM.h" void setup () (// Прохід всіх осередків (байтів) і запис в них нулів. for (int i \u003d 0; i< EEPROM.length(); i++) EEPROM.update(i, 0); } void loop() { // Пустой цикл... }


Відкат до заводських налаштувань

Якщо ви хочете повернути пам'ять до заводських налаштувань необхідно замінити 0 на 255, тобто записати не нулі, а число 255. Таким чином, в подальшому за допомогою функції isNaN () можливо перевірити чи була проведена запис в пам'ять EEPROM чи ні.

// Підключення бібліотеки для роботи з EEPROM. #include "EEPROM.h" void setup () (// Прохід всіх осередків (байтів) і запис в них чисел 255. for (int i \u003d 0; i< EEPROM.length(); i++) EEPROM.update(i, 255); } void loop() { // Пустой цикл... }

Розкажи про нас

Повідомлення

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



Сподобалася стаття? поділіться їй