ต้องการ IC หน่วยความจำแบบไม่ลบเลือนที่มีความสามารถในการอ่าน / เขียนไม่ จำกัด


12

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

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

อีกทั้งการเกิดเหตุการณ์ที่เพิ่มจำนวนขึ้นบ่อยครั้งดังนั้นจึงมีการเขียนจำนวนมากไปยังหน่วยความจำดังนั้นฉันลังเลที่จะใช้ EEPROM

อินเทอร์เฟซการสื่อสารที่ต้องการจะเป็น I2C แต่ทางเลือกอื่น ๆ ยินดีต้อนรับ

ด้านบนของหัวของฉันฉันจินตนาการถึง SRAM หน่วยความจำระเหยพลังงานต่ำ IC พร้อมตัวเลือกในการใช้พลังงานจากแบตเตอรี่สำรองเช่นเซลล์เหรียญเมื่อปิดเครื่อง


15
คุณต้องการ F-RAM
ครอบครัว

3
... และคำถามคืออะไร
นมเปรี้ยว

2
คุณจะทำอย่างไรถ้าพลังงานเริ่มต้นล้มเหลวในระหว่างการดำเนินการเขียน I2C คุณจะแน่ใจได้อย่างไรว่าคุณจะไม่ทำให้การนับเสียหาย ปัญหานี้ยากกว่าที่คุณคิดยกเว้นว่าคุณสามารถตรวจจับการสูญเสียพลังงานที่ใกล้เข้ามาและในกรณีนี้คุณสามารถคัดลอกตัวนับ RAM ของคุณไปยัง EEPROM ทั่วไป
Elliot Alderson

5
'บ่อย' เป็นอย่างไรบ่อยครั้ง? สำหรับตัวแปรเดี่ยวแม้แต่ EEPROM ขนาดเล็กจะมีความทนทานสูงมาก คุณจะต้องสำรองข้อมูล x นับครั้งสุดท้ายในกรณีที่การเขียนครั้งล่าสุดของคุณล้มเหลว
hekete

ฉันจำความทรงจำที่ไม่ใช่แบบแฟลช EE แบบเดิม ๆ ได้สัญญาไว้ 100 ล้านรอบ
analogsystemsrf

คำตอบ:


21

หน่วยความจำชนิดไม่ลบเลือนสามประเภทตรงกับความต้องการของคุณตามขนาดที่มี:

  • สวมใส่ EEPROM / FLASH ที่ปรับระดับแล้ว
  • แบตเตอรี่สำรอง SRAM
  • FRAM

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


1
ขอบคุณ ฉันตรวจสอบ FRAM ตามที่แนะนำโดย @Hearth และฉันคิดว่าเหมาะสมที่สุดกับความต้องการของฉัน เพียงแค่หวังว่าฉันจะพบตัวแปร I2C นอกจากนี้ตัวแปรแอคคูมูเลเตอร์จะต้องมีความยาว 32 บิต ดังนั้นขนาดไม่ใช่เรื่องใหญ่จริงๆ
Cerezo

3
@GH_eng ชิปI²C FRAM เป็นหน่วยความจำไปมันค่อนข้างแพง (เป็นเทคโนโลยีที่ค่อนข้างใหม่) แต่สำหรับสิ่งที่คุณต้องการทางเลือกอาจจะมีค่าใช้จ่ายมากขึ้น
ครอบครัว

3
นอกจากนี้ยังมี MRAM
DKNguyen

1
@GH_eng The TI MSP430FR * สร้างขึ้นใน FRAM ฉันคิดว่า แม้ว่าคุณอาจถูก จำกัด อยู่กับ MCU ของคุณอยู่แล้ว
detly

21

นี่คือสิ่งที่ฉันทำกับผลิตภัณฑ์ที่ยังอยู่ในการผลิตจำนวนมาก

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

ปรากฎว่ามีเวลาประมาณ 10-20ms ระหว่างทริกเกอร์แรงดันไฟฟ้าต่ำและเวลาที่ IC จัดการพลังงานเตะเข้าและปิดทุกอย่างลง (อย่างเป็นระเบียบ) ทำงานได้หรือไม่ขึ้นอยู่กับการจัดเก็บพลังงานในแหล่งจ่ายไฟของคุณ แต่แม้แต่ตัวจ่ายไฟขนาดเล็กก็สามารถทำให้การทำงานช้าลงพอที่คุณจะสามารถเขียนชุดข้อมูลขนาดเล็กได้อย่างน่าเชื่อถือ


1
@Hilmer มันช่างฉลาดจริงๆ! ดีแล้วที่รู้. น่าจะเป็น CAP อ่างเก็บน้ำที่วางไว้ก่อนที่จะป้อน EEPROM และ MCU จะเพิ่มเวลาแฝงต่อไป ข้อเสียเพียงอย่างเดียวน่าจะเป็นส่วนประกอบเพิ่มเติมใน PCB
Cerezo

ในเวลานั้นมันเป็นทางออกที่ถูกที่สุดอย่างชัดเจนรวมถึงอสังหาริมทรัพย์ PCB แน่นอนมันขึ้นอยู่กับข้อมูลเฉพาะของคุณ: เรามีอะไหล่มีสาย GPIO สำรองดังนั้นนั่นฟรี ส่วนที่เหลือเป็นเพียงแค่วุ้นถั่ว (ชิ้นส่วน SMD ราคาไม่แพงเล็ก ๆ )
ฮิลมาร์

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

@ เสา: นั่นอาจจะมีราคาแพงเกินไปและคุณอาจจะดีกว่าด้วยโซลูชันทางเลือก
Hilmar

6

Toggle MRAM (magnetoresistive RAM) อ้างว่ามีความทนทานในการเขียนที่ไม่มีที่สิ้นสุดอย่างมีประสิทธิภาพ (พวกเขาไม่ได้ตระหนักถึงกลไกใด ๆ ที่จะทำให้การเขียนเสียไป) ฉันไม่ได้ตระหนักถึงชิปดังกล่าวที่พูด I2C ดังนั้นคุณต้องชำระ SPI นี่คือส่วนหนึ่งดังกล่าว: https://www.digikey.com/product-detail/en/everspin-technologies-inc/MR25H256ACDF/819-1064-ND/8286370


5

ดูเหมือนคุณจะสามารถใช้ชิปหรือโมดูลนาฬิกา RTC เหล่านี้มีแบตเตอรี่สำรอง SRAM เสริมสำหรับข้อมูลผู้ใช้และมาพร้อมกับอินเตอร์เฟซ I2C

หรือเพียงแค่ใช้ MCU พร้อมแบตเตอรี่สำรอง SRAM เพื่อเริ่มต้นดังนั้นจึงไม่จำเป็นต้องมีส่วนประกอบภายนอก


ตัวอย่างเช่น DS1307, DS1338
filo

1
น่าเสียดายที่ RTCC ที่ใช้ในบอร์ดเป็น DS3231M การกำหนดค่าพินเดียวกันกับ DS1307 RTCC แต่ไม่มีการลงทะเบียนข้อมูลอะไหล่ภายใน เลือกสิ่งนี้เพราะมีออสซิลเลเตอร์ในตัว ฉันรู้สึกถึงการทบทวนวงจรแบบสมบูรณ์ :(!
Cerezo

5

Cypress ทำให้สิ่งที่พวกเขาเรียกNonvolatile SRAM เป็น SRAM มาตรฐานที่สำรองข้อมูลโดยอัตโนมัติเมื่อไฟฟ้าดับ เนื่องจากมันเขียนไปยังหน่วยความจำแบบไม่ลบเลือนเมื่อเกิดไฟฟ้าขัดข้องจึงมีความทนทานมากกว่า มันมาในรุ่นอนุกรมและขนาน อาจน้อยไปหน่อยเพราะขนาดที่เล็กที่สุดคือ 64Kb

ภายใต้การทำงานปกติ nvSRAM ทำงานเหมือน SRAM แบบอะซิงโครนัสทั่วไปโดยใช้สัญญาณมาตรฐานและเวลา nvSRAM ทำการสุ่มเข้าถึงแบบอ่านและเขียนโดยเร็วเท่าที่ 20 ns

เมื่อไฟฟ้าขัดข้อง nvSRAM จะบันทึกสำเนาของข้อมูล SRAM ลงในหน่วยความจำแบบไม่ลบเลือนโดยอัตโนมัติซึ่งข้อมูลได้รับการปกป้องมานานกว่า 20 ปี การถ่ายโอนระหว่างหน่วยความจำ SRAM และหน่วยความจำไม่ลบนั้นเป็นแบบขนานอย่างสมบูรณ์ช่วยให้การดำเนินการเสร็จสมบูรณ์ใน 8 ms หรือน้อยกว่าโดยไม่มีการแทรกแซงของผู้ใช้

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

แผนภาพบล็อก NVSRAM



สิ่งนั้นยอดเยี่ยม!
Tomachi

4

สำหรับตัวแปรไบต์เดียว 4, EEPROM จะดีโดยสิ้นเชิง

สมมติว่าคุณเขียนถึงมันหนึ่งครั้งต่อวินาทีและคุณมี EEPROM ขนาด 32Kb แบบทั่วไปและเราไปด้วยความอดทนที่ยาวนานถึง 100,000 รอบการเขียน

คุณสามารถเขียน 4 ไบต์ 8000 ครั้งก่อนที่คุณจะต้องล้าง นั่นควรเป็น 800 ล้านเท่าที่คุณสามารถเขียนได้แม้ใช้การประมาณแบบอนุรักษ์นิยม

ขณะนี้มีเพียง 31.5 ล้านวินาทีต่อปีดังนั้นหนึ่งครั้งต่อวินาทีจึงใช้เวลา 25 ปีในการประเมินความอดทน EEPROM ต่ำสุด


1
แน่นอนการเขียนไปยัง EEPROM ค่อนข้างช้า (มิลลิวินาที) ดังนั้น "การเขียนบ่อย" ของ OP อาจต้องใช้วิธีแก้ปัญหาที่เร็วกว่า ... คุณคิดว่าหนึ่งครั้งต่อวินาที แต่ OP ทิ้งเราไว้ในที่มืดในจุดนั้น และ "การล้าง" EEPROM จะใช้เวลานานมาก (วินาที) แน่นอน ฉันคิดว่าคุณสามารถเขียนทับค่าเก่าแทนการลบ แต่ถ้าค่าการนับไม่เรียงตามลำดับอย่างเคร่งครัดมันยากที่จะคิดออกว่าค่าใดเป็นค่าสุดท้ายที่เขียน
Elliot Alderson

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

0

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

คำแนะนำของฉันคือเก็บค่า 4 ชุด ด้วยวิธีนี้แม้ว่าการเขียนจะถูกขัดจังหวะการเขียนสองรายการจะจับคู่เสมอ

FRAM หรือคล้ายกันอาจเป็นตัวเลือกที่ดีที่สุด

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