Eeprom qanday ishlaydi? Xotira chipi nima va mikrosxemalarni qanday dasturlash kerak. Loyihalar va eskizlarga misollar

Oxirgi marta, Mega-dan proshivkani qanday zaxiralash kerakligi haqidagi "savolga batafsil javob" yozganimda, ular meni EEPROM-ning zaxira nusxasini eslatmaganim uchun tanqid qilishdi. O'sha paytda men buni ongli ravishda qilmadim, chunki ... Men "snaryadga yaqinlashish" bosqichida hamma narsani murakkablashtirishning hojati yo'q deb to'g'ri qaror qildim. Gap shundaki, dasturiy ta'minotni kompilyatsiya qilish va yuklashda EEPROM o'chirilmasligi hammaga ayon emas. Arduino IDE. Ya'ni, bu proshivka IDE-dan yuklanganda EEPROM-ga mutlaqo hech narsa yuklanmaganligini anglatadi. Va EEPROM bilan manipulyatsiyalar (agar undan foydalanish proshivkada umuman yoqilgan bo'lsa) butunlay boshqacha darajada amalga oshiriladi. Va shuning uchun, yalang'och proshivkasiz zaxiralash uchun nozik sozlashlar EEPROM-da MUMKIN (faqat ehtimol) saqlanishi mumkin bo'lgan , faqat yalang'och dasturiy ta'minotni saqlash uchun etarli edi. Ammo savol tug'ilgandan beri, nima uchun uni "chaynash" kerak emas. Keling, uni tartibda ko'rib chiqaylik. EEPROM nima va nima uchun bu haqda gapirish kerak?
EEPROM - (Elektr bilan o'chiriladigan dasturlashtiriladigan faqat o'qish uchun xotira) mikrokontrollerning doimiy xotirasi bo'lib, unga ma'lumot yozilishi va o'qilishi mumkin. Ko'pincha u ish paytida o'zgarishi mumkin bo'lgan va quvvat o'chirilganda saqlanishi kerak bo'lgan dastur sozlamalarini saqlash uchun ishlatiladi.

3D printer EEPROM dan qanday foydalanadi?
Misol tariqasida Marlinni ko'rib chiqamiz.Marlin Firmware-da EEPROM ishlatilmaydi.Undan foydalanish imkoniyatini o'z ichiga olgan konfigurator parametrlari (Configuration.h) sukut bo'yicha izohlanadi.

#EEPROM_SETTINGSni aniqlang
#EEPROM_CHITCHATni aniqlang

Agar EEPROM-dan foydalanish yoqilgan bo'lsa, printer quyidagi sozlamalarni saqlashi va ishlatishi mumkin (burjua tomonidan ko'rsatilgan):

  • Bir millimetrga qadamlar soni
  • Maksimal/minimal besleme tezligi [mm/s]
  • Maksimal tezlashuv [mm/s^2]
  • Tezlashtirish
  • Orqaga olish paytida tezlashuv
  • PID sozlamalari
  • Uy pozitsiyasi ofset
  • Harakat paytida minimal besleme tezligi [mm/s]
  • Minimal bo'lim vaqti [ms]
  • Maksimal tezlikda sakrash X-Y o'qlari[mm/s]
  • Z o'qida maksimal tezlikda sakrash [mm/s]
Siz ushbu sozlamalarni printer ekrani va boshqaruv elementlari yordamida tahrirlashingiz mumkin. EEPROM yoqilganda, menyu quyidagi elementlarni ko'rsatishi kerak:
  • Xotirani saqlash
  • Xotirani yuklash
  • Failsafe-ni tiklash
To'g'ridan-to'g'ri ishlash uchun GCode dan ham foydalanishingiz mumkin (Pronterface orqali).
  • M500 Joriy sozlamalarni keyingi ishga tushirishgacha yoki M501 buyrug'igacha EEPROM-da saqlaydi.
  • M501 EEPROM dan sozlamalarni o'qiydi.
  • M502 Sozlamalarni Configurations.h da ko'rsatilgan standart qiymatlarga qaytaradi. Agar siz M500 ni undan keyin bajarsangiz, standart qiymatlar EEPROMga kiritiladi.
  • M503 Joriy sozlamalarni ko'rsatadi - ""EEPROMga yozilganlar.""
EEPROM haqida Repitier proshivkasida o'qishingiz mumkin.

EEPROM-ga ma'lumotlarni qanday o'qish va yozish kerak?
Kalit yordamida dasturiy ta'minotni zaxiralash usulida tasvirlangan usulga o'xshash -U. Faqat bu holatda, undan keyin EEPROMni o'qish kerakligini ko'rsatadigan ko'rsatgich paydo bo'ladi.

avrdude.exe -p atmega2560 -c simlari -PCOM5 -b115200 -Ueeprom:r:"printer_eeprom".eep:i

Ushbu buyruq EEPROM ma'lumotlarini "printer_eeprom.eep" fayliga o'qiydi. Agar muvaffaqiyatli bo'lsa, ekranda quyidagi kabi narsalarni ko'rasiz.

Yozish ham murakkab emas va shunga o'xshash buyruq bilan amalga oshiriladi, bu faqat kalitda farqlanadi. -U Bu "r" emas, balki "w".

avrdude.exe -p atmega2560 -c simlari -PCOM5 -b115200 -Ueeprom:w:"printer_eeprom".eep:i

