eeprom хэрхэн ажилладаг вэ? Санах ойн чип гэж юу вэ, микро схемийг хэрхэн програмчлах вэ. Төсөл, тойм зургийн жишээ

Хамгийн сүүлд би Mega-аас програм хангамжийг хэрхэн нөөцлөх талаар "асуултанд дэлгэрэнгүй хариулт" бичихэд тэд намайг EEPROM-н нөөцлөлтийг дурдаагүй гэж зэмлэсэн. Тэр үед би үүнийг ухамсартайгаар хийгээгүй, учир нь ... Анхны "харвах суманд ойртох" үе шатанд бүх зүйлийг төвөгтэй болгох шаардлагагүй гэж би зөв дүгнэсэн. Үнэн хэрэгтээ програм хангамжийг эмхэтгэх, байршуулах үед EEPROM анивчдаггүй нь хэнд ч ойлгомжтой биш юм. Arduino IDE. Өөрөөр хэлбэл, програм хангамжийг IDE-ээс татаж авах үед EEPROM-д юу ч байршуулдаггүй гэсэн үг юм. Мөн EEPROM-тай хийсэн залруулга (хэрэв түүний хэрэглээ нь програм хангамжид идэвхжсэн бол) огт өөр түвшинд хийгддэг. Тиймээс нүцгэн програм хангамжийг нөөцлөхгүйгээр нарийн тохируулга, үүнийг (зөвхөн магадгүй) EEPROM-д хадгалах боломжтой тул зөвхөн нүцгэн програм хангамжийг хадгалахад хангалттай байсан. Гэхдээ асуулт гарч ирсэн болохоор "зажилж" яагаад болохгүй гэж. Үүнийг дарааллаар нь авч үзье. EEPROM гэж юу вэ, яагаад энэ тухай ярих вэ?
EEPROM - (Цахилгаанаар устгагдах боломжтой программчлагдсан зөвхөн унших санах ой) микроконтроллерын тогтворгүй санах ойн мэдээлэл бичиж унших боломжтой хэсэг. Энэ нь ихэвчлэн ажиллах явцад өөрчлөгдөж болох програмын тохиргоог хадгалахад ашиглагддаг бөгөөд цахилгаан унтарсан үед хадгалагдах ёстой.

3D принтер EEPROM-г хэрхэн ашигладаг вэ?
Жишээ болгон Marlin-г харцгаая.Marlin Firmware-д EEPROM-г ашиглаагүй.Тохируулагчийн параметрүүдийг (Configuration.h) ашиглах боломжуудыг багтаасан нь анхдагчаар тайлбарлагдана.

#EEPROM_SETTINGS-г тодорхойлох
#EEPROM_CHITCHAT-ыг тодорхойлно

Хэрэв EEPROM-ийн хэрэглээ идэвхжсэн бол хэвлэгч нь дараах тохиргоог (хөрөнгөтөнөөс тодорхойлсон) хадгалж, ашиглаж болно.

  • Миллиметр тутамд хийх алхамуудын тоо
  • Хамгийн их/хамгийн бага тэжээлийн хурд [мм/с]
  • Хамгийн их хурдатгал [мм/с^2]
  • Хурдатгал
  • Татаж авах үеийн хурдатгал
  • PID тохиргоо
  • Гэрийн байрлалын офсет
  • Хөдөлгөөний үеийн хамгийн бага тэжээлийн хурд [мм/с]
  • Хэсгийн хамгийн бага хугацаа [мс]
  • Хамгийн дээд хурдны үсрэлт X-Y тэнхлэгүүд[мм/с]
  • Z тэнхлэг дэх хамгийн дээд хурдны үсрэлт [мм/с]
Та принтерийн дэлгэц болон удирдлагыг ашиглан эдгээр тохиргоог засах боломжтой. EEPROM-г идэвхжүүлсэн үед цэс дараах зүйлсийг харуулах ёстой.
  • Санах ойг хадгалах
  • Санах ойг ачаалах
  • Failsafe-г сэргээх
Та мөн GCode ашиглан шууд ажиллах боломжтой (Pronterface-ээр).
  • M500 Дараагийн эхлүүлэх эсвэл M501 команд хүртэл одоогийн тохиргоог EEPROM-д хадгална.
  • M501 EEPROM-аас тохиргоог уншина.
  • M502 Configurations.h-д заасан өгөгдмөл утгууд руу тохиргоог дахин тохируулна. Хэрэв та түүний дараа M500-г ажиллуулбал EEPROM-д анхдагч утгуудыг оруулах болно.
  • M503 Одоогийн тохиргоог харуулна - ""EEPROM-д бичигдсэн.""
Та Repitier програм хангамжаас EEPROM-ийн талаар уншиж болно.

EEPROM руу өгөгдлийг хэрхэн уншиж, бичих вэ?
Түлхүүрийг ашиглан програм хангамжийн нөөцлөх аргад тайлбарласан аргатай төстэй . Зөвхөн энэ тохиолдолд түүний дараа EEPROM-ийг унших шаардлагатай байгааг харуулсан заагч гарч ирнэ.

avrdude.exe -p atmega2560 -c утас -PCOM5 -b115200 -Ueeprom:r:"printer_eeprom".eep:i

Энэ тушаал нь EEPROM-ийн өгөгдлийг "printer_eeprom.eep" файл руу уншина. Хэрэв амжилттай бол дэлгэцэн дээр дараахтай адил зүйл харагдах болно.

