คอมพิวเตอร์ หน้าต่าง อินเทอร์เน็ต

Arduino EEPROM: หน่วยความจำแบบไม่ลบเลือน EEPROM แบบไม่ลบเลือนภายในกรณีพิเศษสำหรับตัวนับบันทึก

ชิปหน่วยความจำแบบอ่านอย่างเดียวที่ตั้งโปรแกรมได้ (EEPROM) ที่สามารถลบได้ด้วยไฟฟ้าคือชิปคอมพิวเตอร์เซมิคอนดักเตอร์โลหะออกไซด์ที่ใช้บนแผงวงจรพิมพ์ ชิปประเภทนี้สามารถลบและตั้งโปรแกรมใหม่ได้โดยใช้สัญญาณอิเล็กทรอนิกส์ที่แรง เนื่องจากสามารถทำได้โดยไม่ต้องถอดชิปออกจากอุปกรณ์ที่เชื่อมต่ออยู่ ชิป EEPROM จึงถูกนำมาใช้ในหลายอุตสาหกรรม
ชิป EEPROM มีหน่วยความจำแบบไม่ลบเลือน ดังนั้นข้อมูลจึงไม่สูญหายหากแหล่งจ่ายไฟของชิปถูกขัดจังหวะ ชิปประเภทนี้สามารถตั้งโปรแกรมแบบเลือกได้ ซึ่งหมายความว่าส่วนหนึ่งของหน่วยความจำสามารถเปลี่ยนแปลงได้ด้วยการเขียนทับใหม่โดยไม่ส่งผลกระทบต่อหน่วยความจำส่วนที่เหลือ ข้อมูลที่จัดเก็บไว้ในชิป EEPROM จะคงอยู่ถาวรจนกว่าจะถูกลบหรือตั้งโปรแกรมใหม่ ทำให้เป็นส่วนประกอบที่มีคุณค่าในคอมพิวเตอร์และอุปกรณ์อิเล็กทรอนิกส์อื่นๆ

ชิป EEPROM นั้นใช้ทรานซิสเตอร์เกตแบบลอยตัว ชิป EEPROM ถูกตั้งโปรแกรมโดยการบังคับข้อมูลที่ตั้งโปรแกรมได้ในรูปของอิเล็กตรอนผ่านเกทออกไซด์ ประตูลอยตัวจะทำหน้าที่กักเก็บอิเล็กตรอนเหล่านี้ เซลล์หน่วยความจำจะถือว่าถูกตั้งโปรแกรมไว้เมื่อมีประจุด้วยอิเล็กตรอน และมีค่าเป็นศูนย์แทน หากไม่ได้ชาร์จเซลล์หน่วยความจำ เซลล์นั้นจะไม่ถูกตั้งโปรแกรมไว้และแสดงด้วยเซลล์หน่วยความจำ

อุปกรณ์หลากหลายประเภทต้องใช้หน่วยความจำ ดังนั้นชิป EEPROM จึงมีแอปพลิเคชันมากมายในสาขาเครื่องใช้ไฟฟ้า ใช้ในระบบเกม โทรทัศน์ และจอคอมพิวเตอร์ เครื่องช่วยฟัง กล้องดิจิตอล เทคโนโลยีบลูทูธ และระบบเกมก็ใช้ชิป EEPROM เช่นกัน ใช้ในอุตสาหกรรมโทรคมนาคม การแพทย์ และการผลิต คอมพิวเตอร์ส่วนบุคคลและคอมพิวเตอร์ธุรกิจมี EEPROM

ชิป EEPROM ยังมีการใช้งานที่หลากหลายในอุตสาหกรรมยานยนต์ ใช้ในระบบเบรกป้องกันล้อล็อก ถุงลม ระบบควบคุมเสถียรภาพแบบอิเล็กทรอนิกส์ ระบบส่งกำลัง และชุดควบคุมเครื่องยนต์ ชิป EEPROM ยังใช้ในเครื่องปรับอากาศ จอแสดงผลแผงหน้าปัด โมดูลควบคุมตัวถัง และระบบเข้าแบบไม่ใช้กุญแจ ชิปเหล่านี้ช่วยตรวจสอบการสิ้นเปลืองน้ำมันเชื้อเพลิง และยังใช้ในระบบวินิจฉัยต่างๆ อีกด้วย

มีการจำกัดจำนวนการทำซ้ำที่สามารถเขียนทับโดยชิป EEPROM ชั้นภายในชิปจะค่อยๆ ได้รับความเสียหายจากการเขียนซ้ำหลายครั้ง นี่ไม่ใช่ปัญหาใหญ่เพราะชิป EEPROM บางตัวสามารถแก้ไขได้ถึงล้านครั้ง ความก้าวหน้าทางเทคโนโลยีเพิ่มเติมน่าจะส่งผลดีต่อสิ่งที่ชิปหน่วยความจำสามารถทำได้ในอนาคต

ตัวควบคุมเตาเผาของเราเกือบจะพร้อมแล้ว แต่สำหรับตอนนี้ยังคงเป็นตัวควบคุม "ปลาทอง" ที่จะจดจำการตั้งค่าทั้งหมดเพียงห้านาทีก่อนการปิดเครื่องครั้งแรก หากต้องการจดจำการตั้งค่าของเรา ค่าของอุณหภูมิที่ตั้งไว้ และจุดสอบเทียบแม้หลังจากปิดเครื่องแล้ว คุณจำเป็นต้องใช้หน่วยความจำแบบไม่ลบเลือน - EEPROM
เพื่อนของเราเขียนได้ดีมากเกี่ยวกับการทำงานกับ EEPROM