Muvaffaqiyatli bo'lsa, ekranda quyidagi xabarga o'xshash narsani ko'rasiz.

EEPROM-ni qanday va nima uchun o'chirish kerak?
Boshlash uchun, "nega buni qilish kerak?" Agar oldingi proshivka ham undan foydalangan bo'lsa, EEPROMni o'chirib tashlashingiz kerak va xotirada axlat qolishi mumkin. Qaerdadir men bir proshivkadan ikkinchisiga (Marlin-dan Repitier EMNIP-ga) o'tgandan so'ng, ularning printeri, ta'bir joiz bo'lsa, "ijodiy" ishlay boshlaganida muammolarga duch kelgan odamlarga duch kelganman. Bu turli proshivkalar o'z ma'lumotlarini ostida saqlashi bilan bog'liq turli manzillar. Va noto'g'ri manzildan ma'lumotlarni o'qishga harakat qilganingizda, pandemonium boshlanadi.
EEPROM-ni faqat dasturiy ta'minotdan o'chirib tashlashingiz mumkin, ammo buning uchun siz kontrollerga vaqtincha maxsus eskizni yuklashingiz kerak bo'ladi. Bu haqda ko'proq Arduinoning rasmiy hujjatlarida o'qishingiz mumkin.
Agar EEPROM o'chirilgan bo'lsa, unda emas Arduino taxtasi, va ba'zi mavhum kontrollerlarda eskiz kodini taxtadagi ma'lum bir kontrollerdagi EEPROM hajmini hisobga olgan holda o'zgartirish kerak bo'ladi. Buning uchun "For" tsiklidagi tugatish shartini o'zgartirishingiz kerak bo'ladi. Masalan, 1kb EEPROM xotirasiga ega ATmega328 uchun tsikl quyidagicha ko'rinadi:
Xulosa.
Men anchadan beri dovdirab yurganman, lekin bularning barchasi nima uchun? Mikrodasturning zaxira nusxasini yaratishda EEPROM ham saqlanishi mumkin degan xulosaga kelish uchun, lekin faqat unda saqlangan sozlamalar kerak bo'lsa. Agar siz ularni qurbon qilishga tayyor bo'lsangiz, bu haqda unuting. Bundan tashqari, agar siz bir proshivkani boshqasiga o'zgartirsangiz yoki versiyadan boshqasiga o'tsangiz, yuklashdan oldin EEPROMni tozalashga dangasa bo'lmang. yangi proshivka. Shu bilan birga, biz juda ko'p yangi narsalarni o'rgandik.

15-dars

1-qism

Ichki doimiy xotira EEPROM

O'ylaymanki, ehtimol hamma emas, lekin ko'pchilik buni AVR kontrollerlarida, asosiydan tashqari, bilishadi tasodifiy kirish xotirasi, shuningdek, proshivkani saqlash uchun xotira, shuningdek, o'zgarmas xotira kabi mavjud EEPROM. Ushbu xotira ma'lumotni elektr yo'q qilish texnologiyasidan foydalangan holda yaratilgan bo'lib, o'zidan oldingi EPROM dan farqli o'laroq, o'chirish faqat ultrabinafsha nurlar yordamida amalga oshirilgan, bu turdagi xotiradan deyarli hamma joyda foydalanishga imkon berdi. Ma'lumki, Flesh kabi o'zgaruvchan xotira ham mavjud, bu ancha arzon, lekin u ham muhim kamchilikka ega. U erda bitta baytni o'chirib bo'lmaydi, o'chirish faqat bloklarda amalga oshiriladi, bu ba'zi hollarda juda qulay emas, ayniqsa kichik ma'lumotlarni saqlash kerak bo'lganda va bu ma'lumot kichik sozlash parametrlarini ifodalaydi. Shuning uchun biz ham to'xtashimiz kerak bu tur xotira. Va u nafaqat kontrollerda mavjud bo'lgani uchun, balki boshqaruvchi quvvatni yo'qotgandan keyin ham bizga kerak bo'ladigan ba'zi miqdorlarni saqlash uchun juda qulay.

Biz Atmega8A boshqaruvchisi bilan ishlayotganimiz sababli, biz ushbu MKning texnik hujjatlarini ochamiz va u erda bizda jami 512 bayt xotira borligini ko'ramiz. Biroq, bu unchalik kam emas. Agar biz, masalan, quvvat o'chirilgandan keyin sozlamalar ma'lumotlari yo'qolmasligi uchun qandaydir budilnikni dasturlashtirsak, biz ushbu xotiraga osongina murojaat qilishimiz mumkin. Hujjatlarda ham shunday deyilgan berilgan xotira 100 000 yozish/o'qish tsiklidan omon qolish kafolatlanadi.

Endi bu savol tug'iladi. Mikrokontrollerda ushbu xotira bilan ishlash jarayoni qanday tashkil etilgan? AVR? Har doimgidek, Atmel bu haqda g'amxo'rlik qildi va bu jarayonni apparat darajasida tashkil qildi, bu juda yoqimli, chunki biz doimo kontroller resurslarini tejashimiz kerak. Ushbu apparat darajasini boshqarish uchun ma'lum registrlar mavjud.

Ulardan biri registr juftligidir EEAR. Nima uchun er-xotin, lekin 512 manzil 8 bitga to'g'ri kelmasligi uchun yana bittasi talab qilinadi