Бичлэг хийх нь тийм ч төвөгтэй биш бөгөөд ижил төстэй тушаалаар хийгддэг бөгөөд энэ нь зөвхөн товчлуур дээр л ялгаатай байдаг. Энэ нь "r" биш, харин "w" юм.

avrdude.exe -p atmega2560 -c утас -PCOM5 -b115200 -Ueeprom:w:"printer_eeprom".eep:i

Хэрэв амжилттай бол та дэлгэцэн дээр дараах мессежтэй төстэй зүйлийг харах болно.

EEPROM-г хэрхэн, яагаад устгах вэ?
Эхлэхийн тулд "Яагаад ингэдэг вэ?" Хэрэв та өмнөх программ хангамж ашиглаж байсан бол EEPROM-г устгах хэрэгтэй бөгөөд санах ойд хог хаягдал үлдэх магадлалтай. Хаа нэгтээ би нэг програм хангамжаас нөгөөд (Marlin-аас Repitier EMNIP руу) шилжсэний дараа принтер нь "бүтээлч байдлаар" ажиллаж эхэлсэнтэй тулгарсан. Энэ нь өөр өөр програм хангамжууд өөрсдийн өгөгдлийг дор хадгалдагтай холбоотой юм өөр өөр хаягууд. Мөн та буруу хаягаас өгөгдлийг уншихыг оролдоход пандемони эхэлдэг.
Та EEPROM-ийг зөвхөн программ хангамжаас устгаж болно, гэхдээ үүнийг хийхийн тулд та хянагч руу тусгай ноорог түр байршуулах шаардлагатай болно. Та энэ тухай албан ёсны Arduino баримтаас уншиж болно.
Хэрэв EEPROM-г устгасан бол оруулахгүй Arduino самбар, мөн зарим хийсвэр хянагч дээр самбар дээрх тодорхой хянагч дахь EEPROM-ийн хэмжээг харгалзан ноорог кодыг өөрчлөх шаардлагатай болно. Үүнийг хийхийн тулд та "For" давталт дахь төгсгөлийн нөхцөлийг өөрчлөх хэрэгтэй болно. Жишээлбэл, 1кб EEPROM санах ойтой ATmega328-ийн хувьд мөчлөг дараах байдалтай байна.
Дүгнэлт.
Би нэлээдгүй хугацаанд тэнүүчилж байсан, гэхдээ энэ бүхэн юунд зориулагдсан бэ? Програм хангамжийг нөөцлөхдөө EEPROM-г хадгалах боломжтой гэсэн дүгнэлтэд хүрэхийн тулд зөвхөн түүнд хадгалагдсан тохиргоог хийх шаардлагатай. Хэрэв та тэднийг золиослоход бэлэн байгаа бол энэ тухай март. Мөн хэрэв та нэг программыг нөгөө рүү сольсон эсвэл хувилбараас нөгөөд шилжсэн бол байршуулахаасаа өмнө EEPROM-г цэвэрлэхээс залхуурах хэрэггүй. шинэ програм хангамж. Үүний зэрэгцээ бид маш олон шинэ зүйлийг сурсан.

Хичээл 15

1-р хэсэг

Дотоод тогтворгүй санах ой EEPROM

Хүн бүр биш байж магадгүй, гэхдээ гол зүйлээс гадна AVR хянагчдад үүнийг олон хүмүүс мэддэг гэж би бодож байна санамсаргүй хандалт санах ой, програм хангамжийг хадгалах санах ойноос гадна тогтворгүй санах ой байдаг EEPROM. Энэхүү санах ой нь мэдээллийг цахилгаанаар устгах технологийг ашиглан хийгдсэн бөгөөд өмнөх үеийн EPROM-ээс ялгаатай нь зөвхөн хэт ягаан туяа ашиглан устгадаг байсан нь энэ төрлийн санах ойг бараг хаа сайгүй ашиглах боломжтой болгосон. Бидний мэдэж байгаагаар Flesh гэх мэт тогтворгүй санах ой байдаг бөгөөд энэ нь хамаагүй хямд боловч мэдэгдэхүйц сул талтай. Тэнд нэг байтыг устгах боломжгүй, устгах нь зөвхөн блокоор хийгддэг бөгөөд энэ нь зарим тохиолдолд тийм ч тохиромжтой биш юм, ялангуяа бага хэмжээний мэдээлэл хадгалах шаардлагатай үед энэ мэдээлэл нь жижиг тохиргооны параметрүүдийг илэрхийлдэг. Тиймээс бид бас зогсох ёстой энэ төрөлсанах ой. Энэ нь хянагч дотор байгаа учраас төдийгүй хянагч хүчээ алдсаны дараа ч бидэнд хэрэгтэй зарим хэмжээг хадгалахад маш тохиромжтой байдаг.

Бид Atmega8A хянагчтай ажиллаж байгаа тул бид энэ MK-ийн техникийн баримт бичгийг нээж, нийт 512 байт санах ойтой болохыг харах болно. Гэсэн хэдий ч энэ нь тийм ч бага биш юм. Жишээлбэл, бид цахилгааныг унтраасны дараа тохиргооны өгөгдөл алдагдахгүй байхын тулд ямар нэгэн сэрүүлэгтэй цагийг програмчлах юм бол бид энэ санах ойд хялбархан хандаж болно. Баримт бичигт ч гэсэн ийм байна өгөгдсөн санах ой 100,000 бичих/унших циклийг даван туулах баталгаатай.

