Memori Flash: Apakah seluruh halaman perlu dihapus sebelum menulis hanya beberapa byte?

16

Saya harap pertanyaan yang mudah! Saya tidak menemukan jawaban pasti ...

Saya sedang menulis driver untuk chip memori flash SST25VF064C . Ini berkomunikasi melalui SPI.

Seperti semua memori flash (yang saya ketahui), perlu dihapus (semua bit = 1) sebelum dapat ditulis (bit = 0). Untuk chip ini, area terkecil yang bisa dihapus adalah 4kB.

Memori-nya dibagi menjadi 256-byte halaman. Dengan satu instruksi, saya dapat menulis di mana saja dari satu byte ke 256 byte ke halaman yang ditentukan. Saya tidak harus memulai pada batas halaman: lokasi pertama yang akan diprogram dapat berada di mana saja dalam satu halaman.

Aturan umum adalah memastikan bahwa halaman dihapus sebelum menulis ke dalamnya. Tapi, bisakah saya menulis ke halaman yang ditulis sebelumnya, jika saya menghindari area yang sudah ditulis? Sebagai contoh, katakan bahwa saya menyimpan data ke byte 0-127. Bisakah nanti saya menulis 128 byte lagi ke halaman yang sama, jika saya mulai dengan byte 128?

bitmack
sumber

Jawaban:

13

Ya, setelah setiap penghapusan, Anda dapat menggunakan sejumlah operasi terpisah untuk menulis data (mengubah bit dari 1 menjadi 0) sebelum operasi penghapusan berikutnya.

Anda bahkan dapat menulis ulang lokasi yang ditulis sebelumnya, selama Anda hanya menghapus lebih banyak bit. Ini berguna untuk menjaga hal-hal seperti alokasi bitmap.

Dave Tweed
sumber
Bagus sekali, terima kasih! Inilah yang saya cari.
bitmack
Perhatikan bahwa beberapa chip tidak suka Anda menulis byte sebelumnya setelah yang lain dari melihat berbagai lembar data, namun ini tampaknya berbeda di setiap perangkat.
Vality
1
@ Vality: Bisakah Anda memberikan contohnya?
Dave Tweed
3
@DaveTweed NXP LPC21xx dan LPC23xx MCU memiliki byte checksum untuk setiap 16 byte memori; Anda harus menulis semua 16 byte sekaligus karena checksum ditulis dalam operasi itu. Jika Anda datang kemudian dan mencoba untuk menulis nol di "baris" yang sama, nol ditulis, tetapi checksum baru ditulis di atas sebelumnya juga; kemungkinan ia memiliki 1 di mana sebelumnya memiliki 0, sehingga checksum menjadi tidak valid. Saya tidak ingat apakah MCU mengizinkan Anda membaca baris dengan checksum yang buruk. Bagaimanapun, itu akan menjadi contoh "bervariasi antar perangkat".
Guillermo Prandi
1
"Sejumlah operasi terpisah untuk menulis ... operasi hapus berikutnya." Perhatikan bahwa beberapa bagian, terutama memori flash yang disematkan di MCU, akan menyatakan jumlah penulisan maksimum sebelum penghapusan diperlukan. Agaknya melanggar batas ini akan berisiko merusak area memori lain, jadi penting untuk diperhatikan batas-batas tersebut.
ajb
5

dapatkah saya menulis ke halaman yang ditulis sebelumnya, jika saya menghindari area yang sudah ditulis?

Jika saya mengerti hal. 16 dari lembar data dengan benar, dikatakan: Dengan chip khusus ini, Anda tidak boleh menulis ke halaman yang ditulis sebelumnya, bahkan jika Anda menghindari area yang sudah ditulis.

detail

The SST25VF064C chip flash memori datasheet pada p. 16 mengatakan "Halaman-Program instruksi program hingga 256 byte data di memori. Alamat halaman yang dipilih harus dalam keadaan terhapus (FFH) sebelum memulai operasi Page-Program."

Karena itu saya berasumsi bahwa "Seluruh halaman yang dipilih harus dalam keadaan terhapus (setiap byte pada halaman FFh) sebelum memulai operasi Page-Program." Apakah SST atau Microchip merilis dokumentasi yang mengklarifikasi kalimat yang mendua yang membingungkan ini?

