Flash และ EEPROM


14

Atmega16 แผ่นข้อมูลบอกว่ามันมี

a) หน่วยความจำโปรแกรมแฟลชในตัวระบบที่สามารถโปรแกรมได้ 16 Kbytes และ b) 512 EEPROM ไบต์

ไมโครคอนโทรลเลอร์สามารถมี ROM แยกกันสองตัวซึ่งสามารถตั้งโปรแกรมผ่านเทคโนโลยี EEPROM และเทคโนโลยีแฟลชได้หรือไม่?

หรือการอนุมานของฉัน (ตามที่ระบุไว้ด้านบน) จากแผ่นข้อมูลผิดหรือเปล่า?

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

ผู้ใดสามารถอธิบายสิ่งที่เป็นคำว่า "ในระบบโปรแกรมด้วยตนเอง"

สิ่งที่ฉันรู้: เทคโนโลยีแฟลชสามารถเขียนโปรแกรมในบล็อกของข้อมูลในขณะที่ EEPROM สามารถเขียนข้อมูลไบต์ต่อไบต์

คำตอบ:


21

ทุกวันนี้หน่วยความจำแฟลชถูกใช้เพื่อเก็บรหัสโปรแกรมและ EEPROM (หน่วยความจำแบบอ่านอย่างเดียวที่ลบได้ด้วยระบบไฟฟ้า) ถูกใช้เพื่อเก็บข้อมูลถาวร ย้อนกลับไปเมื่อ 30 ปีก่อนก่อนที่แฟลชจะมา EEPROM จะถูกใช้เพื่อเก็บรหัสโปรแกรม

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

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

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

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

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

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

สำหรับทั้งแฟลชและ EEPROMs มีจำนวนครั้งสูงสุดที่คุณสามารถอัปเดตได้ก่อนที่คุณจะหมดหน่วยความจำ หมายเลขนี้ให้ไว้ในแผ่นข้อมูลเป็นค่ารับประกันขั้นต่ำ โดยทั่วไปแล้วจะสูงกว่า EEPROM มากกว่าหน่วยความจำแฟลช สำหรับแฟลชฉันเห็นตัวเลขต่ำสุดที่ 1,000 สำหรับ EEPROMs ฉันเห็นตัวเลขสูงถึง 1,000,000

ข้อดีอย่างหนึ่งของ EEPROM ที่มีต่อแฟลชคือคุณสามารถลบได้หลายครั้งมากกว่าที่จะลบแฟลช

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


ขอบคุณสำหรับคำตอบของคุณ ดังนั้นในการป้อนข้อมูลภายใน EEPROM ฉันต้องการโปรแกรมเมอร์ EEPROM เช่นเดียวกับโปรแกรมเมอร์ USBASP เพื่อถ่ายโอนข้อมูลโปรแกรมในหน่วยความจำแฟลช ฉันถูกต้องครับ
Jasser

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

เนื่องจากเราสามารถเขียนหรืออ่านจาก EEPROM ภายในไมโครคอนโทรลเลอร์กว่าไมโครคอนโทรลเลอร์จึงควรมีวงจรเก็บข้อมูลภายใน EEPROM และที่ควรจะคล้ายกับโปรแกรมเมอร์ EEPROM นี่ทำให้ฉันถามอีกคำถามหนึ่งว่าเนื่องจาก EEPROM สามารถใช้งานได้ประมาณ 100,000 ครั้งกว่าหลังจากนั้นเราอาจไม่สามารถจัดเก็บข้อมูลภายใน EEPROM ผ่านการลงทะเบียน ข้อความเหล่านี้มีความหมายไหม? @tcrosley
Jasser

1
@ Jasser ถูกต้องมีข้อ จำกัด เกี่ยวกับจำนวนครั้งที่คุณสามารถอัปเดต EEPROM โดยทั่วไปจะสูงกว่ามาก (บางครั้งอาจมีลำดับความสำคัญมากกว่า) จำนวนครั้งที่คุณสามารถอัปเดตแฟลชได้ ฉันควรจะบอกว่าในคำตอบของฉันและจะอัปเดต หมายเลขที่คุณยกมานั้นรับประกันขั้นต่ำโดยผู้ผลิตชิป ฉันทำการทดสอบบางครั้งครั้งเดียวกับชิปที่มี spec'ed สำหรับการเขียน 100,000 ครั้งและไปได้ดีกว่า 500,000 รายการก่อนที่จะตรวจพบข้อผิดพลาด
tcrosley

1
@ Jasser ใช่มันยากกว่านิดหน่อยในการตั้งค่าข้อมูลในแฟลช นอกจากนี้ตามที่กล่าวไว้ในการอัปเดตคำตอบของฉันคุณสามารถลบและตั้งโปรแกรม EEPROM ซ้ำอีกหลายครั้ง (โดยทั่วไปคือ 10x) กว่าแฟลช
tcrosley

4

ฉันจะเพิ่มข้อมูลเพิ่มเติมลงในคำตอบที่ยอดเยี่ยมโดย @tcrosley

ATmega16 นำสถาปัตยกรรม Harvardมาใช้เช่นโครงสร้างระบบที่หน่วยความจำข้อมูลแยกออกจากหน่วยความจำโปรแกรม การอ้างถึงย่อหน้าที่เกี่ยวข้องจากแผ่นข้อมูล Atmega16 (หน้า 8):

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

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

ดังนั้นหน่วยความจำแฟลชจะใช้เป็นหน่วยความจำของโปรแกรมในขณะที่หน่วยความจำข้อมูลจะถูกแบ่งระหว่าง SRAM (สำหรับข้อมูลชั่วคราวเช่น call function stack และ heap - หากคุณกำลังเขียนโปรแกรมใน C เป็นต้น) และ EEPROM (สำหรับที่เก็บถาวร) .

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.