Одоо энэ асуулт гарч ирнэ. Микроконтроллерт энэ санах ойтой ажиллах үйл явц хэрхэн зохион байгуулагдсан бэ? AVR? Ердийнх шигээ Атмел үүнийг анхаарч, энэ үйл явцыг техник хангамжийн түвшинд зохион байгуулсан нь бид хянагчийн нөөцийг байнга хэмнэх шаардлагатай байдаг тул маш таатай байдаг. Энэхүү техник хангамжийн түвшинг хянахын тулд тодорхой бүртгэлүүд байдаг.

Тэдний нэг нь бүртгэлийн хос юм EEAR. Яагаад хос вэ, гэхдээ 512 хаяг 8 битэд багтахгүй тул дахиад нэг хаяг шаардлагатай

Програмчлалын явцад бид яг яаж шийдвэрлэхээ харах болно EEPROM.

Дараагийнх нь мэдээллийн бүртгэл юм EADR

Бид энэ бүртгэлд өгөгдлийг тодорхой EEPROM санах ойн хаяг руу бичих, мөн ижил санах ойн тодорхой хаягаас уншихын тулд өгөгдлийг бичих болно.

Ердийнх шиг техник хангамжийн түвшинд зохион байгуулагдсан бараг ямар ч захын төхөөрөмж эсвэл технологи нь хяналтын бүртгэлгүйгээр хийж чадахгүй. Манай удирдах бүртгэл бол бүртгэл юм EECR

Энэ регистрийн хэсэгтэй шууд танилцацгаая.

Бит EERE- бага зэрэг нь EEPROM санах ойноос унших үйл явцыг эхлүүлэхэд хүргэдэг. Өгөгдлийг өгөгдлийн бүртгэлд уншиж, бичиж дуусмагц энэ бит дахин тохируулагдах болно. Тиймээс бид энэ битийг зөвхөн хяналтын бит төдийгүй статус эсвэл статусын бит гэж үзэж болно.

Бит EEWE- бага зэрэг, тохиргоо нь хянагчийг өгөгдлийн бүртгэлээс тодорхой EEPROM хаяг руу өгөгдөл бичихийг тушаадаг. Бичих процедур дууссаны дараа энэ битийг бие даан тохируулна.

Бит EEMWE- бичлэг хийх процессыг зөвшөөрдөг (эхлүүлдэггүй) жаахан.

Бит САЙХАН- тасалдлыг идэвхжүүлдэг бит.

За одоо төсөл рүүгээ орцгооё. Төслийг ердийн стандарт аргаар бүтээж, нэрлэсэн Туршилт 13. Файлыг бас оруулсан гол.хмөн файлууд үүсгэгддэг eeprom.hТэгээд eeprom.c.

Энд эх сурвалжүүсгэсэн файлууд

Test13.c:

#оруулна"main.h"

intгол( хүчингүй)

{

байхад(1)

{

}

}

#ifndefMAIN_H_

#тодорхойлохMAIN_H_

#тодорхойлохF_CPU8000000УЛ

#оруулна

#оруулна

#оруулна

#оруулна

#оруулна

#оруулна"eeprom.h"

 

#endif/* MAIN_H_ */

eeprom.h

#ifndefEEPROM_H_

#тодорхойлохEEPROM_H_

#оруулна"main.h"

хүчингүйEEPROM_бичих( гарын үсэг зураагүйintuiAddress, гарын үсэг зураагүйтэмдэгтucData);

гарын үсэг зураагүйтэмдэгтEEPROM_унших( гарын үсэг зураагүйintuiAddress);

#endif/* EEPROM_H_ */

eeprom.c

#оруулна"eeprom.h"

Эхлээд бид EEPROM санах ой руу өгөгдөл бичихийг хичээх болно. Энэ нь логик юм, учир нь бид юу ч бичээгүй байхад унших зүйл алга.

За ингээд өөрийгөө зовоох хэрэггүй, бичих функцийн код, мөн техникийн баримт бичигт байгаа жишээн дээрх унших функцийг файлд оруулъя. eeprom.cАнгли хэл дээрх сэтгэгдлүүдийг устгаж, тэнд орос хэлээр бичсэн сэтгэгдэлүүдийг оруулаарай. Бүх залруулга хийсний дараа файл иймэрхүү харагдах болно

#оруулна"eeprom.h"

хүчингүйEEPROM_бичих( гарын үсэг зураагүйintuiAddress, гарын үсэг зураагүйтэмдэгтucData)

{

байхад( EECR& (1<< EEWE))

{}

EEAR= uiAddress; //Хаяг тохируулна уу

EEDR= ucData; //Бид өгөгдлийг бүртгэлд оруулдаг

EECR|= (1<< EEMWE); //Бичлэг хийхийг зөвшөөрөх

EECR|= (1<< EEWE); //Санах ой руу байт бичнэ

}

гарын үсэг зураагүйтэмдэгтEEPROM_унших( гарын үсэг зураагүйintuiAddress)

{

байхад( EECR& (1<< EEWE))

{} //сүүлчийн санах ойн үйлдлээр төгсгөлийн туг гарахыг хүлээнэ

EEAR= uiAddress; //Хаяг тохируулна уу

EECR|= (1<< EERE); //Санах ойноос өгөгдлийн бүртгэл рүү унших үйлдлийг эхлүүлнэ

буцахEEDR; //Үр дүнг буцаана

}

Эдгээр функцүүдийн прототипийг файлд бичье eeprom.h

#оруулна"main.h"

хүчингүйEEPROM_бичих( гарын үсэг зураагүйintuiAddress, гарын үсэг зураагүйтэмдэгтucData);

