Flash dan EEPROM

14

Lembar data Atmega16 mengatakan itu

a) 16 Kbytes memori program Flash terprogram dalam Sistem dan b) 512 Bytes EEPROM.

Bisakah mikrokontroler memiliki dua ROM terpisah yang dapat diprogram melalui teknologi EEPROM dan teknologi Flash?

Atau inferensi saya (seperti yang diberikan di atas) dari datasheet salah?

Saya tahu bahwa program kami disimpan dalam memori flash daripada mengapa ada orang yang membutuhkan EEPROM? Apa gunanya jika kita memiliki memori flash untuk program ini?

Adakah yang bisa menjelaskan apa itu istilah "In-System Self-programmable"

Yang saya tahu: Teknologi Flash dapat menulis program dalam blok data sedangkan EEPROM dapat menulis data byte demi byte.

Jasser
sumber

Jawaban:

21

Saat ini, memori Flash digunakan untuk menyimpan kode program, dan EEPROM (Memori Hanya Baca yang Dapat Dihapus Secara Listrik) digunakan untuk menyimpan data yang persisten. Kembali sekitar 30 tahun yang lalu, sebelum Flash datang, EEPROM digunakan untuk menyimpan kode program.

Sebenarnya ROM (Read-Only Memory) datang lebih dulu, kemudian PROM (Programmable ROM, sekali saja), EPROM (PROM Dihapus dengan sinar UV), EEPROM, dan akhirnya Flash. ROM masih digunakan untuk aplikasi yang sangat bervolume tinggi dan berbiaya rendah (mis. Berbicara kartu ucapan).

Perbedaan penting dengan mikrokontroler saat ini adalah bahwa Anda umumnya tidak dapat mengeksekusi kode dari EEPROM, dan itu aneh bagi program untuk menyimpan data dalam flash. (Data disimpan dalam flash ketika misalnya Anda menggunakan kata kunci "const" dalam deklarasi data, atau mendefinisikan string, tetapi itu ditangani di belakang layar oleh kompiler dan tautan.)

Area EEPROM dapat digunakan untuk menyimpan konfigurasi atau data lain yang Anda inginkan tersedia di seluruh reboot termasuk termasuk jika mikrokontroler kehilangan daya dan kemudian didukung kembali. Secara fungsional, Anda dapat menganggap EEPROM sebagai hard drive atau kartu SD yang sangat kecil.

Pada mikrokontroler tanpa EEPROM, dimungkinkan untuk menyimpan data persisten dalam memori flash, tetapi ini menjadi sulit karena mikrokontroler tidak benar-benar dirancang untuk ini, dan Anda harus menemukan tempat khusus yang tidak akan mengganggu kode program, dan mengesampingkannya dengan tautan. Plus seperti yang disebutkan di bawah ini, Anda biasanya dapat memperbarui EEPROM berkali-kali lebih banyak daripada flash.

Jika Anda melakukan data program dalam flash, ini tidak berarti Anda dapat mengakses data sebagai variabel dalam program C Anda, karena tidak ada cara untuk memberitahu kompiler di mana variabel-variabel ini dalam kode Anda (yaitu Anda tidak dapat mengikat sebuah konst variabel untuk area flash ini.) Jadi, membacanya harus dilakukan melalui set register khusus yang digunakan untuk menulisnya. Perhatikan pembatasan ini berlaku untuk data dalam EEPROM juga, sehingga tidak memiliki keuntungan dalam hal ini.

Untuk memprogram flash atau EEPROM, blok memori terlebih dahulu harus dihapus. Kemudian diprogram. Untuk flash, penulisan biasanya dilakukan satu blok sekaligus. Untuk EEPROM, itu dapat dilakukan dengan blok atau byte pada suatu waktu, tergantung pada mikrokontroler.

Untuk flash dan EEPROM, ada jumlah maksimum kali Anda dapat memperbaruinya sebelum Anda kehabisan memori. Nomor ini diberikan dalam lembar data sebagai minimum dijamin. Biasanya untuk EEPROM jauh lebih tinggi daripada untuk memori flash. Untuk flash, saya telah melihat angka serendah 1000. Untuk EEPROM, saya telah melihat angka setinggi 1.000.000.

