Სარჩევი:

გარე EEPROM– ის მონაცემების წაკითხვა და ჩაწერა Arduino– ს გამოყენებით: 5 ნაბიჯი
გარე EEPROM– ის მონაცემების წაკითხვა და ჩაწერა Arduino– ს გამოყენებით: 5 ნაბიჯი

ვიდეო: გარე EEPROM– ის მონაცემების წაკითხვა და ჩაწერა Arduino– ს გამოყენებით: 5 ნაბიჯი

ვიდეო: გარე EEPROM– ის მონაცემების წაკითხვა და ჩაწერა Arduino– ს გამოყენებით: 5 ნაბიჯი
ვიდეო: როგორ ინახავს EEPROM IC მომხმარებლის მონაცემებს თქვენს მოწყობილობებში 2024, ივლისი
Anonim
გარე EEPROM– ში მონაცემების წაკითხვა და ჩაწერა Arduino– ს გამოყენებით
გარე EEPROM– ში მონაცემების წაკითხვა და ჩაწერა Arduino– ს გამოყენებით

EEPROM ნიშნავს ელექტრონულად წაშლადი პროგრამირებადი მხოლოდ წაკითხული მეხსიერება.

EEPROM ძალიან მნიშვნელოვანი და სასარგებლოა, რადგან ის არის მეხსიერების არასტაბილური ფორმა. ეს ნიშნავს, რომ მაშინაც კი, როდესაც დაფა გამორთულია, EEPROM ჩიპი კვლავ ინარჩუნებს პროგრამას, რომელიც მისთვის იყო დაწერილი. ასე რომ, როდესაც თქვენ გამორთეთ დაფა და შემდეგ ისევ ჩართავთ მას, პროგრამა, რომელიც ეწერა EEPROM- ს, შეიძლება გაშვებული იყოს. ძირითადად, EEPROM ინახავს და მართავს პროგრამას, რაც არ უნდა იყოს. ეს ნიშნავს, რომ თქვენ შეგიძლიათ გამორთოთ მოწყობილობა, გააჩეროთ ის 3 დღის განმავლობაში, და დაბრუნდეთ და ჩართოთ იგი და მას მაინც შეეძლოს პროგრამის გაშვება, რომელიც მასში იყო დაპროგრამებული. ასე მუშაობს სამომხმარებლო ელექტრონული მოწყობილობების უმეტესობა.

ეს პროექტი დაფინანსებულია LCSC– ს მიერ. მე ვიყენებ ელექტრონულ კომპონენტებს LCSC.com– დან. LCSC– ს აქვს მტკიცე ვალდებულება შესთავაზოს ნამდვილი, მაღალი ხარისხის ელექტრონული კომპონენტების ფართო არჩევანი საუკეთესო ფასად გლობალური გადაზიდვის ქსელით 200 – ზე მეტ ქვეყანაში. დარეგისტრირდით დღეს და მიიღეთ 8 დოლარი ფასდაკლება თქვენს პირველ შეკვეთაზე.

EEPROM ასევე ძალიან ეფექტურია იმით, რომ ტრადიციული EEPROM- ის ცალკეული ბაიტები დამოუკიდებლად იკითხება, წაშლილია და გადაწერილია. სხვა სახის არასტაბილურ მეხსიერებაში ეს შეუძლებელია. სერიული EEPROM მოწყობილობები, როგორიცაა მიკროჩიპი 24 სერიის EEPROM, საშუალებას გაძლევთ დაამატოთ მეტი მეხსიერება ნებისმიერ მოწყობილობას, რომელსაც შეუძლია ისაუბროს I²C.

მარაგები

  1. EEPROM - 24LC512
  2. ATmega328P-PU
  3. კრისტალი 16 MHz
  4. პურის დაფა
  5. რეზისტორი 4.7k Ohm x 2
  6. კონდენსატორი 22 pF x 2

ნაბიჯი 1: EEPROM საფუძვლები

EEPROM საფუძვლები
EEPROM საფუძვლები