гарын үсэг зураагүйтэмдэгтEEPROM_унших( гарын үсэг зураагүйintuiAddress);

Одоо main() функцийн бичих функцийг дуудаж 1-р хаяг руу 8 битийн утгыг бичихийг оролдъё. Ерөнхийдөө энэ санах ойд хаяглалт 0-ээс эхэлдэг.

intгол( хүчингүй)

EEPROM_бичих(1, 120);

байхад(1)

Бид туршилт хийхэд ижил дибаг хийх самбарыг ашигладаг бөгөөд үүнд юу ч холбодоггүй

Төслөө угсарч, програм хангамжийн програм руу явцгаая Аврдүдэ.

Эндээс програм хангамжийн файлаа сонгоод, хянагчийг уншиж үзээд "бүгдийг арилгах" товчийг ашиглан бүгдийг устгацгаая.

Мөн avrdude хөтөлбөрт "Eeprom" гэсэн өөр нэг мөр байдаг. Бид энэ мөрийг ашиглан энэ санах ойд программчлалаар биш, харин файлаас бичиж болно. Гэхдээ бид програмаасаа бичих бөгөөд энэ мөрийг ашиглан EEPROM санах ойг файл болгон унших болно. Та энэ мөрөнд замыг гараар бичиж болох бөгөөд файл автоматаар үүсгэгдэх болно. Жишээлбэл, "C:\1\11111" гэж бичээд "Унших" дээр дарж, энэ замд EEPROM санах ойн бүх мэдээлэл заасан файлд бичигдэх болно.

Зүүн талд заасан үсэг бүхий зөөвөрлөгч байгаа бөгөөд бичих боломжтой бол та ямар ч замыг бичиж болно. Мөн хавтасыг урьдчилан үүсгэх нь дээр.

Одоо энэ файлыг дискнээс олоод Notepad дээр нээцгээе

Энэ файл нь програм хангамжийн файлтай ойролцоогоор ижил форматтай байна. Эхлээд хаяг, дараа нь 32 байт мэдээлэл, дараа нь эдгээр 32 байтыг шалгах нийлбэр. Хэрэв бид хэзээ ч EEPROM санах ойд юу ч бичиж байгаагүй бол бүх хаягууд дээр FF байх болно, өөрөөр хэлбэл санах ойн бүх битүүдэд хаягууд байх болно.

Бид файлыг хааж, хянагчийг анивчихыг оролдоод EEPROM санах ойг файл руу дахин уншиж, файлыг нээнэ

Файлд "78" гэсэн тоог бичсэнийг бид харж байгаа бөгөөд энэ нь аравтын бутархай хэлбэрээр 120 гэсэн үг юм.

Одоо "Бүх зүйлийг арилгах" товчийг дарж үзээрэй, энэ тохиолдолд EEPROM санах ойг устгах ёсгүй.

Бид EEPROM-г файл руу дахин уншиж, файлыг нээж, санах ой арилсаныг харвал бид дахин "FF" хаа сайгүй байна.

Яагаад ийм болсон бэ? Учир нь та гал хамгаалагчийг тохируулах хэрэгтэй. Унших гал хамгаалагч

EESAVE бит дээр анхаарлаа хандуулцгаая. Энэ бит нь нэг байх үед (биднийх шиг битүүд нь урвуу байрлалтай байдаг) бид EEPROM санах ойг цахилгаан унтрааж, мөн устгасан үед устгадаг. Үүнээс урьдчилан сэргийлэхийн тулд энэ битийг дахин тохируулах хэрэгтэй, өөрөөр хэлбэл тэмдэг тавьж, гал хамгаалагчийг анивчих хэрэгтэй.

Бид гал хамгаалагчийг анивчуулж, хянагчийг устгаж, хянагчийг анивчуулж, дахин устгаж, EEPROM санах ойг файл болгон уншиж, нээнэ. Одоо биднээс юу ч арилгаагүйг бид харж байна

Одоо хянагчийг тэжээлийн эх үүсвэрээс салгаж, хэсэг хугацааны дараа дахин тэжээл өгөхийг оролдъё. Бид дахин EEPROM-г файл руу уншсан, бүх зүйл бүрэн бүтэн байна. Агуу их!

Хичээлийн дараагийн хэсэгт бид EEPROM санах ойноос өгөгдлийг программчлан уншихыг хичээх болно.

ВИДЕО СУРГАЛТ үзэх (зураг дээр дарна уу)

Нийтлэл үзсэн тоо: 7,259

Цахилгаанаар арилгадаг программчлагдах боломжтой санах ой (EEPROM) нь хэвлэмэл хэлхээний самбар дээр ашиглагддаг металл исэл хагас дамжуулагч компьютерийн чип юм. Энэ төрлийн чипийг хүчтэй цахим дохио ашиглан устгаж, дахин програмчилж болно. Энэ нь холбогдсон төхөөрөмжөөсөө чипийг салгахгүйгээр хийх боломжтой тул EEPROM чипийг олон салбарт ашигладаг.
EEPROM чип нь тогтворгүй санах ойтой тул чипийн тэжээлийн хангамж тасалдсан тохиолдолд түүний өгөгдөл алдагдахгүй. Энэ төрлийн чипийг сонгон програмчлах боломжтой, өөрөөр хэлбэл санах ойнх нь хэсгийг бусад санах ойд нөлөөлөхгүйгээр шинээр дарж бичих замаар өөрчлөх боломжтой. EEPROM чип дотор хадгалагдсан мэдээлэл нь устгагдах эсвэл дахин програмчлах хүртэл байнга байдаг тул компьютер болон бусад электрон төхөөрөмжүүдийн үнэ цэнэтэй бүрэлдэхүүн хэсэг болдог.

