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?
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"
sumber
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"!
sumber