მიკროჩიპის 24LC2512 ჩიპის შეძენა შესაძლებელია 8 პინიანი DIP პაკეტში. 24LC512- ის ქინძისთავები საკმაოდ სწორია და შედგება ენერგიის (8), GND (4), ჩაწერის დაცვისგან (7), SCL/SDA (6, 5) და სამი მისამართის ქინძისთავებისგან (1, 2, 3).

ROM– ის მოკლე ისტორია

ადრეული "შენახული პროგრამის" ტიპის კომპიუტერებმა - როგორიცაა სამაგიდო კალკულატორები და კლავიატურის თარჯიმნები - დაიწყეს ROM- ის გამოყენება დიოდური მატრიცის ROM სახით. ეს იყო მეხსიერება, რომელიც შედგება დისკრეტული ნახევარგამტარული დიოდებისაგან, რომლებიც განთავსებულია სპეციალურად ორგანიზებულ PCB- ზე. ამან მისცა ადგილი Mask ROM– ს ინტეგრირებული სქემების გაჩენისთანავე. ნიღაბი ROM ძალიან ჰგავდა Diode Matrix ROM მხოლოდ ის იყო განხორციელებული გაცილებით მცირე მასშტაბით. ეს იმას ნიშნავდა, რომ თქვენ არ შეგიძლიათ უბრალოდ გადააადგილოთ რამოდენიმე დიოდი გამაგრილებელი რკინით და მისი გადაპროგრამება. ნიღაბი ROM უნდა დაპროგრამებულიყო მწარმოებლის მიერ და ამის შემდეგ არ იყო შესაცვლელი.

სამწუხაროდ, Mask ROM ძვირი ღირდა და წარმოებას დიდი დრო დასჭირდა, რადგან ყოველი ახალი პროგრამისათვის საჭირო იყო ახალი მოწყობილობის წარმოება სამსხმელო ქარხნის მიერ. 1956 წელს, თუმცა, ეს პრობლემა გადაწყდა PROM- ის (პროგრამირებადი ROM) გამოგონებით, რამაც დეველოპერებს საშუალება მისცა ჩიპების თვით პროგრამირება. ეს იმას ნიშნავდა, რომ მწარმოებლებს შეეძლოთ მილიონობით ერთიდაიგივე დაპროგრამებული მოწყობილობის წარმოება, რამაც ის იაფი და პრაქტიკული გახადა. თუმცა, PROM შეიძლება დაიწეროს მხოლოდ მაღალი ძაბვის პროგრამირების მოწყობილობის გამოყენებით. მას შემდეგ, რაც PROM მოწყობილობა დაპროგრამდა, არ არსებობდა საშუალება დაუბრუნებინა მოწყობილობა მის არაპროგრამულ მდგომარეობას.

ეს შეიცვალა 1971 წელს EPROM- ის (Erasable Programmable ROM) გამოგონებით, რომელმაც - აკრონიმში კიდევ ერთი ასოის დამატების გარდა - მოიტანა მოწყობილობა მოწყობილობის წაშლის და "ცარიელ" მდგომარეობაში დაბრუნებისათვის ულტრაიისფერი სხივის ძლიერი წყაროს გამოყენებით. მართალია, თქვენ უნდა გაანათოთ IC სინათლე მისი გადაპროგრამების მიზნით, რა მაგარია? ისე, აღმოჩნდება, რომ საკმაოდ მაგარია, თუ თქვენ არ ხართ პროგრამისტი, რომელიც მუშაობს firmware– ზე, ამ შემთხვევაში თქვენ ნამდვილად გსურთ შეძლოთ მოწყობილობის გადაპროგრამება ელექტრული სიგნალების გამოყენებით. ეს საბოლოოდ რეალობად იქცა 1983 წელს EEPROM- ის (Electrically Erasible Programmable ROM) განვითარებით და ამით, ჩვენ მივაღწევთ დღევანდელ დღეს არასასიამოვნო აკრონიმს.

ნაბიჯი 2: EEPROM- ის უცნაურობები

EEPROM– ს აქვს ორი ძირითადი ნაკლი, როგორც მონაცემთა შენახვის მეთოდი. უმეტეს აპლიკაციებში დადებითი მხარეები აღემატება მინუსებს, მაგრამ თქვენ უნდა იცოდეთ მათი შესახებ, სანამ EEPROM თქვენს მომავალ დიზაინში ჩართავთ.

