หากคุณเป็นผู้ผลิตและคุณกำลังทำโครงการ DIY ที่คุณต้องทำงานกับหน่วยความจำแน่นอนว่าคุณรู้อยู่แล้วว่าความทรงจำต่างๆที่ Arduino รวมเข้าด้วยกันทำงานอย่างไรเช่นแฟลช (ไม่ลบเลือนที่เก็บร่างและโปรแกรมโหลดบูต) SRAM (หน่วยความจำที่รวดเร็วและลบเลือนโดยที่ตัวแปรของโปรแกรมยังคงอยู่ระหว่างการประมวลผล) และ EEPROM (ไม่ลบเลือนและสามารถใช้เพื่อจัดเก็บข้อมูลการรีบูต)
นอกจาก EEPROM ที่รวมอยู่ใน Arduino แล้วคุณยังสามารถใช้ชิปภายนอกของ ความทรงจำแบบนี้ในขณะที่ อีกหนึ่งองค์ประกอบ. พวกเขาไม่ซับซ้อนในการทำความเข้าใจหรือโต้ตอบกับพวกเขาเพื่อสร้างการเข้าถึง (การเขียนและการอ่าน) หรือการอัปเดตข้อมูลที่จัดเก็บ ที่นี่คุณจะพบทุกสิ่งที่คุณจำเป็นต้องรู้เพื่อเริ่มทำงานกับความทรงจำประเภทนี้ ...
EEPROM คืออะไร?
La EEPROM (หน่วยความจำเฉพาะสีแดงที่ตั้งโปรแกรมได้ด้วยไฟฟ้าที่ลบได้) เป็นหน่วยความจำ ROM ประเภทหนึ่งนั่นคือหน่วยความจำแบบไม่ลบเลือนซึ่งข้อมูลจะถูกจัดเก็บอย่างถาวรแม้ว่าแหล่งจ่ายไฟจะถูกลบออกไปก็ตาม นั่นทำให้พวกเขาอยู่อีกด้านหนึ่งของ RAM (Random Access Memory) ซึ่งจะสูญเสียข้อมูลทั้งหมดเมื่อไม่ได้ใช้พลังงาน
ในกรณีของ EEPROM ไม่ใช่หน่วยความจำเช่น ROM ซึ่งข้อมูลถูกเขียนและไม่สามารถเปลี่ยนแปลงได้อีกต่อไป EEPROM เช่นแฟลช ยอมรับว่ามีการเปลี่ยนแปลง ตามความจำเป็น. นั่นคือข้อมูลบางส่วนสามารถจัดเก็บและลบเพื่อจัดเก็บข้อมูลที่แตกต่างกันได้
ในความเป็นจริงตามคำย่อระบุว่าเป็นไฟล์ หน่วยความจำที่ลบได้ด้วยไฟฟ้า (ลบได้ด้วยไฟฟ้า) สำหรับการตั้งโปรแกรมใหม่ สิ่งนี้แตกต่างจาก ROM ประเภทอื่นซึ่งสามารถลบได้เช่นเดียวกับ EPROM แต่ในกรณีนี้จะไม่ใช้กระแสไฟฟ้าเพื่อลบเซลล์หน่วยความจำ แต่จะมี "หน้าต่าง" ควอตซ์บนชิปเพื่อให้สามารถฉายแสงยูวีได้ด้วย ซึ่งมันถูกลบ
ลักษณะของ EPROM มันทำให้พวกเขารู้สึกไม่สบายใจพอสมควรต้องฉายรังสีเหล่านั้นเพื่อลบล้างพวกมัน และที่เลวร้ายที่สุดพวกมันอาจถูกลบโดยไม่ได้ตั้งใจหากสัมผัสกับรังสีชนิดนี้ ใน EEPROMs อนุญาตให้ทำผ่านแรงดันไฟฟ้าได้อย่างสะดวกสบายและปลอดภัยยิ่งขึ้น
โครงสร้างภายใน
เพื่อให้ EEPROM ทำงานได้จำเป็นต้องมีเซลล์หน่วยความจำโดยเฉพาะ พวกเขาสร้างขึ้นโดยใช้ทรานซิสเตอร์ชนิด MOS แต่มีประตูลอยเมื่อเทียบกับ MOSFET แบบเดิม ทรานซิสเตอร์ใหม่เหล่านี้มีโครงสร้างที่เรียกว่า มอสและสถานะปกติจะถูกตัดออกและเอาต์พุตจะให้ตรรกะ 1 เสมอ
เซลล์ EEPROM เหล่านี้สามารถอ่านได้ไม่ จำกัด จำนวนครั้ง แต่มีข้อ จำกัด ใน จำนวนครั้งที่สามารถลบและตั้งโปรแกรมใหม่ได้เช่นเดียวกับที่เกิดขึ้นกับคนอื่น ๆ อีกมากมาย สิ่งนี้เกิดขึ้นกับแฟลชด้วยซึ่งเป็นสาเหตุที่มีการพูดถึงความทนทานของฮาร์ดไดรฟ์ SSD ไดรฟ์ปากกาและอื่น ๆ มากมาย
ในกรณีของ SAMOS ขีด จำกัด นี้อยู่ระหว่าง 100.000 และ 1.000.000 ครั้ง. หลังจากนั้นพวกเขาจะล้มเหลว อย่างไรก็ตามโครงสร้างบางอย่างที่สร้างขึ้นโดยคนรู้จักเก่าหนึ่งในผู้ยิ่งใหญ่: ดร. Fujio Masuoka จาก Toshiba (1984) ซึ่งได้สร้างความทรงจำที่สำคัญอื่น ๆ และโครงสร้างเซมิคอนดักเตอร์ ... อย่างไรก็ตามชิปตัวแรกที่เปิดตัวใน ตลาดเป็นของ Intel ตั้งแต่ปี 1988 ซึ่งเป็น EEPROM ประเภท NOR
นอกจากนี้คุณต้องรู้ว่าหน่วยความจำประเภทนี้มักจะเชื่อมโยงกับซีพียูหรือคอนโทรลเลอร์ผ่าน รถบัส ด้วยโปรโตคอลเช่น SPI I2Cฯลฯ ในกรณีของ MCU (ไมโครคอนโทรลเลอร์) มักจะรวมอยู่ภายในเช่นเดียวกับใน DSP บางรุ่นเพื่อให้ได้ความเร็วที่มากขึ้น
ดังที่เห็นได้จากภาพด้านบนไฟล์ ทรานซิสเตอร์ SAMOS ที่สร้างเซลล์หน่วยความจำจะถูกจัดกลุ่มในกรณีนั้นเป็นคู่ เส้นหนึ่งที่ติดอยู่กับประตูของทรานซิสเตอร์บางตัวทำหน้าที่เป็นเส้นทางเลือกเพื่อทำเครื่องหมายหรือส่งสัญญาณว่าสายนั้นสำหรับการเข้าถึง (การอ่านและการเขียน) และอีกเส้นหนึ่งจะเป็นเส้นที่เก็บบิตข้อมูล (0 หรือ 1)
ทรานซิสเตอร์ถูกจัดแนวให้เข้ากับความยาวของคำที่ต้องการ (4-bit, 8-bit, 16-bit, ... ) ความจุ คุณต้องการมี EEPROM (เช่น: สามารถมีความยาวคำ 64 บิตและ 16 บรรทัด = 1024 บิตนั่นคือ 1kb)
EERPOM ทำงานอย่างไร?
อย่างที่คุณเห็นด้านข้างเพื่อดำเนินการ งานที่แตกต่างกันแรงดันไฟฟ้าของประตูแหล่งที่มาและท่อระบายน้ำของคุณต้องเป็นแบบคอนกรีต:
- ประตู 20v และ Drain ที่ 20v = การเขียนโปรแกรม (การเขียน) ของเซลล์หน่วยความจำเพื่อจัดเก็บบิตที่ต้องการ
- ประตู 0v และ Drain ที่ 20v = ล้างบิตที่เก็บไว้เพื่อให้สามารถตั้งโปรแกรมใหม่ด้วยค่าอื่นได้
- ประตูที่ 5v และระบายที่ 5v = อ่านบิตที่เก็บไว้ เนื่องจากแรงดันเกตต่ำกว่าค่าที่เขียนไว้ค่าที่เก็บไว้จะไม่ถูกเปลี่ยนแปลง สิ่งเดียวกันนี้เกิดขึ้นกับแรงดันไฟฟ้าของท่อระบายน้ำที่ต่ำกว่าบิตที่เก็บไว้จะไม่ถูกลบ
สรุป EEPROMs ใช้ไม่กี่ แรงดันไฟฟ้า "สูง" สำหรับการลบและการเขียนในขณะที่ใช้แรงดันไฟฟ้าต่ำกว่าในการอ่าน ...
ซื้อ EEPROM และใช้งานได้
STMicroelectronicsซึ่งเป็นผู้ผลิตไมโครอิเล็กทรอนิกส์ของฝรั่งเศสเป็นอันดับหนึ่งในชิป EEPROM ประเภทนี้แม้ว่าจะมีผู้ผลิตรายอื่นหลายรายเช่น Microchip ชิปเหล่านี้มักจะมีราคาค่อนข้างถูก
หากคุณตัดสินใจที่จะ ใช้ชิปตัวใดตัวหนึ่งเหล่านี้ คุณควรดูผู้ผลิตและรุ่นและมองหา แผ่นข้อมูล เพื่อดูคำแนะนำทั้งหมดของผู้ผลิตเนื่องจากอาจแตกต่างกันไป ตัวอย่างเช่นพวกเขาจะระบุแรงดันไฟฟ้าที่ใช้งานได้ pinoutฯลฯ คุณจึงสามารถกำหนดค่าโครงการของคุณได้อย่างถูกต้อง
อาจมีมากหรือน้อยขึ้นอยู่กับขนาดและรุ่น ต้นสน. แต่เพื่อให้คุณทราบว่าชิป IC 24LC512 EEPROM ทั่วไปอาจประกอบด้วย:
- พิน 1 (A0), 2 (A1) และ 3 (A3) ที่ใช้ในการกำหนดค่าคือพินสำหรับเลือก
- Pin 4 (Vss / GND) เชื่อมต่อกับกราวด์
- Pin 5 (SDA) สำหรับข้อมูลอนุกรมสำหรับการสื่อสาร I2C
- Pin 6 (SCL) สำหรับนาฬิกาสำหรับ I2C
- Pin 7 (WP) ป้องกันการเขียนหรือการป้องกันการเขียน หากเชื่อมต่อกับ GND การเขียนจะเปิดใช้งาน หากเชื่อมต่อกับ Vcc จะถูกปิดใช้งาน
- Pin 8 (Vcc) เชื่อมต่อกับแหล่งจ่ายไฟ
เป็น ข้อกำหนดทางเทคนิค ของชิปนี้:
- 512K (64 × 8)
- บัฟเฟอร์ 128 ไบต์สำหรับการเขียน
- แรงดันไฟฟ้าที่ใช้งานได้: 1.8v ถึง 5.5v
- อ่านปัจจุบัน: 40uA
- บัสสื่อสาร: I2C
- วงจรการเขียน: 5ms
- ความเข้ากันได้ของนาฬิกา: 100-400Khz
- ความทนทาน: 10.000.000 รอบ
- สามารถเรียงซ้อนได้ถึง 8 อุปกรณ์
- บรรจุภัณฑ์: กรมทรัพย์สินทางปัญญา 8 พิน SOIJ SOIC และ TSSOP
Dónde comprar
ไปยัง ซื้อชิป EEPROMคุณสามารถดูคำแนะนำเหล่านี้:
- 95040Kb ST 4 Serial SPI
- ผลิตภัณฑ์ที่ไม่พบ
- ผลิตภัณฑ์ที่ไม่พบ
- ผลิตภัณฑ์ที่ไม่พบ
- ST 24LC256 อนุกรม I2C 256Kb
- ไมโครชิป 24LC256-i / sn ซีเรียล I2C 256Kb
การใช้ Arduino EEPROM
หากคุณต้องการเริ่มทำงานกับ EEPROM คุณสามารถลองใช้ EEPROM บนบอร์ดของคุณได้ แพลตฟอร์มฮาร์ดแวร์. สามารถตั้งโปรแกรมด้วยวิธีง่ายๆในการทำความเข้าใจในระดับตรรกะและการเขียนโปรแกรมว่ามันสามารถทำงานได้อย่างไร
ตัวอย่างการบันทึกตัวแปร
//Almacenar un valor en la EEPROM #include <EEPROM.h> float sensorValue; int eepromaddress = 0; //Función para simular lectura de un sensor o pin float ReadSensor() { return 10.0f; } void setup() { } void loop() { sensorValue = ReadSensor(); //Lectura simulada del valor EEPROM.put( eepromaddress, sensorValue ); //Escritura del valor en la EEPROM eepromaddress += sizeof(float); //Apuntar a la siguiente posición a escribir if(eepromaddress >= EEPROM.length()) eepromaddress = 0; //Comprueba que no existe desbordamiento delay(30000); //Espera 30s }
ตัวอย่างการอ่านข้อมูลจาก EEPROM
//Leer una variable de coma flotante #include <EEPROM.h> struct MyStruct{ float field1; byte field2; char name[10]; }; void setup(){ float f; int eepromaddress = 0; //La lectura comienza desde la dirección 0 de la EEPROM EEPROM.get( eepromaddress, f ); Serial.print( "Dato leído: " ); Serial.println( f, 3 ); eepromaddress += sizeof(float); } void loop() { }
ตัวอย่างการอัปเดตค่ากำหนดเวลาใหม่
//Actualizar valor de la EEPROM escribiendo el dato entrante por la A0 #include <EEPROM.h> int eepromaddress = 0; void setup() { } void loop() { int val = analogRead(0) / 4; EEPROM.update(eepromaddress, val); eepromaddress += sizeof(int); if(address == EEPROM.length()) eepromaddress = 0; delay(10000); //Espera de 10 segundos }
ข้อมูลมากกว่านี้ - หลักสูตร Arduino ฟรี