Biz dasturlash jarayonida aniq qanday murojaat qilishimizni ko'rib chiqamiz EEPROM.

Keyingi - ma'lumotlar registri EADR

Biz ushbu registrga ma'lumotlarni ma'lum bir EEPROM xotira manziliga yozish, shuningdek, bir xil xotiraning ma'lum bir manzilidan o'qish uchun yozamiz.

Odatdagidek, apparat darajasida tashkil etilgan deyarli hech qanday periferiya yoki texnologiya boshqaruv registrsiz ishlay olmaydi. Bizning boshqaruv registrimiz bu reestrdir EECR

Keling, darhol ushbu registrning bitlari bilan tanishaylik.

Bit EERE- EEPROM xotirasidan o'qish jarayoni boshlanishiga sabab bo'lgan bit. Va ma'lumotlar o'qilishi va ma'lumotlar registriga yozilishi bilanoq, bu bit qayta o'rnatiladi. Shuning uchun biz bu bitni faqat nazorat biti emas, balki status yoki status biti deb ham hisoblashimiz mumkin.

Bit EEWE— bit, uning sozlanishi kontrollerga ma'lumotlar registridan ma'lum bir EEPROM manziliga ma'lumotlarni yozishni buyuradi. Yozish jarayoni tugagandan so'ng, bu bit ham mustaqil ravishda tiklanadi.

Bit EEMWE— yozib olish jarayoniga ruxsat beruvchi (boshlamaydigan) bit.

Bit EERIE— uzilishlarga imkon beruvchi bit.

Xo'sh, endi loyihaga o'tamiz. Loyiha odatiy standart usulda yaratilgan va nomlangan Test 13. Fayl ham kiritilgan asosiy.h va fayllar yaratiladi eeprom.h Va eeprom.c.

Bu yerga manba kodi yaratilgan fayllar

Test13.c:

#o'z ichiga oladi"main.h"

intasosiy( bekor)

{

esa(1)

{

}

}

#ifndefMAIN_H_

#aniqlashMAIN_H_

#aniqlashF_CPU8000000UL

#o'z ichiga oladi

#o'z ichiga oladi

#o'z ichiga oladi

#o'z ichiga oladi

#o'z ichiga oladi

#o'z ichiga oladi"eeprom.h"

 

#endif/* MAIN_H_ */

eeprom.h

#ifndefEEPROM_H_

#aniqlashEEPROM_H_

#o'z ichiga oladi"main.h"

bekorEEPROM_yozish( imzosizintuiAddress, imzosizcharucData);

imzosizcharEEPROM_o'qish( imzosizintuiAddress);

#endif/* EEPROM_H_ */

eeprom.c

#o'z ichiga oladi"eeprom.h"

Birinchidan, shunga ko'ra, biz ma'lumotlarni EEPROM xotirasiga yozishga harakat qilamiz. Bu mantiqan to'g'ri, chunki biz hech narsa yozmagan bo'lsak ham, o'qish uchun hech narsamiz yo'q.

Keling, o'zimizni bezovta qilmaylik va yozish funktsiyasi uchun kodni, shuningdek, texnik hujjatlardagi misoldagi o'qish funktsiyasini faylga kiritamiz. eeprom.c va ingliz tilidagi sharhlarni olib tashlang, u erga rus tilidagi sharhlarni qo'shing. Barcha tuzatishlardan so'ng fayl shunday ko'rinadi

#o'z ichiga oladi"eeprom.h"

bekorEEPROM_yozish( imzosizintuiAddress, imzosizcharucData)

{

esa( EECR& (1<< EEWE))

{}

EEAR= uiAddress; //Manzilni o'rnating

EEDR= ucData; //Biz ma'lumotlarni registrga joylashtiramiz

EECR|= (1<< EEMWE); //Yozuvga ruxsat berish

EECR|= (1<< EEWE); //Xotiraga bayt yozing

}

imzosizcharEEPROM_o'qish( imzosizintuiAddress)

{

esa( EECR& (1<< EEWE))

{} //oxirgi xotira operatsiyasi bilan yakuniy bayroq chiqishini kuting

EEAR= uiAddress; //Manzilni o'rnating

EECR|= (1<< EERE); //Xotiradan ma'lumotlar registriga o'qish operatsiyasini boshlang

qaytishEEDR; //Natijani qaytaring

}

Keling, ushbu funksiyalarning prototiplarini faylga yozamiz eeprom.h

#o'z ichiga oladi"main.h"

bekorEEPROM_yozish( imzosizintuiAddress, imzosizcharucData);

imzosizcharEEPROM_o'qish( imzosizintuiAddress);

Endi main() funksiyasida yozish funksiyasini chaqiramiz va shu orqali 1-manzilga qandaydir 8-bitli qiymat yozishga harakat qilamiz. Umuman olganda, bu xotirada adreslash 0 dan boshlanadi.

intasosiy( bekor)

EEPROM_yozish(1, 120);

Vaholanki(1)

Biz eksperimentlar uchun bir xil disk raskadrovka taxtasidan foydalanamiz, unga hech narsa ulanmasdan

Keling, loyihani yig'amiz va proshivka dasturiga o'tamiz Avrdude.

