Jawaban:
Ya kamu bisa. Saya telah melakukan ini berkali-kali.
Namun, ada beberapa kelemahan relatif untuk menggunakan EEPROM terpisah:
Banyak PIC18 memiliki memori EEPROM, hingga 1K. Sayangnya PIC18F46J50 referensi Anda tidak. Jika EEPROM tersedia, itu adalah pilihan yang jauh lebih baik jika cukup besar untuk data Anda, karena EEPROM memiliki minimal 1.000.000 siklus hapus / tulis, dan flash hanya 10.000.
PIC18, seperti kebanyakan mikrokontroler lainnya, menggunakan apa yang disebut arsitektur Harvard, yang berarti ada area yang dapat dialamatkan secara terpisah untuk program dan data (yaitu Anda dapat memiliki alamat program 4 dan alamat data 4, dan mereka tidak sama). Karenanya Anda tidak dapat membaca atau menulis memori flash menggunakan metode normal dalam bahasa C atau bahasa assembly.
Sebagai gantinya, pada keluarga PIC18, Anda mengatur alamat awal dalam register 22-bit yang disebut TBLPTR. Untuk membaca byte dari flash, Anda menggunakan instruksi TBLRD. Ada opsi untuk menambah atau mengurangi alamat secara otomatis setelah membaca, Anda tidak harus melakukannya secara manual.
Untuk menulis ke memori flash, Anda harus menghapus satu atau lebih blok 64-byte memori flash terlebih dahulu yang akan ditulis ulang. Setelah mengatur alamat awal lagi di TBLPTR, dan nilai di beberapa register lain untuk menginisialisasi operasi hapus, interupsi dinonaktifkan dan kemudian Anda harus menulis 0x55 segera diikuti oleh 0xAA ke register; ini membuka kunci perintah hapus dan diperlukan untuk mencegah kode yang salah dari kehabisan memori secara tidak sengaja. Akhirnya perintah untuk benar-benar melakukan penghapusan dijalankan, diikuti dengan mengaktifkan kembali interupsi.
Menulis ke memori flash mirip dengan menghapus, kecuali ukuran blok lebih kecil. Tulisan sebenarnya dieksekusi menggunakan instruksi TBLWT, yang juga memungkinkan kenaikan / penurunan otomatis seperti instruksi TBLRD.
Selain menghemat data konfigurasi, menulis ke memori flash memungkinkan seseorang untuk memperbarui firmware mereka di lapangan menggunakan apa yang disebut "firmware over the air". Anda harus memiliki blok firmware tetap, biasanya di awal memori program, yang dapat menerima pembaruan dari modul Bluetooth, Wi-Fi, modul seluler, atau bahkan koneksi kabel, dan memperbarui flash di atas titik tertentu dalam program (misalnya "pagar") dengan kode baru. Setelah pembaruan selesai, reset dimulai, dan kode baru mulai digunakan.
Banyak mikrokontroler lain selain keluarga PIC memiliki kemampuan untuk memperbarui memori flash mereka; sebagian besar menggunakan beberapa kombinasi register konfigurasi, penunjuk alamat, dan instruksi khusus untuk melaksanakan tugas.