EEPROM чипүүд нь хөвөгч хаалганы транзистор дээр суурилдаг. EEPROM чип нь электрон хэлбэрээр программчлагдах мэдээллийг хаалганы оксидоор нэвтрүүлэх замаар програмчлагдсан. Дараа нь хөвөгч хаалга нь эдгээр электронуудыг хадгалах боломжийг олгодог. Санах ойн эс нь электроноор цэнэглэгдсэн үед программчлагдсан гэж тооцогддог бөгөөд үүнийг тэгээр илэрхийлдэг. Хэрэв санах ойн үүр цэнэглэгдээгүй бол энэ нь програмчлагдаагүй бөгөөд нэгээр илэрхийлэгдэнэ.

Өргөн хүрээний төхөөрөмжүүд санах ой шаарддаг тул EEPROM чипүүд нь хэрэглээний электроникийн салбарт олон хэрэглээтэй байдаг. Эдгээрийг тоглоомын систем, телевизор, компьютерийн дэлгэц зэрэгт ашигладаг. Сонсголын аппарат, дижитал камер, Bluetooth технологи, тоглоомын системүүд мөн EEPROM чип ашигладаг. Эдгээрийг харилцаа холбоо, анагаах ухаан, үйлдвэрлэлийн салбарт ашигладаг. Хувийн болон бизнесийн компьютерууд нь EEPROM агуулдаг.

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

EEPROM чипээр дарж бичих давталтын тоонд хязгаар бий. Чип доторх давхарга нь олон тооны дахин бичихэд аажмаар гэмтдэг. Зарим EEPROM чипийг сая хүртэл удаа өөрчлөх боломжтой тул энэ нь тийм ч том асуудал биш юм. Технологийн дэвшил нь санах ойн чипүүд ирээдүйд юу хийж чадах вэ гэдэгт эерэгээр нөлөөлнө.

EEPROM нь тогтворгүй цахилгаанаар арилдаг санах ой юм. Эдгээр бичил схемүүд дэх бичих, устгах мөчлөгийн тоо 1,000,000 дахин хүрдэг. Тэдгээрийн гацах эсүүд, мөн EPROM-н зөвхөн уншигдах санах ойнуудад хөвөгч хаалгатай транзисторууд дээр суурилдаг. Энэхүү санах ойн эсийн дотоод бүтцийг Зураг 1-т үзүүлэв.


Зураг 1. Цахилгаанаар устгадаг ROM (EEPROM) санах ойн үүр

EEPROM санах ойн үүр нь MOS транзистор бөгөөд хаалга нь поликристал цахиураар хийгдсэн байдаг. Дараа нь чипийг үйлдвэрлэх явцад энэ хаалга нь исэлдэж, үр дүнд нь маш сайн тусгаарлагч шинж чанартай диэлектрик болох цахиурын ислээр хүрээлэгдсэн болно. Хөвөгч хаалгатай транзисторын хувьд ROM бүрэн арилах үед "хөвөгч" хаалганд цэнэг байхгүй тул энэ транзистор нь гүйдэл дамжуулахгүй. Програмчлалын явцад хөвөгч хаалганы дээгүүр байрлах хоёр дахь хаалганд өндөр хүчдэл өгч, хонгилын нөлөөллөөс болж цэнэгийг өдөөдөг. Програмчлалын хүчдэлийг арилгасны дараа өдөөгдсөн цэнэг хөвөгч хаалган дээр үлдэх бөгөөд транзистор нь дамжуулагч төлөвт үлдэнэ. Түүний хөвөгч боолтны цэнэгийг хэдэн арван жил хадгалах боломжтой.

Үүнтэй төстэй санах ойн эсийг хэт ягаан туяагаар устгадаг ROM (EPROM) дээр ашигласан. Цахилгаанаар арилгадаг санах ойн үүрэнд зөвхөн бичихээс гадна мэдээллийг устгах боломжтой. Програмчлалын хаалган дээр бичлэгийн хүчдэлийн эсрэг хүчдэл өгснөөр мэдээлэл устдаг. Хэт ягаан туяаны ROM-аас ялгаатай нь EEPROM санах ойг устгах хугацаа 10 мс орчим байна.

Цахилгаанаар арилгадаг тогтворгүй санах ойн блок диаграм нь маск ROM-ийн блок диаграммаас ялгаатай биш юм. Ганц ялгаа нь хайлдаг холбогчийн оронд дээр дурдсан үүрийг ашигладаг. Түүний хялбаршуулсан блок диаграммыг Зураг 2-т үзүүлэв.



Зураг 2. Хялбаршуулсан EEPROM блок диаграмм

EEPROM санах ойн чипүүдийн жишээ болгон бид дотоодын 573РР3, 558РР3 чип, AT28с010, Atmel-ийн AT28с040 цуврал, Hitachi Semiconductor-аас HN58V1001, Intersil корпорацийн X28C010-ын гадаад микро схемүүдийг нэрлэж болно. EEPROM санах ой нь хэрэглэгчийн өгөгдлийг цахилгаан унтраасан үед устгаж болохгүй үүрэн холбооны төхөөрөмжид (жишээлбэл, хаягийн дэвтэр), чиглүүлэгч эсвэл үүрэн холбооны төхөөрөмжийн тохиргооны мэдээлэлд хадгалдаг бөгөөд эдгээр чипийг FPGA тохиргооны санах ой эсвэл DSP өгөгдөл болгон ашигладаггүй. хадгалах. EEPROM-уудыг 3-р зурагт үзүүлсэн хэлхээний диаграммд дүрсэлсэн болно.