უპირველეს ყოვლისა, ტექნოლოგია, რომელიც EEPROM- ს ააქტიურებს, ასევე ზღუდავს მისი ხელახლა დაწერის რაოდენობას. ეს დაკავშირებულია ელექტრონებთან, რომლებიც ხაფანგში ხდებიან ტრანზისტორებში, რომლებიც ქმნიან ROM- ს და იმატებენ მანამ, სანამ მუხტის სხვაობა "1" - სა და "0" - ს შორის ამოუცნობი იქნება. მაგრამ არ ინერვიულოთ, EEPROM– ების უმეტესობას აქვს მაქსიმალური გადაწერა 1 მილიონი ან მეტი. სანამ თქვენ მუდმივად არ წერთ EEPROM– ს, ნაკლებად სავარაუდოა, რომ თქვენ მიაღწევთ ამ მაქსიმუმს. მეორეც, EEPROM არ წაიშლება, თუ თქვენ გამორთავთ მისგან ენერგიას, მაგრამ ის არ შეინახავს თქვენს მონაცემებს უსასრულოდ. ელექტრონებს შეუძლიათ გადაადგილდნენ ტრანზისტორიდან და იზოლატორის მეშვეობით, რაც დროთა განმავლობაში ეფექტურად წაშლის EEPROM- ს. როგორც ითქვა, ეს ჩვეულებრივ ხდება წლების განმავლობაში (თუმცა მისი დაჩქარება შესაძლებელია სითბოთი). მწარმოებლების უმეტესობა ამბობს, რომ თქვენი მონაცემები უსაფრთხოა EEPROM– ზე 10 წლის ან მეტი ოთახის ტემპერატურაზე. და არის კიდევ ერთი რამ, რაც უნდა გახსოვდეთ თქვენი პროექტის EEPROM მოწყობილობის არჩევისას. EEPROM სიმძლავრე იზომება ბიტებში და არა ბაიტებში. 512K EEPROM ინახავს 512 კბიტ მონაცემს, სხვა სიტყვებით რომ ვთქვათ, მხოლოდ 64 კბ.

ნაბიჯი 3: Arduino აპარატურის დაკავშირება

Arduino აპარატურის დაკავშირება
Arduino აპარატურის დაკავშირება
Arduino აპარატურის დაკავშირება
Arduino აპარატურის დაკავშირება

კარგი, ახლა როდესაც ჩვენ ვიცით რა არის EEPROM, მოდით შევაჯამოთ ერთი და ვნახოთ რისი გაკეთება შეუძლია მას! იმისათვის, რომ ჩვენი მოწყობილობა ლაპარაკობდეს, ჩვენ დაგვჭირდება დენის და I²C სერიული ხაზების დაკავშირება. ეს მოწყობილობა, კერძოდ, მუშაობს 5VDC– ზე, ასე რომ, ჩვენ მას დავუკავშირებთ ჩვენი Arduino UNO– ს 5 ვ გამომავალს. ასევე, I²C ხაზებს დასჭირდებათ გამწევ რეზისტორები, რომ კომუნიკაცია სწორად მოხდეს. ამ რეზისტორების მნიშვნელობა დამოკიდებულია ხაზების სიმძლავრეზე და სიხშირეზე, რომელთანაც გსურთ მისი კომუნიკაცია, მაგრამ კარგი კრიტიკული წესი არაკრიტიკული პროგრამებისთვის მხოლოდ kΩ დიაპაზონშია დაცული. ამ მაგალითში ჩვენ გამოვიყენებთ 4.7kΩ გამწევ რეზისტორებს.

ამ მოწყობილობაზე არის სამი ქინძისთავი I²C მისამართის შესარჩევად, ამ გზით თქვენ შეგიძლიათ ერთზე მეტი EEPROM გქონდეთ ავტობუსში და თითოეულ მათგანს მიმართოთ განსხვავებულად. თქვენ შეგიძლიათ უბრალოდ დაფქვათ ისინი ყველა, მაგრამ ჩვენ გავამყარებთ მათ გაყვანილობას ისე, რომ მოგვიანებით სახელმძღვანელოში ჩავაგდოთ უფრო მაღალი სიმძლავრის მოწყობილობა.

