ฉันจะพูดคุยเกี่ยวกับการเขียนโปรแกรมหน่วยความจำแฟลช แต่วัสดุจำนวนมากจะคล้ายกับ EEPROMs (ROM ที่สามารถลบด้วยระบบไฟฟ้าได้) เนื่องจากหน่วยความจำแฟลชมาจาก EEPROM ในช่วงกลางปี 1980 ตามที่อธิบายไว้ด้านล่างจากสถานะทางกายภาพสถานะเริ่มต้นคือ 1 แต่ที่สำคัญกว่าฉันจะอธิบายว่าทำไมมีเป็นรัฐเริ่มต้น - คุณสามารถไม่เพียง แต่พลโปรแกรมด้านบนของสิ่งที่เป็นโปรแกรมที่มีอยู่แล้วจากครั้งสุดท้าย
NOR แฟลชได้รับเลือกเกือบทุกครั้งสำหรับโปรแกรมแฟลชเนื่องจากอินเตอร์เฟสเหมาะที่สุดสำหรับการวางข้อมูลในแผนที่หน่วยความจำของไมโครคอนโทรลเลอร์ - ที่อยู่เต็มและข้อมูลบัสจำลองเลียนแบบ RAM และอนุญาตให้เข้าถึงแบบสุ่มไปยังตำแหน่งใดก็ได้ ข้อมูลสามารถอ่านได้ทีละหนึ่งคำโดยที่คำนั้นถูกกำหนดเป็นความกว้างข้อมูลของไมโครคอนโทรลเลอร์ซึ่งโดยทั่วไปคือ 8, 16 หรือ 32 บิต แฟลช NAND ตรงกันข้ามได้รับการพัฒนาเพื่อแทนที่ฮาร์ดไดรฟ์และทำงานตามลำดับ
อย่างไรก็ตามการเขียนโปรแกรมทำให้ซับซ้อนขึ้นเล็กน้อย สถานะเริ่มต้นสำหรับแฟลช NOR และหน่วยความจำที่ไม่ลบเลือนอื่น ๆ เช่นแฟลช NAND, EEPROM และแม้แต่ EPROM เป็นตรรกะ 1 คุณไม่สามารถตั้งโปรแกรม 1 ลงในอุปกรณ์เหล่านี้ได้คุณสามารถตั้งโปรแกรมเฉพาะ 0 เท่านั้น ตัวอย่างเช่นถ้าคุณมีไบต์ที่มี 0x0123 และคุณต้องการเปลี่ยนเป็น 0x3210 คุณไม่สามารถทำได้โดยตรงเช่นเขียนทับไบต์ใน RAM
แต่จะต้องลบบิตในหน่วยความจำแทนซึ่งทำให้พวกมันอยู่ในสถานะ 1 ที่เป็นค่าเริ่มต้น สิ่งนี้สามารถทำได้ในบล็อกไม่ใช่คำพูด ใน Microchip PIC32 ซึ่งฉันได้ทำงานด้วยเมื่อเร็ว ๆ นี้ขนาดบล็อกขั้นต่ำที่สามารถลบได้คือ 4096 ไบต์ ดังนั้นหากคุณต้องการเปลี่ยนเพียงหนึ่งคำ (32 บิต) คุณจะต้องอ่านหน่วยความจำ 4K ลบบล็อกจากนั้นเขียนหน่วยความจำ 4K กลับสู่แฟลช แต่รวมถึงค่า 32 บิตใหม่ตามต้องการ การลบนี้อาจใช้เวลาสักครู่ - ส่วนที่ดีของวินาที
ต่อไปนี้เป็นรูปภาพของเซลล์หน่วยความจำแฟลช แฟลชจัดเก็บข้อมูลโดยการลบหรือวางอิเล็กตรอนบนประตูลอย เมื่ออิเล็กตรอนอยู่บนเกทลอยไม่มีกระแสไหลผ่านทรานซิสเตอร์ซึ่งระบุว่า 0 เมื่ออิเล็กตรอนถูกลบออกจากเกทลอยทรานซิสเตอร์จะเริ่มดำเนินการโดยระบุว่า 1 (นี่คือการประชุม - มันอาจจะเป็น วิธีอื่น แต่ต้องการอินเวอร์เตอร์ในทุกบรรทัดข้อมูล)
ลบการดำเนินการ สถานะเริ่มต้นของเซลล์หน่วยความจำแฟลช (เซลล์แฟลช NOR ระดับเดียว) คือ 1 เพราะประตูลอยไม่มีค่าใช้จ่ายติดลบ การลบเซลล์หน่วยความจำแฟลช (รีเซ็ตเป็น 1) สามารถทำได้โดยการใช้แรงดันไฟฟ้าข้ามแหล่งจ่ายและประตูควบคุม (บรรทัดคำ) แรงดันไฟฟ้าสามารถอยู่ในช่วง -9V ถึง -12V และยังใช้ประมาณ 6V กับแหล่งที่มา อิเล็กตรอนในประตูลอยจะถูกดึงออกมาและโอนไปยังแหล่งที่มาโดยควอนตัมอุโมงค์ กล่าวอีกนัยหนึ่งอุโมงค์อิเล็กตรอนจากประตูเลื่อนไปยังแหล่งกำเนิดและสารตั้งต้น
เนื่องจากการลบจะใช้แรงดันไฟฟ้าสูงดังนั้นการลบในบล็อกจึงต้องใช้พื้นที่ตายน้อยกว่า ดังนั้นแรงดันไฟฟ้าสามารถใช้ได้กับทรานซิสเตอร์ทั้งแถวในแต่ละครั้งเท่านั้น
สำหรับการเขียนเซลล์แฟลช NOR สามารถตั้งโปรแกรมหรือตั้งค่าเป็น 0 ตามขั้นตอนต่อไปนี้ ในขณะที่เขียนแรงดันไฟฟ้าสูงประมาณ 12V จะถูกนำไปใช้กับประตูควบคุม (บรรทัดคำ) หากแรงดันสูงประมาณ 7V ถูกนำไปใช้กับบิต Line (เทอร์มินัลระบาย), 0 จะถูกเก็บไว้ในเซลล์ ตอนนี้ช่องเปิดแล้วดังนั้นอิเล็กตรอนสามารถไหลจากแหล่งที่มาถึงท่อระบายน้ำ กระแสไฟฟ้าที่ระบายออกมานั้นสูงพอที่จะทำให้อิเล็กตรอนพลังงานสูงบางส่วนกระโดดผ่านชั้นฉนวนไปยังประตูลอยผ่านกระบวนการที่เรียกว่าการฉีดอิเล็กตรอนร้อน
สำหรับการอ่านแรงดันประมาณ 5V จะถูกนำไปใช้กับประตูควบคุมและประมาณ 1V กับท่อระบายน้ำ สถานะของเซลล์หน่วยความจำนั้นแตกต่างกันไปตามกระแสที่ไหลระหว่างท่อระบายน้ำและแหล่งกำเนิด
อายุการใช้งานของหน่วยความจำแบบไม่ลบเลือนนั้นวัดจากการลบรอบ ข้อเสียของ NOR คือจำนวนรอบการลบประมาณ 1/10 ของหน่วยความจำ NAND PIC32 หลายรุ่นอนุญาตให้อัปเดตหน่วยความจำแฟลชได้ 1,000 ครั้งลดน้อยลงจากนั้นลบ 100,000 รอบการทำงานปกติสำหรับ EEPROM
ดังนั้นจึงไม่สำคัญนักหากผู้ออกแบบทำให้สถานะเริ่มต้นคือ 1 หรือ 0 (พวกเขาเลือกค่าที่อนุญาตให้ใช้งานได้ง่ายที่สุด) สิ่งสำคัญคือต้องลบบล็อกของแฟลชก่อน (ซึ่งต้องใช้เวลา) จากนั้นทำการ reprogram บล็อกทั้งหมด (แม้ว่าจะมีการเปลี่ยนแปลงคำเดียว (ซึ่งต้องใช้แรมจำนวนมาก)
การลบบล็อกนี้ของอุปกรณ์จะกลับไปที่ EPROMs แรก (ROM ที่ลบข้อมูลได้แบบโปรแกรมได้) ซึ่งดำเนินการ EEPROMs รหัสถูกตั้งโปรแกรมไว้ในชิป (เช่น 16KB 27128) และวางไว้ในซ็อกเก็ต ชิปเหล่านี้มีหน้าต่างเล็ก ๆ น้อย ๆ อยู่ด้านบนซึ่งอนุญาตให้แสงส่องไปที่แม่พิมพ์ เมื่อต้องเปลี่ยนโปรแกรมชิปจะถูกนำไปวางไว้ในยางลบ UV เป็นเวลา 20 นาทีหรือมากกว่านั้นซึ่งจะลบชิปทั้งหมด จากนั้นชิปจะถูกโปรแกรมด้วยโปรแกรมใหม่
EEPROM บางตัวต้องการการลบบล็อกหน่วยความจำก่อนการโปรแกรม อื่น ๆ อนุญาตให้เขียนไบต์ได้ครั้งละหนึ่งตัว (ตัวควบคุม EEPROM จะลบไบต์ก่อนแล้วจึงโปรแกรม)