Зураг 3. Цахилгаанаар устгадаг зөвхөн унших санах ойн төхөөрөмжийн график тэмдэглэгээ

Зэрэгцээ EEPROM санах ойноос мэдээлэл унших нь маск ROM-оос уншихтай адил юм. Эхлээд уншиж буй санах ойн нүдний хаягийг хаягийн автобусанд A0...A9 хоёртын кодоор тохируулж, дараа нь RD унших дохиог өгнө. CS чип сонгох дохиог ихэвчлэн чип рүү нэвтрэх нэмэлт хаягийн утас болгон ашигладаг. Энэ төрлийн ROM-ийн оролт, гаралтын дохионы цаг хугацааны диаграммыг Зураг 4-т үзүүлэв.



Зураг 4. EEPROM санах ойноос мэдээлэл унших дохионы цагийн диаграмм

Зураг 5-д параллель EEPROM санах ойн чипний ердийн орон сууцны зургийг харуулав.


Зураг 5. Зэрэгцээ EEPROM микро схемийн орон сууцны зураг

Ерөнхийдөө EEPROM-д хадгалагдсан өгөгдөл нь маш ховор шаардлагатай байдаг. Энэ тохиолдолд унших цаг нь чухал биш юм. Тиймээс зарим тохиолдолд хаяг, өгөгдлийг чип рүү дамжуулж, цуваа портоор дамжуулдаг. Энэ нь гадаад тээглүүрүүдийн тоог багасгах замаар микро схемийн хэмжээг багасгах боломжийг олгодог. Энэ тохиолдолд хоёр төрлийн цуваа портыг ашигладаг - SPI порт ба I2C порт (25cXX ба 24cXX цувралын бичил схемүүд). Гадаадын 24cXX цуврал нь дотоодын 558PPX микро схемтэй тохирч байна.

24cXX цувралын микро схемийн дотоод диаграммыг (жишээлбэл AT24C01) Зураг 6-д үзүүлэв.



Зураг 6. AT24C01 чипийн дотоод хэлхээ

Ийм чип нь компьютер, зөөврийн компьютерт залгах болон тоглуулах санах ой, FPGA тохиргооны санах ой, дохионы процессор (DSP) зэрэг телевизийн тохиргоог хадгалахад өргөн хэрэглэгддэг. Цуваа EEPROM санах ойг ашигласнаар эдгээр төхөөрөмжүүдийн өртөг мэдэгдэхүйц буурч, ашиглахад хялбар болсон. Компьютерийн санах ойн картын хэвлэмэл хэлхээний самбар дээрх энэ чипийн байршлын жишээг Зураг 7-д үзүүлэв.



Зураг 7. Компьютерийн санах ойн картны хэвлэмэл хэлхээний самбар дээрх EEPROM

Зураг 8-д гадаад EEPROM чип ашиглан цахим картын диаграммыг үзүүлэв.


Зураг 8. Гадаад EEPROM ашиглан цахим картын хэлхээ

Энэ диаграммд PIC16F84 микроконтроллер нь EEPROM санах ой 24LC16B-тай өгөгдөл солилцдог. SIM карт зэрэг төхөөрөмжүүд гадаад санах ойн чип ашиглахаа больсон. Үүрэн утасны SIM картууд нь нэг чиптэй микроконтроллерийн дотоод EEPROM санах ойг ашигладаг. Энэ нь энэ төхөөрөмжийн үнийг аль болох бууруулах боломжийг танд олгоно.

Цахилгаанаар устгадаг программчлагдах ROM-уудын хяналтын хэлхээ нь нарийн төвөгтэй болсон тул эдгээр микро схемийг хөгжүүлэх хоёр чиглэл гарч ирэв.

  1. EEPROM - цахилгаанаар арилгадаг программчлагдсан зөвхөн унших санах ой
  2. Флаш ROM

FLASH - ROM-ууд нь EEPROM-аас ялгаатай нь устгалыг нүд бүр дээр тусад нь хийдэггүй, харин EEPROM-д хийсэн шиг бүхэл бүтэн микро схемд эсвэл энэ микро схемийн санах ойн матрицын блок дээр хийгддэг.


Зураг 9. FLASH санах ойн график тэмдэглэгээ

Байнгын хадгалах төхөөрөмжид хандахдаа эхлээд хаягийн автобусны санах ойн үүрний хаягийг тохируулж, дараа нь чипээс унших үйлдлийг гүйцэтгэх хэрэгтэй. Энэхүү цаг хугацааны диаграммыг Зураг 11-т үзүүлэв.



Зураг 10. ROM-аас мэдээлэл унших дохионы цагийн диаграммууд

Зураг 10-д сумнууд нь хяналтын дохиог үүсгэх дарааллыг харуулж байна. Энэ зурагт RD нь унших дохио, А нь эсийн хаяг сонгох дохио (хаяг автобусны бие даасан битүүд өөр өөр утгыг авч болох тул нэг ба тэг төлөв рүү шилжих замыг харуулсан болно), D нь уншсан гаралтын мэдээлэл юм. сонгосон ROM нүднээс.

Уран зохиол:

"Зөвхөн Унших санах ойн төхөөрөмжүүд (ROM)" нийтлэлийн хамт уншина уу:

Манай зуухны хянагч бараг бэлэн болсон, гэхдээ одоохондоо энэ нь анхны унтрахаас таван минутын өмнө бүх тохиргоог санаж байдаг "алтан загас" хянагч хэвээр байна. Бидний тохиргоо, тогтоосон температур, тохируулгын цэгүүдийн утгыг цахилгааныг унтраасны дараа санахын тулд та тогтворгүй санах ой - EEPROM ашиглах хэрэгтэй.
Манай найзууд EEPROM-той ажиллах талаар маш сайн бичсэн.

Бидний мэдэх ёстой гол зүйл бол EEPROM санах ойг "зөвхөн санах ой" биш харин чип дэх тусдаа дотоод төхөөрөмж гэж үзэх нь дээр.
EEPROM тусдаа хаягийн зай, энэ нь процессорын хаягийн зайтай ямар ч холбоогүй (FLASH болон SRAM); тогтворгүй санах ойн тодорхой хаягаар өгөгдөлд хандахын тулд та хэд хэдэн регистр (EEARH ба EEARL хаягийн бүртгэл, EEDR мэдээллийн бүртгэлийн EEDR болон хяналтын регистрийн EECR) ашиглан тодорхой дараалсан үйлдлийг гүйцэтгэх шаардлагатай.
Мэдээллийн хуудасны дагуу EEPROM дахь тодорхой хаяг руу байт бичихийн тулд та дараахь зүйлийг хийх хэрэгтэй.

  1. EEPROM-г өгөгдөл бичихэд бэлэн болтол хүлээнэ үү (EECR бүртгэлийн EEPE бит дахин тохируулагдсан);
  2. FLASH санах ой руу бичиж дуусахыг хүлээх (SPMCSR регистрийн SELFPRGEN битийг дахин тохируулах) - хэрэв програмд ​​ачаалагч байгаа бол үүнийг хийх ёстой;
  3. шинэ хаягийг EEAR бүртгэлд бичих (шаардлагатай бол);
  4. EEDR бүртгэлд өгөгдлийн байт бичих (шаардлагатай бол);
  5. EECR регистрийн EEMPE битийг нэг болгож тохируулах;
  6. EEMPE тугийг тохируулсны дараа дөрвөн цагийн мөчлөгийн дотор бид EECR регистрийн EEPE битэд логик нэгийг бичнэ.

Дараа нь дараагийн зааврыг гүйцэтгэхийн өмнө процессор 2 цагийн циклийг алгасах болно.
Хэрэв програмд ​​ачаалагч байгаа бол хоёрдахь цэгийг хийх ёстой - баримт бол EEPROM руу бичих нь FLASH санах ой руу бичихтэй зэрэг хийх боломжгүй тул EEPROM руу бичихээсээ өмнө FLASH санах ойн програмчлал дууссан эсэхийг шалгах хэрэгтэй; хэрэв микроконтроллер нь ачаалагчгүй бол FLASH санах ойн агуулгыг хэзээ ч өөрчлөхгүй (avr нь Харвардын архитектуртай гэдгийг санаарай: програмын санах ой (FLASH) ба өгөгдлийн санах ой (SRAM) тусгаарлагдсан).
Бичлэгийн мөчлөгийн үргэлжлэх хугацаа нь чипийн дотоод RC осцилляторын давтамж, тэжээлийн хүчдэл, температураас хамаарна; ATmega48x/88x/168x загваруудын хувьд энэ нь ихэвчлэн 3.4 мс (!), зарим хуучин загваруудын хувьд 8.5 мс (!!!) байдаг.
Нэмж дурдахад, EEPROM руу бичихдээ дээрх үйлдлүүдийн дарааллыг гүйцэтгэх явцад дуудлагын тасалдалтай холбоотой асуудал үүсч болзошгүй тул EEPROM руу бичихдээ тасалдлыг идэвхгүй болгох нь дээр.
Тогтворгүй санах ойг унших нь арай хялбар байдаг:

  1. EEPROM-г өгөгдөл уншихад бэлэн болтол хүлээнэ үү (EECR бүртгэлийн EEWE бит дахин тохируулагдсан);
  2. хаягийг EEAR бүртгэлд бичих;
  3. EECR регистрийн EERE битийг нэг болгож тохируулах;
  4. бид EEDR регистрээс өгөгдлийг уншдаг (үнэндээ хүссэн өгөгдлийг өгөгдлийн бүртгэл рүү шилжүүлэх үед EERE битийг техник хангамжаар дахин тохируулдаг; гэхдээ EEPROM-аас унших үйлдэл нь энэ битийн төлөвийг хянах шаардлагагүй болно. үргэлж нэг цагийн циклээр гүйцэтгэдэг).

EERE-г нэг болгон тохируулсны дараа процессор дараагийн зааврыг гүйцэтгэхийн өмнө 4 цагийн циклийг алгасдаг.
Бидний харж байгаагаар тогтворгүй санах ойтой ажиллах нь цаг хугацаа шаардсан үйл явц юм; Хэрэв бид ихэвчлэн EEPROM-аас өгөгдөл бичиж, уншвал програм удааширч эхэлнэ.