ჩვენ გამოვიყენებთ პურის დაფას, რომ ყველაფერი ერთმანეთთან დააკავშიროთ. ქვემოთ მოყვანილი დიაგრამა აჩვენებს IUC EEPROM მოწყობილობების უმეტესობას, მათ შორის Microchip 24 სერიის EEPROM- ს, რომელსაც ჩვენ ვყიდით.

ნაბიჯი 4: კითხვა და წერა

უმეტეს დროს, როდესაც თქვენ იყენებთ EEPROM– ს მიკროკონტროლერთან ერთად, რეალურად არ დაგჭირდებათ მეხსიერების მთელი შინაარსის ერთდროულად ნახვა. თქვენ უბრალოდ წაიკითხავთ და დაწერთ ბაიტებს აქ და იქ, როგორც საჭიროა. ამ მაგალითში, ჩვენ ვაპირებთ დავწეროთ მთელი ფაილი EEPROM– ში და შემდეგ წავიკითხოთ ეს ყველაფერი, რათა შევხედოთ მას ჩვენს კომპიუტერში. ეს უნდა გვაგრძნობინებდეს EEPROM- ის გამოყენების იდეას და ასევე მოგვცეს განცდა იმისა, თუ რამდენად ნამდვილად შეიძლება მოერგოს მონაცემები პატარა მოწყობილობას.

დაწერე რამე

ჩვენი მაგალითის ესკიზი უბრალოდ მიიღებს ნებისმიერ ბაიტს, რომელიც შემოდის სერიული პორტის თავზე და წერს მას EEPROM– ში, თვალყურს ადევნებს რამდენი ბაიტი დავწერეთ მეხსიერებაში.

EEPROM– ზე მეხსიერების ბაიტის ჩაწერა ჩვეულებრივ ხდება სამ საფეხურზე:

  1. გაუგზავნეთ მეხსიერების მისამართის ყველაზე მნიშვნელოვანი ბაიტი, რომელზეც გსურთ დაწეროთ.
  2. გამოაგზავნეთ მეხსიერების იმ უმცირესი ბაიტი, რომელზეც გსურთ დაწეროთ.
  3. გაგზავნეთ მონაცემთა ბაიტი, რომლის შენახვაც გსურთ ამ ადგილას.

ალბათ არის რამდენიმე საკვანძო სიტყვა, რომელიც განმარტავს:

მეხსიერების მისამართები

თუ თქვენ წარმოგიდგენიათ ყველა ბაიტი 512 Kbit EEPROM- ში, რომელიც დგას ხაზში 0 -დან 64000 -მდე - რადგან ბაიტზე არის 8 ბიტი და, შესაბამისად, თქვენ შეგიძლიათ მოათავსოთ 64000 ბაიტი 512 Kbit EEPROM– ზე - მაშინ მეხსიერების მისამართი არის ადგილი ხაზი, სადაც ნახავთ კონკრეტულ ბაიტს. ჩვენ უნდა გავაგზავნოთ ეს მისამართი EEPROM– ში, რათა მან იცოდეს სად უნდა დააყენოს ბაიტი, რომელსაც ჩვენ ვგზავნით.

ყველაზე მნიშვნელოვანი და არანაკლებ მნიშვნელოვანი ბიტი

256 Kbit EEPROM– ში არის 32000 შესაძლო ადგილი - და რადგან 255 არის ყველაზე დიდი რიცხვი, რომლის დაშიფვრაც შეგიძლიათ ერთ ბაიტში - ეს მისამართი უნდა გამოვაგზავნოთ ორ ბაიტად. პირველი, ჩვენ ვაგზავნით ყველაზე მნიშვნელოვან ბაიტს (MSB) - ამ შემთხვევაში პირველ 8 ბიტს. შემდეგ ჩვენ ვაგზავნით უმცირეს მნიშვნელოვან ბაიტს (LSB) - მეორე 8 ბიტს. რატომ? რადგან მოწყობილობა ელოდება მათ მიღებას, ეს არის ყველაფერი.

გვერდის წერა