Salah satu keuntungan EEPROM dibandingkan flash, adalah Anda dapat menghapusnya lebih banyak daripada menghapus flash.

"In-System Self-programmable" berarti mikrokontroler dapat memperbarui flash-nya sendiri saat berjalan. Fitur ini biasanya digunakan untuk memperbarui kode di lapangan. Kuncinya adalah Anda perlu meninggalkan beberapa kode di sistem saat program utama sedang diperbarui, disebut bootloader. Skema ini digunakan dalam sistem Arduino untuk memprogram chip.

tcrosley
sumber
Terima kasih atas tanggapan Anda, tuan. Jadi untuk memasukkan data ke dalam EEPROM saya perlu programmer EEPROM seperti pada programmer USBASP untuk membuang program ke dalam memori flash? Apakah saya benar, Tuan?
Jasser
1
@Jasser Tidak, Anda tidak perlu pemrogram eksternal. Anda akan mengakses EEPROM dari dalam program Anda. Akan ada satu set register di dalam ATmega yang, dengan menulis kepada mereka, akan memungkinkan Anda untuk memperbarui EEPROM. Anda juga perlu menggunakan register ini untuk membaca EEPROM, karena tidak akan muncul di peta alamat normal. Informasi tentang cara menghapus, menulis, dan membaca EEPROM akan ada dalam lembar data untuk chip tersebut.
tcrosley
Karena kita dapat menulis atau membaca dari EEPROM di dalam mikrokontroler daripada mikrokontroler harus memiliki sirkuit untuk menyimpan data di dalam EEPROM dan itu harus sama dengan programmer EEPROM. Ini sekali lagi membawa saya ke pertanyaan lain bahwa karena EEPROM dapat berjumlah sekitar 100.000 kali daripada setelah itu kami mungkin tidak dapat menyimpan data di dalam EEPROM melalui register. Apakah pernyataan ini bermakna? @tcrosley
Jasser
1
@Jasser Benar, ada batasan berapa kali Anda dapat memperbarui EEPROM. Ini biasanya jauh lebih tinggi (terkadang urutan besarnya lebih) daripada jumlah kali Anda dapat memperbarui flash. Saya seharusnya menyebutkan itu dalam jawaban saya, dan akan memperbaruinya. Nomor yang Anda kutip adalah minimum yang dijamin oleh pembuat chip; Saya melakukan beberapa tes sekali dengan chip yang ditetapkan untuk 100.000 menulis, dan itu berjalan lebih dari 500.000 sebelum kesalahan terdeteksi.
tcrosley
1
@Jasser Ya, sedikit lebih sulit untuk mengatur data dalam flash. Juga, sebagaimana dibahas dalam pembaruan saya untuk jawaban saya, Anda dapat menghapus dan memprogram ulang EEPROM berkali-kali lebih banyak (biasanya 10x) daripada flash.
tcrosley
4

Saya akan menambahkan beberapa info lagi ke jawaban yang sangat bagus oleh @tcrosley.

ATmega16 mengimplementasikan arsitektur Harvard , yaitu topologi sistem di mana memori data dipisahkan dari memori program. Mengutip paragraf yang relevan dari lembar data Atmega16 (halaman 8):

Untuk memaksimalkan kinerja dan paralelisme, AVR menggunakan arsitektur Harvard - dengan ingatan dan bus terpisah untuk program dan data. Instruksi dalam memori program dieksekusi dengan pipelining level tunggal. Ketika satu instruksi sedang dieksekusi, instruksi selanjutnya diambil dari memori program. Konsep ini memungkinkan instruksi untuk dieksekusi di setiap siklus clock. Memori program adalah Memori Flash Dalam Sistem yang Dapat Diprogram Ulang.

Arsitektur Harvard memiliki keuntungan karena tidak memiliki pertentangan bus antara siklus pengambilan instruksi dan siklus akses data, karena data dan instruksi tidak berbagi bus yang sama, seperti dalam arsitektur PC konvensional Anda.

Oleh karena itu memori flash digunakan sebagai memori program, sedangkan memori data dibagi antara SRAM (untuk data sementara, seperti stack panggilan fungsi dan heap - jika Anda memprogram dalam C, misalnya) dan EEPROM (untuk penyimpanan permanen) .

Lorenzo Donati mendukung Monica
sumber