Гэсэн хэдий ч бид IAR орчинд програм бичиж байгаа бөгөөд бид азтай байна: EEPROM-аас унших, бичих бүх ажлыг хөгжүүлэлтийн орчин хийх болно - iar нь тогтворгүй санах ойд хувьсагч үүсгэдэг "__eeprom" өөрчлөгчтэй. - тэгээд бид зүгээр л "байнгын" хувьсагчаас "одоогийн" хүртэл унших (хянагчийг эхлүүлэх үед) эсвэл "одоогийн" хувьсагчаас "тогтмол" хүртэл бичих хэрэгтэй болно - өөрөөр хэлбэл одоогийн утга өөрчлөгдөх үед тогтворгүй санах ойн хувьсагчийг мөн өөрчлөх шаардлагатай.
Шинэ хувьсагчид дараах байдлаар харагдах болно.

Eeprom uint16_t EEP_MinTemperature;

Хэд хэдэн ерөнхий үг: мөн бид eeprom хувьсагчийн заагчийг тооцдоггүй ч гэсэн eeprom нь тусдаа хаягийн орон зай гэдгийг санах хэрэгтэй бөгөөд eeprom руу заагч үүсгэхийн тулд (мөн хөрвүүлэгч бидэнд үүнийг хийхийг зөвшөөрдөг) бид Энэ нь eeprom дахь хаягийн заагч гэдгийг харуулах ёстой:

Uint16_t __eeprom *EEP_MinTemperatureAdr;

Зуухны хянагч болон EEPROM руу буцъя. Манай тохиолдолд мэдээжийн хэрэг, EEPROM-д виртуал машин байхгүй гэж үздэг; Нэмж дурдахад тогтворгүй санах ойтой ажиллахад тусдаа номын сан шаардлагатай эсэхийг анхаарч үзэх нь зүйтэй - чухал тохиргоог бичих нь програм даяар хэт "тарсан"; Хэрэв та тусдаа номын сан хийх гэж оролдвол та хөндлөн лавлагаа хийх шаардлагатай болно: EEPROM-д зориулсан номын санд ADC, халаалтын элемент, глобал тохиргооны сангуудыг холбоно уу; мөн эдгээр захын сангуудад EEPROM номын санг холбох нь тийм ч сайн арга биш юм.
Өөр нэг сонголт бол тохиргоог хадгалах шаардлагатай номын сан бүрт eeprom хувьсагч нэмж, холбогдох тохиргоог виртуал машинд шууд хадгалах явдал юм. Бид энэ хувилбарыг хэрэгжүүлэх болно.
Эхлээд EEPROM-д ямар хувьсагчийг хадгалах хэрэгтэйг жагсаая:

  1. шалгалт тохируулгын цэгүүд
  2. хамгийн их-хамгийн бага тогтоосон температур ба температурыг тохируулах алхамын утгууд
  3. температурын утгыг тохируулах
  4. PID хянагчийн коэффициентүүд

Бид гал тогооны таймерын үнэ цэнийг хэмнэдэггүй - бид цахилгааныг унтраасны дараа хэрэглэгч зуухны таймерыг тохируулах ёстой гэж бид үзэх болно.
Эдгээр бүх тохиргоог хэрэглэгч кодлогчийг эргүүлж, дараа нь хэрэглэгчийн товчийг товч дарснаар тохируулна. Үүний зэрэгцээ, EEPROM-ын унших-бичих мөчлөгийн тоо хязгаарлагдмал хэвээр байгаа тул ижил мэдээллийг дахин бичиж болохгүй (жишээлбэл, хэрэглэгч зарим тохиргооны ижил утгыг сонгосон бол). Тиймээс, __eeprom хувьсагчийг өөрчлөхийн өмнө бид үүнийг дахин бичих шаардлагатай эсэхийг шалгана.

//хэрэв утга өөрчлөгдсөн бол (ADCTemperature.atMinTemperatureValue != (uint16_t)VMEncoderCounter.ecntValue) (ADCTemperature.atMinTemperatureValue = (uint16_t)VMEncoderCounter.ecnTemperatureValue = (uint16_t)VMEncoderCounter.ecntVemperature;ADCTEmperature al.Matue) байвал тогтворгүй санах ойд дарж бичнэ үү. ; )

EEPROM-аас тохиргоог унших нь бас хялбар байдаг - "одоогийн" тохиргоог эхлүүлэхдээ бид тогтворгүй санах ойноос утгыг уншдаг.

ADCTemperature.atMinTemperatureValue = EEP_MinTemperature;

Манай төхөөрөмж анхнаасаа EEPROM-д зарим тохиргоотой байхын тулд эхний ачаалах төслийг эдгээр хувьсагчдыг эхлүүлж эмхэтгэж болно:

Eeprom uint16_t EEP_MinTemperature = 20; ... //шалгалт тохируулгын цэгүүдийг тогтворгүй санах ойд хадгалах массив __eeprom TCalibrationData EEP_CalibrationData = ((20, 1300), (300, 4092));

Энэ тохиолдолд хөрвүүлэгч үндсэн функцтэй ажиллахын өмнө __eeprom хувьсагчдыг эхлүүлдэг. Тогтворгүй санах ойтой (.eep) файл авахын тулд та дараах тохиргоонд орох шаардлагатай.
Project->Options..->Linker->Extra Options
Хэрэв "Тушаалын мөрийн сонголтыг ашиглах" нүдийг тэмдэглээгүй бол тэмдэглээд мөрийг нэмнэ үү
-Ointel-стандарт,(XDATA)=.eep
Эхлээд бид төслийг эхлүүлсэн хувьсагчтай эмхэтгэж, eep файлыг тусад нь хадгална; дараа нь бид хувьсагчийг үүсгэх үед эхлүүлэхийг устгана.

Энэ бүгд - манай зуух бэлэн боллоо!