ერთი ბაიტის დაწერა კარგია, მაგრამ EEPROM მოწყობილობების უმეტესობას აქვს რაღაც სახელწოდებით "გვერდის ჩაწერის ბუფერი", რომელიც საშუალებას გაძლევთ დაწეროთ მრავალჯერადი ბაიტი ერთდროულად, ისევე როგორც ერთი ბაიტი. ჩვენ ვისარგებლებთ ამით ჩვენი მაგალითის ესკიზში. EEPROM იყენებს შიდა მრიცხველს, რომელიც ავტომატურად ზრდის მეხსიერების ადგილმდებარეობას ყოველი მომდევნო მონაცემის ბაიტით, რომელსაც იგი იღებს. მას შემდეგ, რაც მეხსიერების მისამართი გაიგზავნება, შეგვიძლია მივყვეთ მას 64 ბაიტი მონაცემებით. EEPROM ვარაუდობს (სამართლიანად), რომ მისამართი 312 რასაც მოყვება 10 ბაიტი ჩაწერს ბაიტს 0 მისამართზე 312, ბაიტს 1 მისამართზე 313, ბაიტს 2 მისამართზე 314 და ასე შემდეგ.

წაიკითხეთ რამე

EEPROM– ის კითხვა ძირითადად ემყარება იგივე სამსაფეხურიან პროცესს, როგორც EEPROM– ს წერა:

  1. გაგზავნეთ მეხსიერების მისამართის ყველაზე მნიშვნელოვანი ბაიტი, რომელზეც გსურთ დაწეროთ.
  2. გამოაგზავნეთ მეხსიერების იმ უმცირესი ბაიტი, რომელზეც გსურთ დაწეროთ.
  3. მოითხოვეთ მონაცემთა ბაიტი იმ ადგილას.

ნაბიჯი 5: სქემა და კოდი

სქემა და კოდი
სქემა და კოდი

კოდი:

#ჩართეთ

#deepine eeprom 0x50 // განსაზღვრავს EEPROM- ის ძირითად მისამართს

void setup () {

Wire.begin (); // ქმნის Wire ობიექტს

სერიული.დაწყება (9600);

ხელმოუწერელი int მისამართი = 0; // EEPROM– ის პირველი მისამართი

Serial.println ("ჩვენ ვწერთ საფოსტო ინდექსს 22222, საფოსტო კოდს"); for (მისამართი = 0; მისამართი <5; მისამართი ++) ჩაწერეთ EEPROM (eeprom, მისამართი, '2'); // წერს 22222 EEPROM– ს

for (მისამართი = 0; მისამართი <5; მისამართი ++) {Serial.print (წაიკითხეთ EEPROM (eeprom, მისამართი), HEX); }}

ბათილი მარყუჟი () {

/*არაფერია loop () ფუნქციაში, რადგან ჩვენ არ გვინდა, რომ arduino არაერთხელ წეროს იგივე EEPROM– ზე უსასრულოდ. ჩვენ უბრალოდ გვინდა ერთჯერადი ჩაწერა, ასე რომ loop () ფუნქცია თავიდან იქნება აცილებული EEPROM– ით.*/}

// განსაზღვრავს writeEEPROM ფუნქციას

ბათილად ჩაწერაEEPROM (int მოწყობილობის მისამართი, ხელმოუწერელი eeaddress, ბაიტი მონაცემები) {Wire.beginTransmission (deviceaddress); Wire.write ((int) (eeaddress >> 8)); // წერს MSB Wire.write ((int) (eeaddress & 0xFF)); // წერს LSB Wire.write (მონაცემები); Wire.endTransmission (); }

// განსაზღვრავს readEEPROM ფუნქციას

byte readEEPROM (int მოწყობილობის მისამართი, ხელმოუწერელი int eeaddress) {byte rdata = 0xFF; Wire.beginTransmission (მოწყობილობის მისამართი); Wire.write ((int) (eeaddress >> 8)); // წერს MSB Wire.write ((int) (eeaddress & 0xFF)); // წერს LSB Wire.endTransmission (); მავთული. მოთხოვნა (მოწყობილობის მისამართიდან, 1); if (Wire.available ()) rdata = Wire.read (); დაბრუნება rdata; }

გირჩევთ: