Perlu IC memori non-volatile dengan kemampuan operasi baca / tulis yang hampir tak terbatas

12

Saya membutuhkan solusi memori yang akan digunakan untuk melacak akumulasi jumlah pada proyek berbasis mikro-controller.

Dengan akumulasi jumlah, maksud saya mengatakan bahwa mikrokontroler menggunakan lokasi memori ini untuk menghitung kejadian suatu peristiwa. Hitungan perlu dipertahankan selama pemadaman listrik, karenanya kebutuhan untuk memori NON-VOLATILE.

Juga terjadinya acara peningkatan hitungan sering maka akan ada banyak menulis ke memori maka saya ragu untuk menggunakan EEPROM.

Antarmuka komunikasi yang disukai adalah I2C, tetapi alternatif lain dipersilakan.

Dari atas kepala saya, saya membayangkan IC memori volatile daya rendah SRAM dengan opsi yang didukung oleh baterai cadangan seperti sel koin pada power-down.

Cerezo
sumber
15
Anda menginginkan F-RAM.
Hearth
3
... dan apa pertanyaannya?
Curd
2
Apa yang akan Anda lakukan jika daya mulai gagal di tengah operasi penulisan I2C? Bagaimana Anda bisa yakin tidak akan merusak perhitungan? Masalah ini lebih sulit daripada yang Anda pikirkan, kecuali jika Anda dapat mendeteksi kehilangan daya dalam waktu dekat, dan dalam hal ini Anda hanya dapat menyalin penghitung berbasis RAM Anda ke EEPROM pada umumnya.
Elliot Alderson
5
Seberapa sering 'sering'? Untuk variabel tunggal, bahkan EEPROM berukuran kecil akan memiliki daya tahan yang sangat tinggi. Anda juga akan memiliki cadangan x hitungan terakhir jika penulisan terakhir Anda gagal.
hekete
Saya ingat beberapa kenangan EE non-FLASH gaya lama yang dijanjikan 100 juta siklus.
analogsystemsrf

Jawaban:

21

Tiga jenis memori non-volatile sesuai dengan kebutuhan Anda, sesuai dengan ukuran yang tersedia:

  • Kenakan EEPROM / FLASH yang diratakan.
  • Baterai cadangan SRAM.
  • FRAM.

Dari segi biaya, FRAM adalah yang terbaik. Yang Anda butuhkan ada di dalam chip, termasuk kapasitor cadangan untuk menyelesaikan penulisan. Namun ukuran yang tersedia rendah.
Baterai cadangan SRAM besar dan berbahan material.
Weared EEPROM membutuhkan firmware untuk menangani leveling keausan.

Jeroen3
sumber
1
Terima kasih. Saya memeriksa FRAM seperti yang disarankan oleh @Hearth dan saya pikir itu paling sesuai dengan kebutuhan saya. Semoga saja saya dapat menemukan varian I2C. Juga variabel akumulator hanya perlu 32 bit. Jadi ukuran sebenarnya bukan masalah besar.
Cerezo
3
@GH_eng I²C FRAM chips . Seperti memori berjalan itu cukup mahal (menjadi teknologi yang relatif baru), tetapi untuk apa yang Anda butuhkan alternatif mungkin akan lebih mahal.
Hearth
3
Ada juga MRAM
DKNguyen
1
@ GH_eng TI MSP430FR * telah dibangun di FRAM saya pikir. Meskipun Anda mungkin sudah dibatasi MCU Anda.
Detly
21

Inilah yang saya lakukan pada produk yang masih dalam produksi massal.

  • Simpan semua parameter dan penghitung di RAM
  • Sambungkan saluran interupsi ke detektor ambang batas tegangan catu daya
  • Ketika interupsi terpicu, matikan semua yang menghabiskan daya (sebagian besar periferal, LED, dll.) Dan cadangkan semua RAM ke flash.

Ternyata ada sekitar 10-20ms waktu antara pemicu tegangan rendah dan waktu ketika IC manajemen daya menendang dan mematikan semuanya (secara teratur). Apakah ini berfungsi atau tidak, tergantung pada penyimpanan energi dalam catu daya Anda, tetapi bahkan pasokan kecil dapat memperlambatnya sehingga Anda dapat menulis kumpulan data kecil dengan andal.

Hilmar
sumber
1
@ Hummer Itu cukup pintar! Senang mendengarnya. Mungkin CAP reservoir ditempatkan sebelum input EEPROM dan MCU akan semakin meningkatkan latensi waktu. Satunya downside adalah komponen lebih mungkin pada PCB.
Cerezo
Pada saat itu jelas solusi termurah termasuk real estat PCB. Tentu saja itu tergantung pada spesifikasi Anda: kami memiliki cadangan memiliki garis GPIO cadangan, jadi itu gratis. Sisanya hanya beberapa jelly bean (bagian SMD murah kecil)
Hilmar
Anda mungkin dapat meregangkan 10-20 ms jika Anda benar-benar harus melakukannya dengan meletakkan elcap dalam persediaan cukup besar untuk membantu dan tidak terlalu besar untuk memiliki efek samping yang menyusahkan.
Tiang
@ Mr: itu mungkin akan terlalu mahal dan Anda mungkin lebih baik dengan solusi alternatif
Hilmar
5

Kedengarannya seperti Anda bisa menggunakan chip jam RTC atau modul. Ini memiliki cadangan baterai, SRAM tambahan untuk data pengguna dan dilengkapi dengan antarmuka I2C.

Atau cukup gunakan MCU dengan SRAM yang didukung baterai untuk memulai, sehingga tidak diperlukan komponen eksternal.

Hanya aku
sumber
Misalnya DS1307, DS1338.
filo
1
Sayangnya, RTCC yang digunakan di papan adalah DS3231M. Konfigurasi pin yang sama seperti DS1307 RTCC tetapi tanpa register data cadangan internal. Memilih ini karena osilator terintegrasi. Saya merasakan ulasan rangkaian lengkap :(!
Cerezo
5

Cypress membuat apa yang mereka sebut SRAM Nonvolatile . Ini adalah SRAM standar yang secara otomatis mencadangkan ketika listrik mati. Karena hanya menulis ke memori non-volatile pada kegagalan daya, ia berpotensi memiliki daya tahan yang jauh lebih besar. Muncul dalam versi serial dan paralel. Mungkin agak berlebihan, karena yang terkecil adalah 64Kb.

Dalam operasi normal, nvSRAM berperilaku seperti SRAM asinkron konvensional menggunakan sinyal dan timing standar. nvSRAM melakukan akses acak paralel membaca dan menulis secepat 20 ns.

Pada kegagalan daya, nvSRAM secara otomatis menyimpan salinan data SRAM ke dalam memori non-volatil, di mana data dilindungi selama lebih dari 20 tahun. Transfer antara SRAM dan memori nonvolatile sepenuhnya paralel, memungkinkan operasi untuk menyelesaikan dalam 8 ms atau kurang, tanpa campur tangan pengguna.

Pada power-up, nvSRAM mengembalikan data kembali ke SRAM dan operasi sistem berlanjut dari tempat sebelumnya. nvSRAM juga menyediakan perangkat lunak yang dikendalikan pengguna STORE dan perintah inisiasi RECALL, serta perintah STORE perangkat keras yang dikontrol pengguna di sebagian besar versi.

Diagram Blok NVSRAM

crj11
sumber
hal itu brilian!
Tomachi
4

Untuk variabel 4 byte tunggal, EEPROM akan baik-baik saja.

Katakanlah Anda menulisnya sekali per detik dan Anda memiliki EEPROM 32Kb yang khas dan kami menggunakan daya tahan konservatif 100.000 siklus penulisan.

Anda dapat menulis 4 byte 8000 kali sebelum Anda perlu menghapusnya. Jadi itu harus 800 juta kali Anda dapat menulisnya bahkan menggunakan perkiraan konservatif.

Sekarang hanya ada 31,5 juta detik dalam satu tahun, jadi pada satu tulis per detik, dibutuhkan 25 tahun untuk mencapai perkiraan daya tahan EEPROM yang rendah.

hekete
sumber
1
Tentu saja, menulis ke EEPROM cukup lambat (milidetik) sehingga "sering menulis" OP mungkin membutuhkan solusi yang lebih cepat ... Anda mengasumsikan sekali per detik tetapi OP meninggalkan kami dalam kegelapan pada titik itu. Dan "membersihkan" EEPROM akan memakan waktu (detik) yang sangat, sangat lama. Saya kira Anda hanya bisa menimpa nilai-nilai lama daripada menghapus, tetapi jika nilai-nilai hitung tidak benar-benar berurutan akan sulit untuk mencari tahu nilai mana yang merupakan nilai terakhir yang ditulis.
Elliot Alderson
@ElliotAlderson Anda mungkin bisa berasumsi berapa nilai tertinggi yang pernah ada, akan menjadi yang terakhir. Jelas tidak tahu apakah sekali per detik dianggap sebagai 'sering' atau tidak dalam kasus ini. Hanya menunjukkan bahwa untuk frekuensi tulis yang terpisah lebih dari 1 detik, EEPROM masih sepenuhnya layak.
hekete
0

Ada banyak opsi di sini, tetapi masalah sebenarnya adalah menghentikan data agar tidak rusak. Kehilangan daya saat menulis dapat merusak data. I2C adalah pilihan yang baik untuk menghindari ini, karena misalnya dengan SPI Anda dapat menemukan bahwa penulisan muncul (dari sudut pandang memori) untuk menyelesaikan setengah jalan melalui pembaruan katakanlah 4 byte kata 32 bit. I2C sedikit lebih kuat, tetapi hanya sedikit.

Saran saya adalah menyimpan 4 salinan dari nilai tersebut. Dengan cara itu bahkan jika tulisan terganggu, dua akan selalu cocok.

FRAM atau sejenisnya mungkin merupakan pilihan terbaik.

pengguna
sumber