สิ่งสำคัญที่เราต้องรู้คือหน่วยความจำ EEPROM ถือว่าดีกว่าไม่ใช่ "เพียงหน่วยความจำ" แต่เป็นอุปกรณ์ภายในที่แยกต่างหากในชิป
อีพรอม พื้นที่ที่อยู่แยกต่างหากซึ่งไม่เกี่ยวข้องกับพื้นที่ที่อยู่ของโปรเซสเซอร์ (FLASH และ SRAM) ในการเข้าถึงข้อมูลตามที่อยู่เฉพาะในหน่วยความจำแบบไม่ลบเลือนคุณต้องดำเนินการตามลำดับการกระทำโดยใช้การลงทะเบียนจำนวนหนึ่ง (ที่อยู่ลงทะเบียน EEARH และ EEARL, การลงทะเบียนข้อมูล EEDR และการควบคุมการลงทะเบียน EECR)
ตามแผ่นข้อมูล หากต้องการเขียนไบต์ไปยังที่อยู่เฉพาะใน EEPROM คุณต้องดำเนินการดังต่อไปนี้:

  1. รอให้ EEPROM พร้อมที่จะเขียนข้อมูล (บิต EEPE ของการลงทะเบียน EECR ถูกรีเซ็ต)
  2. รอการสิ้นสุดการเขียนไปยังหน่วยความจำ FLASH (รีเซ็ตบิต SELFPRGEN ของการลงทะเบียน SPMCSR) - จะต้องดำเนินการนี้หากมี bootloader อยู่ในโปรแกรม
  3. เขียนที่อยู่ใหม่ลงในทะเบียน EEAR (ถ้าจำเป็น)
  4. เขียนไบต์ข้อมูลลงในการลงทะเบียน EEDR (ถ้าจำเป็น)
  5. ตั้งค่าบิต EEMPE ของการลงทะเบียน EECR เป็นหนึ่ง
  6. ภายในสี่รอบนาฬิกาหลังจากตั้งค่าแฟล็ก EEMPE เราจะเขียนโลจิคัลหนึ่งลงในบิต EEPE ของรีจิสเตอร์ EECR

โปรเซสเซอร์จะข้าม 2 รอบสัญญาณนาฬิกาก่อนที่จะดำเนินการคำสั่งถัดไป
จะต้องดำเนินการจุดที่สองหากมี bootloader ในโปรแกรม - ความจริงก็คือการเขียนไปยัง EEPROM ไม่สามารถดำเนินการพร้อมกันกับการเขียนไปยังหน่วยความจำ FLASH ดังนั้นก่อนที่จะเขียนลงใน EEPROM คุณต้องตรวจสอบให้แน่ใจว่าการเขียนโปรแกรมหน่วยความจำ FLASH เสร็จสมบูรณ์ หากไมโครคอนโทรลเลอร์ไม่มี bootloader ก็จะไม่เปลี่ยนเนื้อหาของหน่วยความจำ FLASH (โปรดจำไว้ว่า avr มีสถาปัตยกรรมของ Harvard: หน่วยความจำโปรแกรม (FLASH) และหน่วยความจำข้อมูล (SRAM) จะถูกแยกออกจากกัน)
ระยะเวลาของรอบการบันทึกขึ้นอยู่กับความถี่ของออสซิลเลเตอร์ RC ภายในของชิป แรงดันไฟฟ้าและอุณหภูมิ โดยปกติสำหรับรุ่น ATmega48x/88x/168x คือ 3.4 ms (!) สำหรับรุ่นเก่าบางรุ่น – 8.5 ms (!!!)
นอกจากนี้ เมื่อเขียนไปยัง EEPROM ปัญหาอาจเกิดขึ้นกับการเรียกการขัดจังหวะระหว่างการดำเนินการตามลำดับของการกระทำข้างต้น - ดังนั้นจึงเป็นการดีกว่าที่จะปิดการใช้งานการขัดจังหวะในขณะที่เขียนไปยัง EEPROM
การอ่านหน่วยความจำแบบไม่ลบเลือนนั้นง่ายกว่าเล็กน้อย:

  1. รอให้ EEPROM พร้อมที่จะอ่านข้อมูล (บิต EEWE ของการลงทะเบียน EECR ถูกรีเซ็ต)
  2. เขียนที่อยู่ลงในทะเบียน EEAR
  3. ตั้งค่าบิต EERE ของการลงทะเบียน EECR เป็นหนึ่ง
  4. เราอ่านข้อมูลจากการลงทะเบียน EEDR (อันที่จริงเมื่อข้อมูลที่ร้องขอถูกย้ายไปยังการลงทะเบียนข้อมูลบิต EERE จะถูกรีเซ็ตโดยฮาร์ดแวร์ แต่ไม่จำเป็นต้องตรวจสอบสถานะของบิตนี้เนื่องจากการดำเนินการอ่านจาก EEPROM นั้น ดำเนินการในหนึ่งรอบสัญญาณนาฬิกาเสมอ)

หลังจากตั้งค่าบิตใน EERE เป็นหนึ่งแล้ว โปรเซสเซอร์จะข้าม 4 รอบสัญญาณนาฬิกาก่อนที่จะดำเนินการคำสั่งถัดไป
ดังที่เราเห็นแล้วว่าการทำงานกับหน่วยความจำแบบไม่ลบเลือนเป็นกระบวนการที่ใช้เวลานาน หากเราเขียนและอ่านข้อมูลจาก EEPROM บ่อยๆ โปรแกรมก็อาจจะเริ่มทำงานช้าลง

อย่างไรก็ตาม เรากำลังเขียนโปรแกรมในสภาพแวดล้อม IAR และเราโชคดี: งานทั้งหมดที่มีการอ่านและเขียนจาก EEPROM จะเสร็จสิ้นโดยสภาพแวดล้อมการพัฒนา - iar มีตัวดัดแปลง “__eeprom” ซึ่งสร้างตัวแปรในหน่วยความจำแบบไม่ลบเลือน - จากนั้นเราจะต้องอ่านจากตัวแปร "ถาวร" เป็น "ปัจจุบัน" (เมื่อเริ่มต้นคอนโทรลเลอร์) หรือเขียนจากตัวแปร "ปัจจุบัน" เป็น "คงที่" - นั่นคือเมื่อค่าปัจจุบันเปลี่ยนแปลง ค่าของ ต้องเปลี่ยนตัวแปรในหน่วยความจำแบบไม่ลบเลือนด้วย
ตัวแปรใหม่จะมีลักษณะดังนี้:

Eeprom uint16_t EEP_Minอุณหภูมิ;

คำทั่วไปอีกสองสามคำ: และแม้ว่าเราจะไม่ถือว่าเป็นตัวชี้ไปยังตัวแปร 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.ecntValue; EEP_MinTemperature = ADCTemperature.atMinTemperatureV alue; )

การอ่านการตั้งค่าจาก EEPROM ก็ทำได้ง่ายเช่นกัน - เมื่อเริ่มต้นการตั้งค่า "ปัจจุบัน" เราก็จะอ่านค่าจากหน่วยความจำแบบไม่ลบเลือน:

ADCTemperature.atMinTemperatureValue = EEP_MinTemperature;

เพื่อให้อุปกรณ์ของเรามีการตั้งค่าบางอย่างใน EEPROM ตั้งแต่เริ่มต้น โปรเจ็กต์สำหรับการบูตครั้งแรกสามารถคอมไพล์ด้วยตัวแปรเหล่านี้ที่เริ่มต้นได้:

eeprom uint16_t EEP_MinTemperature = 20; ... //อาร์เรย์สำหรับจัดเก็บจุดการสอบเทียบในหน่วยความจำแบบไม่ลบเลือน __eeprom TCalibrationData EEP_CalibrationData = ((20, 1300), (300, 4092));

ในกรณีนี้ คอมไพเลอร์จะเริ่มต้นตัวแปร __eeprom ก่อนที่จะเริ่มทำงานกับฟังก์ชันหลัก หากต้องการรับไฟล์ที่มีหน่วยความจำแบบไม่ลบเลือน (.eep) คุณต้องเข้าไปที่การตั้งค่าต่อไปนี้:
โครงการ->ตัวเลือก..->ตัวเชื่อมโยง->ตัวเลือกพิเศษ
หากไม่ได้ทำเครื่องหมายในช่อง “ใช้ตัวเลือกบรรทัดคำสั่ง” ให้ทำเครื่องหมายในช่องและเพิ่มบรรทัด
-Ointel-มาตรฐาน (XDATA)=.eep
ขั้นแรกเรารวบรวมโปรเจ็กต์ด้วยตัวแปรเริ่มต้น บันทึกไฟล์ eep แยกต่างหาก จากนั้นเราจะลบการเริ่มต้นเมื่อสร้างตัวแปร

เพียงเท่านี้ - เตาของเราพร้อมแล้ว!

ไมโครวงจรเพื่อวัตถุประสงค์ต่าง ๆ ใช้เป็นส่วนหนึ่งของอุปกรณ์อิเล็กทรอนิกส์สมัยใหม่ ส่วนประกอบดังกล่าวที่หลากหลายได้รับการเสริมด้วยชิปหน่วยความจำ ส่วนประกอบวิทยุประเภทนี้ (ในหมู่วิศวกรอิเล็กทรอนิกส์และผู้คน) มักเรียกง่ายๆ ว่าชิป วัตถุประสงค์หลักของชิปหน่วยความจำคือการจัดเก็บข้อมูลบางอย่างด้วยความสามารถในการป้อน (เขียน) เปลี่ยนแปลง (เขียนทับ) หรือลบ (ลบ) ทั้งหมดด้วยซอฟต์แวร์ ความสนใจทั่วไปในชิปหน่วยความจำนั้นเป็นที่เข้าใจได้ สำหรับผู้เชี่ยวชาญที่รู้วิธีการเขียนโปรแกรมชิปหน่วยความจำ โอกาสมากมายเปิดกว้างในด้านการซ่อมแซมและกำหนดค่าอุปกรณ์อิเล็กทรอนิกส์สมัยใหม่

ชิปหน่วยความจำเป็นส่วนประกอบอิเล็กทรอนิกส์ซึ่งมีโครงสร้างภายในที่สามารถจัดเก็บ (จดจำ) โปรแกรมที่ป้อน ข้อมูลใด ๆ หรือทั้งสองอย่างในเวลาเดียวกัน

โดยพื้นฐานแล้ว ข้อมูลที่โหลดลงในชิปคือชุดคำสั่งที่ประกอบด้วยชุดหน่วยประมวลผลไมโครโปรเซสเซอร์

ควรสังเกตว่า: ชิปหน่วยความจำเป็นส่วนเสริมที่สำคัญของไมโครโปรเซสเซอร์เสมอ - ชิปควบคุม ในทางกลับกันไมโครโปรเซสเซอร์เป็นพื้นฐานของอุปกรณ์อิเล็กทรอนิกส์ของเทคโนโลยีสมัยใหม่

ชุดส่วนประกอบอิเล็กทรอนิกส์บนกระดานของอุปกรณ์อิเล็กทรอนิกส์สมัยใหม่ ที่ไหนสักแห่งในบรรดาส่วนประกอบวิทยุจำนวนมากนี้มีส่วนประกอบที่สามารถจัดเก็บข้อมูลได้

ดังนั้นตัวควบคุมไมโครโปรเซสเซอร์และชิปหน่วยความจำจึงจัดเก็บข้อมูลที่ไมโครโปรเซสเซอร์ต้องการ

โปรแกรมหรือข้อมูลจะถูกจัดเก็บไว้ในชิปหน่วยความจำเป็นชุดตัวเลข - ศูนย์และหน่วย (บิต) หนึ่งบิตสามารถแสดงด้วยศูนย์ตรรกะ (0) หรือตรรกะหนึ่ง (1)

ในรูปแบบเดียว การประมวลผลบิตดูเหมือนซับซ้อน ดังนั้นบิตจึงถูกรวมเข้าเป็นกลุ่ม สิบหกบิตประกอบขึ้นเป็นกลุ่มของ "คำ" แปดบิตประกอบเป็นไบต์ - "ส่วนหนึ่งของคำ" สี่บิต - "ชิ้นส่วนของคำ"

คำศัพท์ซอฟต์แวร์ที่ใช้บ่อยที่สุดสำหรับชิปคือไบต์ นี่คือชุดของแปดบิตที่สามารถรับรูปแบบตัวเลขได้ตั้งแต่ 2 ถึง 8 รูปแบบ โดยให้ค่าที่แตกต่างกันทั้งหมด 256 ค่า

ในการเป็นตัวแทนของไบต์จะใช้ระบบเลขฐานสิบหกซึ่งจัดให้มีการใช้ค่า 16 ค่าจากสองกลุ่ม:

  1. ดิจิตอล (ตั้งแต่ 0 ถึง 9)
  2. สัญลักษณ์ (จาก A ถึง F)

ดังนั้นการรวมกันของอักขระฐานสิบหกสองตัวจึงมีค่า 256 ค่า (ตั้งแต่ 00h ถึง FFh) อักขระ "h" ต่อท้ายระบุเลขฐานสิบหก

การจัดระเบียบชิปหน่วยความจำ

สำหรับชิปหน่วยความจำ 8 บิต (ชนิดที่ใช้กันมากที่สุด) บิตจะถูกรวมเป็นไบต์ (8 บิต) และจัดเก็บไว้ใน "ที่อยู่" ที่ระบุ

ที่อยู่ที่กำหนดช่วยให้สามารถเข้าถึงไบต์ได้ บิตที่อยู่การเข้าถึงแปดบิตจะถูกส่งผ่านพอร์ตข้อมูลแปดพอร์ต


การจัดโครงสร้างของอุปกรณ์จัดเก็บข้อมูล เมื่อมองแวบแรก อัลกอริธึมนั้นซับซ้อนและเข้าใจยาก แต่ถ้าอยากเข้าใจ ความเข้าใจก็มาเร็ว

ในตอนเช้าของการเกิดขึ้นของหน่วยความจำที่เก็บข้อมูลไว้เมื่อปิดเครื่อง (EPROM, ROM ที่ตั้งโปรแกรมได้แบบลบได้ - "ROM ที่ลบได้ / ตั้งโปรแกรมได้" หรือใน PPZU ของรัสเซีย - "ROM ที่ตั้งโปรแกรมได้") ประเภทหลักคือ หน่วยความจำที่ลบล้างได้ด้วยรังสีอัลตราไวโอเลต: UV-EPROM (อีพรอมอัลตร้าไวโอเล็ต, UV-PROM) นอกจากนี้ คำนำหน้า UV มักถูกละเว้น เนื่องจากทุกคนเข้าใจว่า EPROM นั้นสามารถลบด้วยรังสีอัลตราไวโอเลตได้ และ ROM (หรือ ROM) นั้นเป็นผลึก OTP-ROM ที่ตั้งโปรแกรมได้เพียงครั้งเดียวโดยไม่ต้องเพิ่มเติม ไมโครคอนโทรลเลอร์ที่มีหน่วยความจำโปรแกรม UV ถือเป็นเรื่องปกติมาตั้งแต่กลางทศวรรษ 1990 ในตัวอย่างการทำงานของอุปกรณ์ที่มีหน่วยความจำ UV หน้าต่างควอทซ์ที่ใช้ลบจะถูกปิดผนึกด้วยเทปกาวสีดำ เนื่องจากข้อมูลใน UV-EPROM จะถูกทำลายอย่างช้าๆ เมื่อถูกแสงแดด

ข้าว. 18.7. การออกแบบเซลล์หน่วย EPROM

ในรูป รูปที่ 18.7 แสดงโครงสร้างของเซลล์หน่วย EPROM ซึ่งรองรับหน่วยความจำแฟลชสมัยใหม่ทุกประเภท หากเราแยกสิ่งที่ระบุโดยคำจารึกว่า "ประตูลอย" ออกเราจะได้ทรานซิสเตอร์เอฟเฟกต์สนามที่ธรรมดาที่สุดซึ่งเป็นตัวเดียวกับที่รวมอยู่ในเซลล์ DRAM หากใช้แรงดันไฟฟ้าบวกกับประตูควบคุมของทรานซิสเตอร์ ประตูนั้นจะเปิดขึ้นและกระแสจะไหลผ่านประตูนั้น (ซึ่งถือเป็นสถานะหนึ่งเชิงตรรกะ) ในรูป ในแผนภาพ 18.7 ด้านบนแสดงกรณีที่เกตลอยไม่มีผลกระทบใดๆ ต่อการทำงานของเซลล์ ตัวอย่างเช่น สถานะนี้เป็นเรื่องปกติสำหรับหน่วยความจำแฟลชเปล่า ซึ่งไม่เคยมีการเขียนสิ่งใดเข้าไปเลย

ถ้าเรา (เราจะพูดถึงมันแยกกัน) จัดการเพื่อวางประจุจำนวนหนึ่งบนประตูลอย - อิเล็กตรอนอิสระซึ่งแสดงในรูปที่ 1 ต่ำกว่า 18.7 ในรูปของวงกลมสีเข้มที่มีเครื่องหมายลบ จากนั้นจะป้องกันการทำงานของอิเล็กโทรดควบคุม และทรานซิสเตอร์ดังกล่าวจะหยุดนำกระแสไฟฟ้าโดยสิ้นเชิง นี่คือสถานะตรรกะเป็นศูนย์ เนื่องจากประตูลอยถูกเรียกเช่นนั้นเพราะมัน "ลอย" ในความหนาของฉนวน (ซิลิกอนไดออกไซด์) ประจุที่ปล่อยออกมาเมื่อใดก็ไม่สามารถไปที่ใดก็ได้ที่อยู่นิ่ง และข้อมูลที่บันทึกในลักษณะนี้สามารถจัดเก็บได้นานหลายทศวรรษ (จนกระทั่งเมื่อเร็วๆ นี้ ผู้ผลิตมักจะให้การรับประกัน 10 ปี แต่ในทางปฏิบัติ ภายใต้สภาวะปกติ ระยะเวลาในการจัดเก็บจะนานกว่ามาก)

หมายเหตุในระยะขอบ

พูดอย่างเคร่งครัดในชิป NAND (ซึ่งจะกล่าวถึงในภายหลัง) ตรรกะจะต้องกลับกัน หากใน EPROM แบบทั่วไป คุณไม่สามารถเปิดเซลล์ที่ตั้งโปรแกรมไว้โดยใช้แรงดันไฟฟ้าที่อ่านได้ จะเป็นอีกวิธีหนึ่ง นั่นคือไม่สามารถล็อคโดยการถอดแรงดันไฟฟ้าออก ดังนั้น โดยเฉพาะอย่างยิ่ง หน่วยความจำ NAND บริสุทธิ์จะส่งออกค่าศูนย์ทั้งหมด ไม่ใช่ค่าเช่น EPROM แต่สิ่งเหล่านี้เป็นความแตกต่างที่ไม่เปลี่ยนสาระสำคัญของเรื่อง

Octajiocb ไม่มีอะไรเลย - หาวิธีวางประจุบนประตูลอยที่แยกได้จากอิทธิพลภายนอกทั้งหมด และไม่เพียงแต่จะวางไว้เท่านั้น - เพราะบางครั้งความทรงจำก็ต้องถูกลบออกไป ดังนั้นจึงต้องมีวิธีดึงมันกลับมาจากที่นั่นด้วย ใน UV-EPROM ชั้นออกไซด์ระหว่างประตูลอยตัวและสารตั้งต้นมีความหนามาก (หาก 50 นาโนเมตรสามารถอธิบายได้ว่า "หนา" แน่นอน) และงานทั้งหมดค่อนข้างหยาบ เมื่อทำการบันทึก ประตูควบคุมจะใช้แรงดันไฟฟ้าบวกค่อนข้างสูง - บางครั้งสูงถึง 36-40 V และใช้แรงดันไฟฟ้าบวกเล็กน้อยกับท่อระบายน้ำของทรานซิสเตอร์ ในกรณีนี้ อิเล็กตรอนที่เคลื่อนที่จากแหล่งกำเนิดไปยังท่อระบายน้ำจะถูกเร่งด้วยสนามของอิเล็กโทรดควบคุมจนพวกมันกระโดดข้ามสิ่งกีดขวางในรูปแบบของฉนวนระหว่างสารตั้งต้นและประตูลอย กระบวนการนี้เรียกอีกอย่างว่า "การฉีดอิเล็กตรอนร้อน"

กระแสการชาร์จถึงมิลลิแอมป์ - คุณสามารถจินตนาการได้ว่าปริมาณการใช้วงจรทั้งหมดจะเป็นอย่างไรหากตั้งโปรแกรมเซลล์อย่างน้อยหลายพันเซลล์พร้อมกัน และถึงแม้ว่ากระแสดังกล่าวจะต้องใช้เวลาค่อนข้างสั้น (อย่างไรก็ตามจากมุมมองของความเร็วของวงจร แต่ก็ไม่สั้นนัก - มิลลิวินาที) นี่เป็นข้อเสียเปรียบที่ใหญ่ที่สุดของตัวอย่างหน่วยความจำ EPROM เก่าทั้งหมด อีกประการหนึ่งที่แย่กว่านั้นคือทั้งฉนวนและบานเกล็ดลอยเองไม่สามารถทนต่อการละเมิดดังกล่าวได้เป็นเวลานานและค่อยๆลดลงซึ่งเป็นเหตุผลว่าทำไมจำนวนรอบการลบการเขียนจึงถูก จำกัด ไว้ที่หลายร้อยหรือสูงสุดหลายพัน หน่วยความจำแฟลชรุ่นต่อมาหลายรุ่นมีวงจรพิเศษสำหรับจัดเก็บแผนที่ของเซลล์ที่ "เสียหาย" เช่นเดียวกับที่ทำกับฮาร์ดไดรฟ์ โมเดลสมัยใหม่ที่มีเซลล์หลายล้านเซลล์ก็มีการ์ดเช่นนี้เช่นกัน อย่างไรก็ตาม จำนวนรอบการลบ/เขียนได้เพิ่มขึ้นเป็นหลายแสนครั้ง สิ่งนี้สำเร็จได้อย่างไร?

ข้าว. 18.8. กระบวนการลบในเซลล์หน่วย EPROM

ขั้นแรกเรามาดูกันว่าการดำเนินการลบในโครงการนี้เป็นอย่างไร ใน UV-EPROM เมื่อถูกฉายรังสีด้วยแสงอัลตราไวโอเลต โฟตอนพลังงานสูงจะให้โมเมนตัมที่เพียงพอแก่อิเล็กตรอนบนแท่นชาร์จแบบลอยเพื่อให้พวกมัน "กระโดด" กลับไปยังสารตั้งต้นได้ด้วยตัวเอง โดยไม่มีอิทธิพลทางไฟฟ้าใดๆ ตัวอย่างแรกของหน่วยความจำที่สามารถลบข้อมูลได้ด้วยไฟฟ้า (EEPROM, ROM ที่สามารถลบข้อมูลได้ด้วยไฟฟ้า) ถูกสร้างขึ้นที่ Intel ในช่วงปลายทศวรรษ 1970 โดยการมีส่วนร่วมโดยตรงของ George Perlegos ผู้ก่อตั้ง Atmel ในอนาคต เขาใช้ "เอฟเฟกต์อุโมงค์ควอนตัม ฟาวเลอร์-นอร์ดไฮม์" เบื้องหลังชื่อที่เข้าใจยากนี้มีปรากฏการณ์ที่ค่อนข้างเรียบง่ายในสาระสำคัญ (แต่ซับซ้อนมากจากมุมมองทางกายภาพ): ด้วยฟิล์มฉนวนที่บางเพียงพอ (ความหนาของมันต้องลดลงจาก 50 เป็น 10 นาโนเมตร) อิเล็กตรอนหากถูกผลักเล็กน้อย โดยการใช้แรงดันไฟฟ้าไม่สูงเกินไปในทิศทางที่ถูกต้องสามารถรั่วซึมผ่านสิ่งกีดขวางได้โดยไม่ต้องกระโดดข้าม กระบวนการนี้แสดงไว้ในรูปที่ 1 18.8 ที่ด้านบน (สังเกตสัญญาณแรงดันไฟฟ้าบนอิเล็กโทรดควบคุม)

EEPROM รุ่นเก่าทำงานในลักษณะนี้ทุกประการ การเขียนทำได้โดย "การฉีดร้อน" และการลบทำได้โดย "อุโมงค์ควอนตัม" นั่นเป็นสาเหตุที่ทำให้ใช้งานได้ค่อนข้างยาก - นักพัฒนาที่มีประสบการณ์จำได้ว่าชิป EEPROM ตัวแรกต้องใช้แรงดันไฟฟ้าสองหรือสามตัวและจะต้องจ่ายตามลำดับที่แน่นอนเมื่อเขียนและลบ

การแปลง EEPROM เป็นแฟลชเกิดขึ้นในสามทิศทางที่แตกต่างกัน ประการแรกในทิศทางของการปรับปรุงการออกแบบเซลล์นั้นเอง เริ่มต้นด้วยการกำจัดขั้นตอนที่น่าขยะแขยงที่สุด - "การฉีดร้อน" แต่พวกเขาเริ่มใช้ "อุโมงค์ควอนตัม" ในการบันทึกและเมื่อลบข้อมูล ข้าว. 18.8 ด้านล่างแสดงกระบวนการนี้ - หากเมื่อทรานซิสเตอร์เปิดอยู่ มีแรงดันไฟฟ้าสูงเพียงพอ (แต่ต่ำกว่าอย่างมีนัยสำคัญเมื่อใช้ "การฉีดร้อน") ที่ประตูควบคุม อิเล็กตรอนบางตัวที่เคลื่อนที่ผ่านทรานซิสเตอร์แบบเปิดจากแหล่งกำเนิดไปยังระบายจะ “รั่ว” ผ่านฉนวนและไปสิ้นสุดที่บานเกล็ดลอย ปริมาณการใช้กระแสไฟระหว่างการบันทึกลดลงหลายขนาด อย่างไรก็ตาม ฉนวนจะต้องถูกทำให้บางลงอีก ซึ่งทำให้เกิดความยากลำบากอย่างมากในการนำเทคโนโลยีนี้เข้าสู่การผลิต

ทิศทางที่สอง - เซลล์ถูกสร้างขึ้นค่อนข้างซับซ้อนมากขึ้นโดยการติดทรานซิสเตอร์ตัวที่สอง (ปกติไม่ใช่ประตูคู่) เข้ากับเซลล์ซึ่งแยกเอาต์พุตเดรนและบัสการอ่านข้อมูลของไมโครวงจรทั้งหมด ต้องขอบคุณทั้งหมดนี้ จึงเป็นไปได้ที่จะเพิ่มความทนทานได้อย่างมาก - รอบการเขียน/ลบสูงสุดถึงหลายแสนรอบ (หากเพิ่มวงจรแก้ไขข้อผิดพลาดเข้าไป จะมีลักษณะเป็นล้านรอบของแฟลชการ์ด) นอกจากนี้วงจรการสร้างไฟฟ้าแรงสูงและเครื่องกำเนิดพัลส์การเขียน/ลบที่เกี่ยวข้องถูกย้ายภายในวงจรขนาดเล็กซึ่งทำให้การใช้หน่วยความจำประเภทนี้สะดวกยิ่งขึ้นมาก - เริ่มขับเคลื่อนด้วยแรงดันไฟฟ้าเดียว (5, 3.3 หรือ 1.8 วี)

และในที่สุดประการที่สามการปรับปรุงที่สำคัญที่สุดคือการเปลี่ยนแปลงในองค์กรของการเข้าถึงเซลล์บนชิปซึ่งเป็นผลมาจากการที่หน่วยความจำประเภทนี้ได้รับชื่อแฟลช (นั่นคือ "สายฟ้า") ซึ่งปัจจุบันรู้จักกันในชื่อ เจ้าของกล้องดิจิตอลหรือเครื่องเล่น MP3 พกพาทุกท่าน นี่คือวิธีการเรียก EEPROM ประเภทหนึ่งในช่วงกลางทศวรรษ 1980 ซึ่งการลบและการเขียนดำเนินการพร้อมกันในบล็อกทั้งหมด - หน้า อย่างไรก็ตาม ขั้นตอนการอ่านจากเซลล์ที่กำหนดเองได้ช้าลงด้วยเหตุผลที่ชัดเจน เพื่อให้เร็วขึ้น จำเป็นต้องวาง SRAM ระดับกลาง (บัฟเฟอร์) ไว้บนคริสตัลหน่วยความจำแฟลช สำหรับแฟลชไดรฟ์ สิ่งนี้ไม่สำคัญมากนัก เนื่องจากข้อมูลยังคงอ่านและเขียนในอาร์เรย์ขนาดใหญ่ในคราวเดียว แต่สำหรับการใช้งานในไมโครคอนโทรลเลอร์ อาจไม่สะดวก ยิ่งไปกว่านั้นใน MK ไม่สะดวกที่จะใช้เทคโนโลยีแฟลชเวอร์ชันที่เร็วที่สุดซึ่งเรียกว่า หน่วยความจำประเภท NAND (จากชื่อของฟังก์ชันลอจิคัล "AND-NOT") โดยหลักการแล้วเป็นไปได้ที่จะอ่านและเขียนหน่วยความจำในบล็อกขนาด 512 ไบต์เท่านั้น (ซึ่งเป็นขนาดปกติของเซกเตอร์บน ฮาร์ดดิสก์ยังอ่านและเขียนทั้งหมดในครั้งเดียว - จากที่นี่คุณสามารถเข้าใจวัตถุประสงค์หลักของ NAND ได้)

โดยปกติแล้ว MK จะใช้หน่วยความจำแฟลชโปรแกรมแบบดั้งเดิม (ชนิด NOR) ซึ่งหน้ามีขนาดค่อนข้างเล็ก - ประมาณ 64-256 ไบต์ อย่างไรก็ตามหากผู้ใช้เองไม่ได้ดำเนินการสร้างโปรแกรมเมอร์สำหรับไมโครวงจรดังกล่าวเขาอาจไม่ทราบถึงลักษณะของหน่วยความจำเพจด้วยซ้ำ และสำหรับข้อมูลผู้ใช้ EEPROM จะใช้โดยมีความสามารถในการอ่านไบต์ที่กำหนดเองหรือแบ่งพาร์ติชัน แต่เป็นบล็อกขนาดเล็กมาก - เช่น 4 ไบต์ ในเวลาเดียวกัน การเข้าถึงของผู้ใช้ยังคงเป็นแบบไบต์ต่อไบต์ คุณลักษณะเฉพาะของหน่วยความจำดังกล่าวคือขั้นตอนการเขียนค่อนข้างช้า (ตามลำดับมิลลิวินาที) ในขณะที่การอ่านไม่ช้ากว่าการดำเนินการอื่น ๆ ในไมโครคอนโทรลเลอร์

การพัฒนาเทคโนโลยีหน่วยความจำแฟลชมีความสำคัญอย่างยิ่งในการทำให้ไมโครคอนโทรลเลอร์ราคาถูกและเข้าถึงได้มากขึ้น ในอนาคต เราจะจัดการกับหน่วยความจำแบบไม่ลบเลือนไม่เพียงแต่ในรูปแบบของโปรแกรมและข้อมูลที่สร้างไว้ในหน่วยความจำไมโครคอนโทรลเลอร์เท่านั้น แต่ยังรวมไปถึงไมโครวงจรแยกที่อนุญาตให้บันทึกข้อมูลจำนวนค่อนข้างมาก

อัปเดตเมื่อ 12/16/58 สวัสดีทุกคน. หลังจากตรวจสอบการทำงานร่วมกันของปุ่มต่างๆ กับคอนโทรลเลอร์ในบทความก่อนหน้านี้แล้ว ในรายการนี้ เราจะวิเคราะห์หน่วยความจำของ AVR EEPROM MK (PROM ที่สามารถลบได้ด้วยไฟฟ้า) ซึ่งไม่ลบเลือนและมีทรัพยากรประมาณ 100,000 รอบการเขียน/อ่าน เหตุใดเราจึงต้องมีหน่วยความจำดังกล่าวโดยมีจำนวนการเข้าถึงที่จำกัด หน่วยความจำดังกล่าวเหมาะอย่างยิ่งสำหรับการจัดเก็บค่าคงที่และพารามิเตอร์เริ่มต้น ซึ่งเราสามารถตั้งค่าที่จุดเริ่มต้นของโปรแกรมโดยใช้ปุ่มเดียวกัน

ควรสังเกตว่าผู้ผลิตบางรายรวมหน่วยความจำ EEPROM เข้ากับ SRAM เมื่อแรงดันไฟฟ้าในการทำงานถูกรบกวน เนื้อหาในหน่วยความจำจะถูกถ่ายโอนจาก SRAM ไปยัง EEPROM ส่งผลให้มีรอบการเขียนสั้นที่ไม่ทำให้เกิดการสึกหรอ

ตอนนี้เรามาดูวิธีการเข้าถึงมันกันดีกว่า ในการเขียนโปรแกรมหน่วยความจำ EEPROM จะใช้การลงทะเบียนสามรายการที่อยู่ในพื้นที่ I/O ของหน่วยความจำ SRAM:: การลงทะเบียนที่อยู่แปดบิต EEAR หรือการลงทะเบียนสองรายการ EEARH และ EEARL; การลงทะเบียนข้อมูล EEDR แปดบิต; EECR รีจิสเตอร์ควบคุมแปดบิต เมื่อกระบวนการเขียนเกิดขึ้น ไบต์ข้อมูลจะได้รับการแก้ไขโดยการลงทะเบียนที่อยู่และเขียนไปยังการลงทะเบียนข้อมูล เมื่ออ่านจากหน่วยความจำ เนื้อหาของเซลล์ EEPROM ที่ระบุที่อยู่โดยการลงทะเบียนที่อยู่จะถูกเขียนไปยังการลงทะเบียนข้อมูล

หนังสือของ Evstifeev ซึ่งเป็นหนังสืออ้างอิงเกี่ยวกับไมโครคอนโทรลเลอร์ (ฉันอ้างถึงวรรณกรรมในบทความหมายเลข 1) อธิบายตัวอย่างโปรแกรมสำหรับการเขียน/การอ่าน ลองดูที่โปรแกรม:

การใช้ฟังก์ชันการบันทึก:

เป็นโมฆะ EEPROM_write (int uiAddress ที่ไม่ได้ลงนาม, ถ่าน uoData ที่ไม่ได้ลงนาม)
{
ในขณะที่ (EECR & (1<
EEAR = ที่อยู่ ui; // เริ่มต้นการลงทะเบียนที่อยู่
EEDR = uoData ; //เริ่มต้นการลงทะเบียนข้อมูล
EECR |= (1<//ตั้งค่าสถานะ EEMWE
EECR |= (1<< EEWE); //เริ่มเขียนไปยัง EEPROM
}

มาวิเคราะห์โปรแกรมกัน
1. EEWE เป็นบิตของรีจิสเตอร์ (รูปด้านล่าง) EECR และมีหน้าที่อนุญาตให้เขียนลง EEPROM หากตั้งค่าเป็น 1 ให้เขียนไปที่ อีพรอม โดยมีเงื่อนไขว่า EEMWE ตั้งค่าเป็น 1
2. โหลดที่อยู่ลงในทะเบียนที่อยู่ EEAR

บิตรีจิสเตอร์ควบคุม EECR:
EERIE - เปิดใช้งานการขัดจังหวะจาก EEPROM;
EEMWE - การควบคุมสิทธิ์การเขียน EEPROM;
EEWE - เขียนสิทธิ์ไปยัง EEPROM;
EERE - สิทธิ์การอ่านจาก EEPROM

3. โหลดไบต์ข้อมูลลงในการลงทะเบียนข้อมูล EEDR
4. EEMWE - ควบคุมบิตการอนุญาตการเขียนใน EEPROM แฟล็กนี้ควบคุมการทำงานของบิตเปิดใช้งานการเขียน EEWE เมื่อตั้งค่าเป็น 1 การเขียนจะถูกเปิดใช้งาน ถ้าเป็น 0 ดังนั้นเมื่อ EEWE ถูกตั้งค่าเป็น 1 การเขียนไปยังหน่วยความจำจะไม่เกิดขึ้น หลังจากติดตั้งซอฟต์แวร์ EEMWE จะถูกรีเซ็ตหลังจากรอบเครื่อง 4 รอบ
5. เขียนข้อมูลลงหน่วยความจำ

มีความแตกต่างนิดหน่อยที่นี่. หากคุณวางแผนที่จะเขียนข้อมูลไปยัง EEPROM เป็นระยะระหว่างการทำงานของโปรแกรมเมื่อเขียนโปรแกรมไมโครคอนโทรลเลอร์ด้วยตนเองคุณจำเป็นต้องรู้ว่าการเขียนไปยัง EEPROM ไม่สามารถดำเนินการพร้อมกันกับการเขียนไปยังหน่วยความจำแฟลชได้ ดังนั้นหลังจากจุดแรกคุณต้องเพิ่ม จุดต่อไปนี้:

— รอให้โปรแกรมเขียนลงในหน่วยความจำแฟลช เช่น รอจนกระทั่งรีเซ็ตการตั้งค่าสถานะ SPMEN ของการลงทะเบียน SPMCR จากนั้นหลังจากบรรทัดนี้คุณจะต้องเพิ่มเงื่อนไขแบบวนอื่น:

ในขณะที่ (SPMCR &(1<//เขียนข้อมูลลงในหน่วยความจำแฟลชให้เสร็จสิ้น

ตอนนี้เรามาดูฟังก์ชั่นการอ่าน:

ถ่าน EEPROM_write ที่ไม่ได้ลงนาม (int uiAddress ที่ไม่ได้ลงนาม)
{
ในขณะที่ (EECR & (1<//รอให้รายการก่อนหน้าเสร็จสมบูรณ์
EEAR = ที่อยู่ ui; // เริ่มต้นการลงทะเบียนที่อยู่
EECR |= (1<
ส่งคืน EEDR;
}

ที่นี่ทุกอย่างเกือบจะเหมือนกัน มีเพียงที่อยู่ของตัวแปรเท่านั้นที่ส่งไปยังฟังก์ชัน เรากำหนดค่าเริ่มต้นและอนุญาตให้อ่านตามที่อยู่นี้ เราส่งคืนข้อมูล

แต่ก่อนที่จะใช้อัลกอริธึมการเขียนหรือการอ่าน EEPROM จำเป็นต้องประกาศตัวแปรที่จะถูกจัดสรรภายในพื้นที่ EEPROM เพื่อจุดประสงค์นี้ คุณลักษณะพิเศษ EEMEM จะถูกกำหนดไว้ในไลบรารี eeprom.h ของสภาพแวดล้อมซอฟต์แวร์ WinAVR ตัวอย่างเช่น เรามาประกาศตัวแปรโดยไม่มีประเภทจำนวนเต็มที่ลงนามพร้อมแอตทริบิวต์

EEMEM uint8_t eeprom_x; //ประกาศตัวแปร
x – ตัวแปร;
uint8_t เป็นประเภทจำนวนเต็มที่ไม่ได้ลงนามซึ่งมีความกว้างบิตที่ระบุอย่างแม่นยำ ในกรณีนี้คือ 8 บิต และมีไว้สำหรับการพกพาโปรแกรม
EEMEM เป็นแอตทริบิวต์ที่ทำให้ตัวแปรถูกกระจายภายในส่วน .eeprom แอ็ตทริบิวต์นี้ถูกกำหนดไว้ในไฟล์ eeprom.h และมีลักษณะเช่นนี้

#ifndef อีเมม
#define EEMEM__attribute__ ((ส่วน (".eeprom")))
#เอ็นดิฟ

ในการทำงานกับข้อมูล ไลบรารีมีฟังก์ชันอยู่แล้ว:
สำหรับการอ่าน
uint8_t eeprom_read_byte (const uint8_t *addr)
อาร์กิวเมนต์ของฟังก์ชัน eeprom_read_... คือที่อยู่ของตัวแปรใน EEPROM และผลลัพธ์คือค่าของตัวแปรใน EEPROM
สำหรับการบันทึก
เป็นโมฆะ eeprom_write_byte (uint8_t *addr, ค่า uint8_t)
อาร์กิวเมนต์ของฟังก์ชัน eeprom_write_... คือที่อยู่ใน EEPROM ที่จะเขียนข้อมูลและค่าที่จะเขียน

เรามาจบทั้งหมดนี้ด้วยตัวอย่างโปรแกรมโดยรวมกันดีกว่า มาถ่ายโอนข้อมูลไปยัง EEPROM แล้วนับดู โดยใช้ เอวีอาร์ และเราจะแสดงผลออกมา

#รวม
#รวม
#รวม
#รวม"lcd.h"

uint8_t EEMEM eepro_х; /* ตัวแปรดังกล่าวจะต้องเป็นแบบโกลบอลเสมอและใช้เพื่อถ่ายโอนที่อยู่ไปยังพื้นที่ EEPROM */
ถ่านคำ = "สวัสดี";

หลัก()
{
uint8_t eepro_х1 = 100; /*ตัวแปรตัวที่สองในการถ่ายโอนข้อมูล*/
/*มาเขียนตัวแปรลงในหน่วยความจำ*/
eeprom_write_byte(&eeprom_x, eeprom_x1); /*ส่งที่อยู่ของตัวแปรและค่าที่เราจะเขียนไปยังที่อยู่นี้ให้กับฟังก์ชัน*/
/*ตอนนี้เรามาตรวจสอบให้แน่ใจว่าเรามีค่า 100 เก็บไว้ในหน่วยความจำ เพื่อดำเนินการนี้ เราจะรีเซ็ตค่าปัจจุบันของตัวแปร x และกำหนดค่าการอ่านจากหน่วยความจำ*/
อีพรอม_x1 = 0;
/*นับจำนวนเนื้อหาในหน่วยความจำ*/
x1 = eeprom_read_byte(&eeprom_x); // รับที่อยู่ของตัวแปร
วิ่ง (คำว่า "V_eeprom x1=%3d",eeprom_x1);
PrintString(คำ);
}

รูปด้านล่างแสดงผลลัพธ์
หากโปรแกรมเริ่มถ่ายโอนค่าคงที่บางส่วนสำหรับการจัดเก็บในหน่วยความจำ EEPROM จากนั้นเมื่อทำการแฟลชเฟิร์มแวร์จำเป็นต้องอัปโหลดไฟล์ที่มีนามสกุล .eep ซึ่งจะถูกสร้างขึ้นโดยคอมไพเลอร์และวางไว้ในไดเร็กทอรีเดียวกันกับไฟล์การทำงาน

นั่นคือทั้งหมดที่สำหรับตอนนี้. ต่อไปนี้เป็นภาพรวมโดยย่อสำหรับการทำงานกับหน่วยความจำดังกล่าว แน่นอนว่ามีความแตกต่างมากมาย แต่สิ่งเหล่านี้เป็นเพียงรายละเอียดปลีกย่อย ในบทความถัดไปเราจะดูที่ PWM(การปรับความกว้างพัลส์) และไปยังโปรเจ็กต์ถัดไปอย่างราบรื่น เรามาลองออกแบบ "สมอง" สำหรับเครื่อง CNC สมัครเล่นกันดีกว่า ลาก่อนทุกคน.