Dalam pengalaman saya, produsen semua chip flash MLC dan beberapa chip flash SLC baru mengamanatkan bahwa begitu sebuah halaman telah ditulis, halaman tersebut harus dihapus sebelum halaman itu ditulis lagi, bahkan jika Anda hanya ingin mengubah 1 bit menjadi sebuah 0 bit. (Ini disebut "aturan menulis-sekali" dalam artikel YAFFS .)

Dalam pengalaman saya, semua chip flash yang lebih lama memungkinkan Anda untuk mengubah 1 bit menjadi 0 bit tanpa siklus hapus, bahkan jika bit itu ada di halaman atau bahkan byte yang sudah memiliki bit lain yang diprogram ke nol - a halaman flash dapat diprogram beberapa kali antara hapus. (Ini disebut "multiple-write" dalam artikel YAFFS).

Lembar data pabrikan adalah janji bersyarat yang dibuat pabrikan kepada Anda. Selama Anda mengikuti semua rekomendasi lembar data, pabrikan berjanji bahwa chip akan beroperasi seperti yang ditentukan. Saya menduga bahwa jika Anda memprogram halaman yang ditulis sebelumnya, menghindari area yang sudah ditulis, ada peluang bagus daripada pembacaan langsung yang mungkin memberikan data yang Anda harapkan - byte yang baru ditulis adalah nilai yang baru saja Anda tulis, dan byte lainnya kemungkinan tidak berubah. Namun, karena ini tidak mengikuti rekomendasi lembar data, Anda tidak bisa lagi mengandalkan semua janji di lembar data. Saya mendengar desas-desus bahwa aktivitas tanpa sanksi tersebut menyebabkan waktu retensi data dan daya tahan untuk menderita, karena gangguan program, pemrograman berlebihan, perangkap biaya, efek yang mirip dengan palu baris DRAM , dll.

"Skema penggunaan memori memengaruhi laju kesalahan bit. Pemrograman halaman-parsial, pemrograman halaman non-sekuensial dalam blok, pembacaan berlebihan per blok tanpa menghapus serta jumlah operasi pembacaan yang tidak sama dalam satu blok meningkatkan jumlah pembacaan gangguan kesalahan. " - Michal Jedrak. "NAND Flash memory dalam embedded system".

"Gangguan program terjadi ketika sedikit diprogram secara tidak sengaja dari" 1 "ke" 0 "selama acara pemrograman halaman. Kesalahan bit ini dapat terjadi baik pada halaman yang diprogram atau pada halaman lain di blok. Kondisi tegangan bias dalam blok selama pemrograman halaman dapat menyebabkan sejumlah kecil arus ke terowongan ke sel memori terdekat. Upaya pemrograman halaman parsial berulang akan terus memperparah kondisi ini. " - Douglas Sheldon dan Michael Freie. "Ganggu Pengujian dalam Memori Flash" . hal. 8, 9.

"Gangguan program terjadi ketika sedikit diprogram secara tidak sengaja (1 hingga 0) selama operasi pemrograman. ... Kondisi ini diperburuk oleh pemrograman acak dalam blok dan dengan menerapkan beberapa penulisan parsial ke halaman." "Mitigasi kegagalan flash NAND Yaffs"

davidcary
sumber
0

Sangat mungkin bahwa perangkat lunak pemrograman yang Anda gunakan sudah menulis 256 byte "wajib". Itu "muncul" seperti itu memberi Anda kemampuan menulis dari satu hingga 256 byte, tetapi saya menduga apa yang dilakukannya adalah ATAU-byte yang Anda inginkan dengan "topeng" dari 256 "FF." Jika ini benar, maka Anda dapat "dengan aman" menulis byte apa pun sekali , tanpa harus menghapus seluruh 4K byte. Jika sebuah checksum ditulis di luar kendali Anda, maka, kemungkinan besar, checksum yang tidak valid akan dibuat ketika Anda menulis byte lain ke dalam segmen yang sebelumnya ditulis. Implikasinya, tergantung chip.

Jika perangkat lunak pemrograman Anda, tidak melakukan "OR-ing," Anda dapat melakukannya sendiri. Kosongkan segmen 256 byte, tulis byte ke posisi yang benar, ATAU dengan mask 256 byte FF, dan tulis segmen ke halaman yang diinginkan.

Apakah metode tersebut bekerja dengan chip tertentu, dapat dengan mudah ditentukan oleh Anda. Menulis ke 128 byte pertama, menulis ke 128 byte kedua, memverifikasi bahwa 128 byte pertama TIDAK "kacau"!

Guill
sumber