Keling, u erda proshivka faylimizni tanlaymiz, so'ngra kontrollerni o'qishga harakat qilamiz, so'ngra "hammasini o'chirish" tugmasi yordamida hamma narsani o'chirib tashlaymiz.

Shuningdek, avrdude dasturida yana bir qator "Eeprom" mavjud. Biz ushbu satrdan ushbu xotiraga dasturiy tarzda emas, balki fayldan yozish uchun foydalanishimiz mumkin. Lekin biz dasturimizdan yozamiz va EEPROM xotirasini faylga o'qish uchun ushbu qatordan foydalanamiz. Ushbu qatordagi yo'lni qo'lda yozishingiz mumkin va fayl avtomatik ravishda yaratiladi. Keling, masalan, "C:\1\11111" yozamiz va "O'qish" tugmasini bosing va bu yo'lda EEPROM xotirasidan barcha ma'lumotlar ko'rsatilgan faylga yoziladi.

Har qanday yo'lni yozishingiz mumkin, agar chap tomonda ko'rsatilgan harf mavjud bo'lsa va yozish mumkin bo'lsa. Bundan tashqari, papkani oldindan yaratish yaxshiroqdir.

Keling, ushbu faylni diskdan topamiz va uni Notepadda ochamiz

Ushbu fayl proshivka fayli bilan taxminan bir xil formatga ega. Avval manzil, keyin 32 bayt ma'lumot va keyin ushbu 32 bayt uchun nazorat summasi. Agar biz hech qachon EEPROM xotirasiga hech narsa yozmagan bo'lsak, u holda bizda barcha manzillarda FF bo'ladi, ya'ni bizda barcha xotira bitlarida mavjud.

Biz faylni yopamiz, tekshirgichni miltillashga harakat qilamiz, keyin yana EEPROM xotirasini faylga o'qiymiz va faylni ochamiz

Faylga "78" raqami yozilganligini ko'ramiz, bu o'nlik formatda 120 ni bildiradi.

Endi "Hamma narsani o'chirish" tugmasini bosishga harakat qilaylik, bu holda EEPROM xotirasi o'chirilmasligi kerak.

Biz EEPROM-ni faylga yana o'qiymiz, faylni ochamiz va xotira o'chirilganligini ko'ramiz, bizda yana hamma joyda "FF" bor.

Nima uchun bu sodir bo'ldi? Chunki siz sigortalarni sozlashingiz kerak. O'qish sug'urtasi

Keling, EESAVE bitiga e'tibor beraylik. Bu bit bitta bo'lsa (bizda bo'lgani kabi, bitlar teskari bo'ladi), keyin biz quvvat o'chirilganda, shuningdek o'chirilganda EEPROM xotirasini o'chirishga majbur qilamiz. Va buning oldini olish uchun bu bitni qayta tiklash kerak, ya'ni unga tasdiq belgisini qo'ying va sigortalarni miltillashtiring.

Sigortalarni miltillaymiz, kontrollerni o'chiramiz, kontrollerni miltillaymiz, yana o'chiramiz, EEPROM xotirasini faylga o'qiymiz va uni ochamiz. Endi bizdan hech narsa o'chirilmaganini ko'rmoqdamiz

Endi kontrollerni quvvat manbaidan uzib, bir muncha vaqt o'tgach, quvvatni qayta ishga tushirishga harakat qilaylik. Biz yana EEPROMni faylga o'qiymiz, hamma narsa buzilmagan. Ajoyib!

Qo'llanmaning keyingi qismida biz EEPROM xotirasidan ma'lumotlarni dasturiy ravishda o'qishga harakat qilamiz.

VIDEO TUTORIALni tomosha qiling (rasm ustiga bosing)

Ko'rishlar soni: 7 259

Elektr bilan o'chiriladigan dasturlashtiriladigan faqat o'qish uchun xotira (EEPROM) chiplari bosilgan elektron platada ishlatiladigan metall oksidli yarim o'tkazgichli kompyuter chiplari. Ushbu turdagi chiplarni kuchli elektron signal yordamida o'chirish va qayta dasturlash mumkin. Bu chipni ulangan qurilmadan olib tashlamasdan amalga oshirilishi mumkinligi sababli, EEPROM chiplari ko'plab sohalarda qo'llaniladi.
EEPROM chipi o'zgaruvchan xotirani o'z ichiga oladi, shuning uchun chipning quvvat manbai uzilib qolsa, uning ma'lumotlari yo'qolmaydi. Ushbu turdagi chipni tanlab dasturlash mumkin, ya'ni uning xotirasining bir qismini xotiraning qolgan qismiga ta'sir qilmasdan yangi qayta yozish bilan o'zgartirish mumkin. EEPROM chipida saqlangan ma'lumotlar o'chirilmaguncha yoki qayta dasturlashtirilmaguncha doimiy bo'lib, uni kompyuterlar va boshqa elektron qurilmalarda qimmatli komponentga aylantiradi.

EEPROM chiplari suzuvchi eshikli tranzistorlarga asoslangan. EEPROM chipi elektronlar shaklida dasturlashtiriladigan ma'lumotni eshik oksidi orqali majburlash orqali dasturlashtirilgan. Keyin suzuvchi eshik bu elektronlarni saqlashni ta'minlaydi. Xotira xujayrasi elektronlar bilan zaryadlanganda dasturlashtirilgan hisoblanadi va bu nol bilan ifodalanadi. Agar xotira xujayrasi zaryadlanmagan bo'lsa, u dasturlashtirilmagan va bitta bilan ifodalanadi.

Qurilmalarning keng doirasi xotirani talab qiladi, shuning uchun EEPROM chiplari maishiy elektronika sohasida ko'plab ilovalarga ega. Ular o'yin tizimlarida, televizorlarda va kompyuter monitorlarida qo'llaniladi. Eshitish asboblari, raqamli kameralar, Bluetooth texnologiyasi va o'yin tizimlari ham EEPROM chiplaridan foydalanadi. Ular telekommunikatsiya, tibbiyot va ishlab chiqarish sanoatida qo'llaniladi. Shaxsiy va biznes kompyuterlarida EEPROM mavjud.

EEPROM chipi, shuningdek, avtomobil sanoatida keng ko'lamli ilovalarga ega. U blokirovkaga qarshi tormoz tizimlarida, xavfsizlik yostiqchalarida, elektron barqarorlikni boshqarish vositalarida, transmissiyalarda va dvigatelni boshqarish bloklarida qo'llaniladi. EEPROM chiplari konditsioner qurilmalarda, asboblar paneli displeylarida, korpusni boshqarish modullarida va kalitsiz kirish tizimlarida ham qo'llaniladi. Ushbu chiplar yoqilg'i sarfini kuzatishga yordam beradi va turli diagnostika tizimlarida ham qo'llaniladi.

EEPROM chipi tomonidan qayta yozilishi mumkin bo'lgan takrorlash sonining chegarasi mavjud. Chip ichidagi qatlam ko'plab qayta yozishlar natijasida asta-sekin buziladi. Bu katta muammo emas, chunki ba'zi EEPROM chiplari million martagacha o'zgartirilishi mumkin. Texnologiyadagi keyingi yutuqlar kelajakda xotira chiplari nima qilishi mumkinligiga ijobiy ta'sir ko'rsatishi mumkin.

EEPROM uchuvchan bo'lmagan elektr o'chirilmaydigan xotiradir. Ushbu mikrosxemalarda yozishni o'chirish davrlari soni 1 000 000 martaga etadi. Ulardagi siqilish hujayralari, shuningdek, EPROM faqat o'qish uchun xotiralarida, suzuvchi eshikli tranzistorlar asosida amalga oshiriladi. Ushbu xotira hujayrasining ichki tuzilishi 1-rasmda ko'rsatilgan:


1-rasm. Elektr bilan o'chiriladigan ROM (EEPROM) xotira xujayrasi

EEPROM xotira xujayrasi MOS tranzistoridir, uning darvozasi polikristalli kremniydan qilingan. Keyinchalik, chipni ishlab chiqarish jarayonida bu eshik oksidlanadi va natijada u silikon oksidi, mukammal izolyatsiyalash xususiyatlariga ega dielektrik bilan o'ralgan bo'ladi. Suzuvchi eshikli tranzistorda, ROM butunlay o'chirilganda, "suzuvchi" eshikda hech qanday zaryad yo'q va shuning uchun bu tranzistor oqim o'tkazmaydi. Dasturlash vaqtida suzuvchi darvoza ustida joylashgan ikkinchi eshikka yuqori kuchlanish qo'llaniladi va tunnel effekti tufayli unga zaryadlar induktsiya qilinadi. Dasturlash kuchlanishi olib tashlangandan so'ng, induktsiyalangan zaryad suzuvchi eshikda qoladi va shuning uchun tranzistor o'tkazuvchan holatda qoladi. Uning suzuvchi murvatidagi zaryad o'nlab yillar davomida saqlanishi mumkin.

Shunga o'xshash xotira xujayrasi ultrabinafsha o'chiriladigan ROMda (EPROM) ishlatilgan. Elektr o'chirishga ega xotira katakchasida nafaqat yozish, balki ma'lumotni o'chirish ham mumkin. Ma'lumot dasturlash eshigiga ro'yxatga olish kuchlanishiga qarama-qarshi kuchlanishni qo'llash orqali o'chiriladi. UV o'chirish ROMdan farqli o'laroq, EEPROM xotirasini o'chirish vaqti taxminan 10 ms ni tashkil qiladi.

Elektr o'chirishga ega bo'lgan doimiy xotiraning blok diagrammasi ROM niqobining blok diagrammasidan farq qilmaydi. Yagona farq shundaki, erituvchi jumper o'rniga yuqorida tavsiflangan hujayra ishlatiladi. Uning soddalashtirilgan blok sxemasi 2-rasmda ko'rsatilgan.



Shakl 2. Soddalashtirilgan EEPROM blok diagrammasi

EEPROM xotira chiplariga misol sifatida biz mahalliy 573RR3, 558RR3 mikrosxemalar va AT28s010, AT28s040 seriyali Atmel, HN58V1001 Hitachi Semiconductor, Intersil korporatsiyasidan X28C010 xorijiy mikrosxemalarini nomlashimiz mumkin. EEPROM xotirasi ko'pincha foydalanuvchi ma'lumotlarini uyali qurilmalarda saqlaydi, ular quvvat o'chirilganda o'chirilmasligi kerak (masalan, manzillar kitoblari), routerlar yoki uyali qurilmalarning konfiguratsiya ma'lumotlari, kamroq tez-tez bu chiplar FPGA konfiguratsiya xotirasi yoki DSP ma'lumotlari sifatida ishlatiladi. saqlash. EEPROMlar 3-rasmda ko'rsatilganidek, elektron diagrammalarda tasvirlangan.


