Saya akan membahas pemrograman memori flash, tetapi banyak materi akan mirip dengan EEPROMs (Electrically Erasable Programmable ROM), karena memori flash berasal dari EEPROMs pada pertengahan 1980-an. Seperti dijelaskan di bawah, dari sudut pandang fisik, status default adalah 1. Tapi yang lebih penting, saya akan menjelaskan mengapa ada adalah suatu keadaan default - Anda tidak bisa hanya sewenang-wenang Program di atas apa yang sudah diprogram dari terakhir kali.
NOR flash hampir selalu dipilih untuk program flash karena antarmuka paling cocok untuk menempatkan data dalam peta memori mikrokontroler - alamat lengkap dan bus data meniru RAM dan memungkinkan akses acak ke lokasi mana pun. Data dapat dibaca satu kata pada suatu waktu, di mana kata didefinisikan sebagai lebar data mikrokontroler, biasanya 8, 16, atau 32-bit. NAND flash, di sisi lain dikembangkan untuk mengganti hard drive dan bekerja secara berurutan.
Namun pemrograman menjadi sedikit lebih rumit. Seperti yang telah disebutkan, status default untuk NOR flash dan memori non-volatil lainnya seperti NAND flash, EEPROMs dan bahkan EPROM adalah logika 1. Anda tidak dapat memprogram 1 ke dalam perangkat ini, Anda hanya dapat memprogram 0. Jadi misalnya jika Anda memiliki byte yang berisi 0x0123 dan Anda ingin mengubahnya ke 0x3210, Anda tidak dapat melakukannya secara langsung seperti menulis lebih dari satu byte dalam RAM.
Sebagai gantinya, bit dalam memori harus dihapus, yang menempatkan mereka ke dalam keadaan default 1 yang telah disebutkan. Ini hanya bisa dilakukan dalam blok, bukan kata-kata. Pada Microchip PIC32, yang paling lama saya gunakan, ukuran blok minimum yang bisa dihapus adalah 4.096 byte. Jadi jika Anda ingin mengubah hanya satu kata (32-bit), Anda harus membaca memori 4K, menghapus blok, kemudian menulis memori 4K kembali ke flash tetapi termasuk nilai 32-bit baru sesuai kebutuhan. Penghapusan ini dapat memakan waktu - bagian yang baik dari sedetik.
Berikut ini adalah gambar sel memori flash. Flash menyimpan data dengan menghapus atau meletakkan elektron di gerbang mengambang. Ketika elektron hadir di gerbang mengambang, tidak ada arus yang mengalir melalui transistor, menunjukkan 0. Ketika elektron dikeluarkan dari gerbang mengambang, transistor mulai melakukan, menunjukkan 1. (Ini adalah dengan konvensi - itu bisa menjadi cara lain tetapi akan membutuhkan inverter di semua jalur data.)
Hapus operasi. Keadaan standar sel memori flash (sel flash NOR tingkat tunggal) adalah 1 karena gerbang mengambang tidak membawa muatan negatif. Menghapus sel memori flash (mengatur ulang ke 1) dicapai dengan menerapkan tegangan di sumber dan gerbang kontrol (baris kata). Tegangannya bisa berkisar antara -9V hingga -12V. Dan juga berlaku sekitar 6V ke sumbernya. Elektron di gerbang mengambang ditarik dan ditransfer ke sumber dengan tunneling kuantum . Dengan kata lain, terowongan elektron dari gerbang mengambang ke sumber dan substrat.
Karena menghapus menggunakan tegangan tinggi, jadi menghapus dalam blok membutuhkan area die yang lebih sedikit. Jadi voltase hanya dapat diterapkan ke seluruh baris transistor pada satu waktu.
Untuk menulis, sel flash NOR dapat diprogram, atau diatur ke 0 dengan prosedur berikut. Saat menulis, tegangan tinggi sekitar 12V diterapkan ke gerbang kontrol (baris kata). Jika tegangan tinggi sekitar 7V diterapkan ke bit Line (terminal drain), 0 disimpan di dalam sel. Saluran sekarang dinyalakan, sehingga elektron dapat mengalir dari sumber ke saluran pembuangan. Arus sumber-pengaliran cukup tinggi untuk menyebabkan beberapa elektron berenergi tinggi melompati lapisan isolasi ke gerbang mengambang melalui proses yang disebut injeksi elektron panas.
Untuk membaca, tegangan sekitar 5V diterapkan ke gerbang kontrol dan sekitar 1V ke saluran pembuangan. Keadaan sel memori dibedakan oleh arus yang mengalir antara selokan dan sumber.
Masa pakai memori non-volatile yang dapat diukur diukur dari siklus hapus. Kerugian dari NOR adalah jumlah siklus erase sekitar 1/10 dari memori NAND. Banyak versi PIC32 hanya memungkinkan memori flash diperbarui 1000 kali, lebih sedikit dari 100.000 siklus erase khas untuk EEPROMs.
Jadi tidak begitu penting jika para perancang membuat keadaan default adalah 1 atau 0 (mereka memilih nilai yang memungkinkan implementasi termudah); yang penting adalah seseorang harus menghapus blok flash terlebih dahulu (yang membutuhkan waktu), dan kemudian memprogram ulang seluruh blok (bahkan jika satu kata sedang diubah (yang membutuhkan sejumlah besar RAM).
Blok yang menghapus perangkat ini akan kembali ke EPROM pertama (Erasmable Programmable ROM), yang memproses EEPROM. Kode ini diprogram dalam chip (seperti 16KB 27128) dan ditempatkan di soket. Keripik ini memiliki jendela kecil di atasnya yang memungkinkan cahaya bersinar pada cetakan. Ketika program harus diubah, chip dimasukkan ke dalam penghapus UV selama 20 menit atau lebih, yang akan menghapus seluruh chip. Maka chip akan diprogram dengan program baru.
Beberapa EEPROM membutuhkan penghapusan blok memori sebelum pemrograman; yang lain mengizinkan penulisan byte pada satu waktu (pengontrol EEPROM sebenarnya menghapus byte pertama dan program-programnya).