Shakl 3. Elektr bilan o'chiriladigan faqat o'qish uchun mo'ljallangan xotira qurilmasining grafik belgisi

Parallel EEPROM xotirasidan ma'lumotni o'qish ROM maskasidan o'qishga o'xshaydi. Birinchidan, o'qilayotgan xotira katakchasining manzili A0...A9 ikkilik kodidagi manzillar shinasiga o'rnatiladi, keyin RD o'qish signali qo'llaniladi. CS chipini tanlash signali odatda chipga kirish uchun qo'shimcha manzil simi sifatida ishlatiladi. Ushbu turdagi ROMning kirish va chiqishlarida signallarning vaqt diagrammalari 4-rasmda ko'rsatilgan.



Shakl 4. EEPROM xotirasidan ma'lumotlarni o'qish uchun signallarning vaqt diagrammasi

5-rasmda parallel EEPROM xotira chipi uchun odatiy korpusning chizmasi ko'rsatilgan.


Shakl 5. Parallel EEPROM mikrosxema korpusining chizmasi

Odatda, EEPROM-da saqlangan ma'lumotlar juda kamdan-kam hollarda talab qilinadi. Bu holda o'qish vaqti muhim emas. Shuning uchun, ba'zi hollarda, manzil va ma'lumotlar ketma-ket port orqali chipga va orqaga uzatiladi. Bu tashqi pinlar sonini kamaytirish orqali mikrosxemalar hajmini kamaytirishga imkon beradi. Bunday holda, ikkita turdagi ketma-ket portlar qo'llaniladi - SPI porti va I2C porti (mos ravishda 25cXX va 24cXX seriyali mikrosxemalar). 24cXX xorijiy seriyasi mahalliy 558PPX mikrosxemalar seriyasiga mos keladi.

24cXX seriyali mikrosxemalarning ichki diagrammasi (masalan, AT24C01) 6-rasmda ko'rsatilgan.



Shakl 6. AT24C01 chipining ichki sxemasi

Bunday chiplar televizor sozlamalarini saqlash uchun keng qo'llaniladi, masalan, kompyuter va noutbuklarda plagin va o'ynash xotirasi, FPGA konfiguratsion xotirasi va signal protsessorlari (DSP). Seriyali EEPROM xotirasidan foydalanish ushbu qurilmalarning narxini sezilarli darajada pasaytirdi va ulardan foydalanish qulayligini oshirdi. Ushbu chipning kompyuter xotira kartasining bosilgan elektron platasida joylashishiga misol 7-rasmda ko'rsatilgan.



Shakl 7. Kompyuter xotira kartasining bosilgan elektron platasidagi EEPROM

8-rasmda tashqi EEPROM chipidan foydalangan holda elektron kartaning diagrammasi ko'rsatilgan.


Shakl 8. Tashqi EEPROM yordamida elektron karta sxemasi

Ushbu diagrammada PIC16F84 mikrokontrolleri EEPROM xotirasi 24LC16B bilan ma'lumotlarni almashadi. SIM karta kabi qurilmalar endi tashqi xotira chipidan foydalanmaydi. Uyali qurilmalarning SIM-kartalari bitta chipli mikrokontrollerning ichki EEPROM xotirasidan foydalanadi. Bu sizga ushbu qurilmaning narxini imkon qadar kamaytirish imkonini beradi.

Elektr bilan o'chiriladigan dasturlashtiriladigan ROMlarni boshqarish sxemasi murakkab bo'lib chiqdi, shuning uchun ushbu mikrosxemalarni ishlab chiqishning ikkita yo'nalishi paydo bo'ldi:

  1. EEPROM - elektr bilan o'chiriladigan dasturlashtiriladigan faqat o'qish uchun mo'ljallangan xotira
  2. FLASH ROM

FLASH - ROMlar EEPROM lardan farq qiladi, chunki o'chirish har bir hujayrada alohida emas, balki butun mikrosxemada yoki EEPROMda bo'lgani kabi ushbu mikrosxemaning xotira matritsasi blokida amalga oshiriladi.


9-rasm. FLASH xotirasining grafik belgilanishi

Doimiy saqlash qurilmasiga kirishda siz avval manzillar shinasidagi xotira katakchasi manzilini belgilashingiz kerak, so'ngra chipdan o'qish operatsiyasini bajarishingiz kerak. Ushbu vaqt diagrammasi 11-rasmda ko'rsatilgan.



Shakl 10. ROMdan ma'lumotni o'qish uchun signallarning vaqt diagrammasi

10-rasmda o'qlar boshqaruv signallarini yaratish ketma-ketligini ko'rsatadi. Bu rasmda RD - o'qish signali, A - hujayra manzilini tanlash signallari (chunki manzil shinasidagi alohida bitlar turli qiymatlarni olishi mumkin, bir va nol holatga o'tish yo'llari ko'rsatilgan), D - o'qilgan chiqish ma'lumoti tanlangan ROM hujayradan.

Adabiyot:

"Faqat o'qish uchun mo'ljallangan xotira qurilmalari (ROM)" maqolasi bilan birga o'qing:

Bizning o'choq kontrollerimiz deyarli tayyor - ammo hozircha u birinchi o'chirishdan besh daqiqa oldin barcha sozlamalarni eslab turadigan "oltin baliq" boshqaruvchisi bo'lib qolmoqda. Sozlamalarimizni, o'rnatilgan haroratning qiymatini va quvvatni o'chirgandan keyin ham kalibrlash nuqtalarini eslab qolish uchun siz doimiy xotiradan - EEPROM dan foydalanishingiz kerak.
Bizning do'stlarimiz EEPROM bilan ishlash haqida juda yaxshi yozgan.

Biz bilishimiz kerak bo'lgan asosiy narsa shundaki, EEPROM xotirasi "shunchaki xotira" sifatida emas, balki chipdagi alohida ichki qurilma sifatida ko'rib chiqilishi yaxshiroqdir.
EEPROM alohida manzil maydoni, bu protsessorning manzil maydoni (FLASH va SRAM) bilan hech qanday aloqasi yo'q; doimiy xotiradagi ma'lum bir manzil bo'yicha ma'lumotlarga kirish uchun bir qator registrlar (EEARH va EEARL manzil registrlari, EEDR ma'lumotlar registri va EECR boshqaruv registri) yordamida ma'lum bir harakatlar ketma-ketligini bajarish kerak.
Ma'lumotlar jadvaliga ko'ra, EEPROM-da ma'lum bir manzilga bayt yozish uchun siz quyidagilarni qilishingiz kerak:

  1. EEPROM ma'lumotlarni yozishga tayyor bo'lguncha kuting (EECR registrining EEPE biti qayta o'rnatiladi);
  2. FLASH xotirasiga yozish tugashini kuting (SPMCSR registrining SELFPRGEN bitini qayta tiklash) - agar dasturda yuklovchi mavjud bo'lsa, buni qilish kerak;
  3. EEAR registriga yangi manzilni yozing (agar kerak bo'lsa);
  4. EEDR registriga ma'lumotlar baytini yozish (agar kerak bo'lsa);
  5. EECR registrining EEMPE bitini bittaga o'rnating;
  6. EEMPE bayrog'ini o'rnatgandan so'ng to'rt soat tsikli ichida biz EECR registrining EEPE bitiga mantiqiy bitni yozamiz.

Keyin protsessor keyingi buyruqni bajarishdan oldin 2 soat tsiklini o'tkazib yuboradi.
Ikkinchi nuqta, agar dasturda yuklovchi mavjud bo'lsa, bajarilishi kerak - haqiqat shundaki, EEPROM-ga yozish FLASH xotirasiga yozish bilan bir vaqtda amalga oshirilmaydi, shuning uchun EEPROM-ga yozishdan oldin FLASH xotirasini dasturlash tugaganligiga ishonch hosil qilishingiz kerak; agar mikrokontrollerda yuklash moslamasi bo'lmasa, u FLASH xotirasi tarkibini hech qachon o'zgartirmaydi (avr Garvard arxitekturasiga ega ekanligini unutmang: dastur xotirasi (FLASH) va ma'lumotlar xotirasi (SRAM) ajratilgan).
Yozish davrining davomiyligi chipning ichki RC osilatorining chastotasiga, besleme kuchlanishiga va haroratga bog'liq; odatda ATmega48x/88x/168x modellari uchun bu 3,4 ms (!), ba'zi eski modellar uchun - 8,5 ms (!!!).
Bundan tashqari, EEPROM-ga yozishda, yuqoridagi harakatlar ketma-ketligini bajarish paytida qo'ng'iroq uzilishlari bilan bog'liq muammolar paydo bo'lishi mumkin - shuning uchun EEPROM-ga yozish paytida uzilishlarni o'chirib qo'yish yaxshiroqdir.
O'zgaruvchan xotirani o'qish biroz osonroq:

  1. EEPROM ma'lumotlarni o'qishga tayyor bo'lishini kuting (EECR registrining EEWE biti qayta o'rnatiladi);
  2. EEAR registriga manzilni yozing;
  3. EECR registrining EERE bitini bittaga o'rnating;
  4. biz EEDR registridagi ma'lumotlarni o'qiymiz (aslida, so'ralgan ma'lumotlar ma'lumotlar registriga ko'chirilganda, EERE biti apparat tomonidan qayta o'rnatiladi; lekin bu bitning holatini kuzatishning hojati yo'q, chunki EEPROMdan o'qish operatsiyasi har doim bir soat siklida bajariladi).

EERE-da bir oz o'rnatgandan so'ng, protsessor keyingi buyruqni bajarishdan oldin 4 soat tsiklini o'tkazib yuboradi.
Ko'rib turganimizdek, doimiy xotira bilan ishlash ko'p vaqt talab qiladigan jarayondir; agar biz tez-tez EEPROM-dan ma'lumotlarni yozsak va o'qisak, dastur sekinlasha boshlashi mumkin.

Biroq, biz IAR muhitida dastur yozyapmiz va biz omadlimiz: EEPROM-dan o'qish va yozish bilan bog'liq barcha ishlarni ishlab chiqish muhiti amalga oshiradi - iar o'zgaruvchan xotirada o'zgaruvchilarni yaratadigan "__eeprom" modifikatoriga ega. - va keyin biz "doimiy" o'zgaruvchilardan "joriy" ga (kontroller ishga tushirilganda) o'qishimiz yoki "joriy" o'zgaruvchilardan "doimiy" ga yozishimiz kerak bo'ladi - ya'ni joriy qiymat o'zgarganda, doimiy xotiradagi o'zgaruvchini ham o'zgartirish kerak.
Yangi o'zgaruvchilar quyidagicha ko'rinadi:

Eeprom uint16_t EEP_MinTemperature;

Yana bir nechta umumiy so'zlar: va biz eeprom o'zgaruvchilari uchun ko'rsatkichlarni qabul qilmasak ham, eeprom alohida manzil maydoni ekanligini unutmasligimiz kerak va eepromga ko'rsatgich yaratish uchun (va kompilyator buni amalga oshirishga imkon beradi), biz bu eepromdagi manzilga ko'rsatgich ekanligini ko'rsatishi kerak:

Uint16_t __eeprom *EEP_MinTemperatureAdr;

Keling, pechka boshqaruvchisi va EEPROM-ga qaytaylik. Bizning holatda, albatta, EEPROM uchun virtual mashina qabul qilinmaydi; Bundan tashqari, doimiy xotira bilan ishlash uchun alohida kutubxona kerak yoki yo'qligini ko'rib chiqishga arziydi - muhim sozlamalarni yozib olish dastur bo'ylab juda "tarqalgan"; agar siz alohida kutubxona yaratmoqchi bo'lsangiz, o'zaro bog'lanishlar qilishingiz kerak bo'ladi: EEPROM kutubxonasida ADC, isitish elementi va global sozlamalar kutubxonalarini ulang; va bu periferik kutubxonalarda EEPROM kutubxonasini ulash juda yaxshi yondashuv emas.
Yana bir variant - sozlamalarni saqlashingiz kerak bo'lgan har bir kutubxonaga eeprom o'zgaruvchisini qo'shish va mos keladigan sozlamalarni to'g'ridan-to'g'ri virtual mashinalarda saqlash. Biz ushbu variantni amalga oshiramiz.
Birinchidan, EEPROM-da qanday o'zgaruvchilarni saqlashimiz kerakligini sanab o'tamiz:

  1. kalibrlash nuqtalari
  2. o'rnatilgan maksimal-minimal harorat va haroratni sozlash bosqichining qiymatlari
  3. harorat qiymatini belgilang
  4. PID kontroller koeffitsientlari

Biz oshxona taymerining qiymatini saqlamaymiz - foydalanuvchi har safar elektrni o'chirgandan so'ng pechka taymerini o'rnatishi kerak deb taxmin qilamiz.
Ushbu sozlamalarning barchasi foydalanuvchi tomonidan enkoderni aylantirib, so'ngra foydalanuvchi tugmachasini qisqa bosib o'rnatiladi. Shu bilan birga, biz EEPROM o'qish-yozish davrlarining soni hali ham cheklanganligini eslaymiz, shuning uchun bir xil ma'lumotni qayta yozmang (masalan, agar foydalanuvchi ba'zi sozlamalarning bir xil qiymatini tanlagan bo'lsa). Shuning uchun, __eeprom o'zgaruvchisiga har bir o'zgartirishdan oldin, biz uni qayta yozish kerakligini tekshiramiz:

//agar qiymat o'zgargan bo'lsa, agar (ADCTemperature.atMinTemperatureValue != (uint16_t)VMEncoderCounter.ecntValue) (ADCTemperature.atMinTemperatureValue = (uint16_t)VMEncoderCounter.atMinTemperatureValue = (uint16_t)VMEncoderCounter.atMinTemperatureValue = (uint16_t)VMEncoderCounter.atMinTemperatureValue) bo'lsa, uni doimiy xotiraga yozing. ; )

EEPROM-dan sozlamalarni o'qish ham oddiy - "joriy" sozlamalarni ishga tushirishda biz shunchaki o'zgarmas xotiradan qiymatni o'qiymiz:

ADCTemperature.atMinTemperatureValue = EEP_MinTemperature;

Bizning qurilmamiz boshidanoq EEPROM-da ba'zi sozlamalarga ega bo'lishi uchun birinchi yuklash loyihasi ushbu o'zgaruvchilar ishga tushirilishi bilan kompilyatsiya qilinishi mumkin:

Eeprom uint16_t EEP_MinTemperature = 20; ... //kalibrlash nuqtalarini doimiy xotirada saqlash uchun massiv __eeprom TCalibrationData EEP_CalibrationData = ((20, 1300), (300, 4092));

Bunday holda, kompilyator asosiy funktsiya bilan ishlashni boshlashdan oldin __eeprom o'zgaruvchilarni ishga tushiradi. O'zgaruvchan xotiraga ega faylni (.eep) olish uchun siz quyidagi sozlamalarga o'tishingiz kerak:
Loyiha->Tanlovlar..->Linker->Qo'shimcha parametrlar
Agar "Buyruqlar qatori parametrlaridan foydalanish" katagi belgilanmagan bo'lsa, uni belgilang va qatorni qo'shing
-Ointel-standart,(XDATA)=.eep
Avval biz loyihani initsializatsiya qilingan o'zgaruvchilar bilan kompilyatsiya qilamiz, eep faylini alohida saqlang; keyin o'zgaruvchilarni yaratishda ishga tushirishni olib tashlaymiz.

Hammasi shu - bizning pechimiz tayyor!