Seperti banyak orang lain, saya telah terinspirasi oleh seri Ben Eater yang menuntun Anda dengan membangun komputer 8-bit di papan tempat pemotretan, dan saya ingin meniru karyanya (dan mungkin meningkatkan desain dengan beberapa ide saya sendiri di masa depan). Namun, ketika membuat daftar komponen yang perlu saya beli, saya mengetahui bahwa chip EEPROM hampir tidak dapat diperoleh di mana saja akhir -akhir ini dan dengan demikian bertanya -tanya bagaimana menyelesaikan masalah ini.
After some researches, I found out that the SST39SF010 flash chips are very similar to the 28C16 EEPROM chip Ben Eater uses, and with also a number of improvements, such as writing/reading speed, retention time, power consumption... Of course, however, this calls for a different programmer than the one written by Ben Eater for his series, beneater/eeprom-programmer , and I found slu4coderSST39SF010-FLASH-Programmer bisa menjadi apa yang saya butuhkan. Namun, menurut saya itu ditulis dengan gaya yang sangat berbeda sehubungan dengan ide pengajaran yang ada di belakang proyek Ben.
Jadi saya memutuskan untuk menulis programmer saya sendiri bahwa, meskipun pasti kurang dioptimalkan daripada SLU4Coder, saya pikir lebih cocok untuk pemula yang ingin mendekati pemrograman flash tanpa memiliki banyak pengalaman pengkodean. Untuk alasan ini, saya mencoba mengomentari kode tersebut dan sejelas mungkin dalam gaya saya. Proyek saya juga didasarkan pada Arduino Nano dalam kombinasi dengan dua chip 74HC595 seperti dua proyek tersebut.
Saya mungkin memperluas perangkat lunak ini agar kompatibel dengan chip flash generik SST39SF0X0 di masa depan; Meskipun jika Anda sampai di sini dan Anda perlu mem -flash chip berkapasitas lebih tinggi, Anda mungkin mampu memperluas proyek ini sendiri. :)
Dalam kode saya, saya juga menyertakan mekanisme pemeriksaan untuk data menulis dan menghapus fungsi chip, yang dapat diaktifkan dan dikonfigurasi pada waktu kompilasi.
Makro WRITE_CHK didefinisikan secara default sebagai 0 , tetapi dapat diubah menjadi 1 untuk mengaktifkan cek. Dalam hal ini, setiap byte data yang ditulis ke memori secara otomatis diperiksa dan perangkat lunak akan menimbulkan kesalahan jika readback berbeda dari data yang diharapkan. Untuk informasi lebih lanjut, silakan merujuk ke fungsi writeMem() di dalam kode.
Makro CLR_CHK didefinisikan secara default sebagai 0 , tetapi dapat diubah menjadi nomor positif untuk mengaktifkan cek. Dalam hal ini, setelah perintah Clear Chip, nomor yang ditetapkan untuk makro akan menjadi jumlah byte acak yang dibaca dari flash dan diperiksa. Jika salah satu byte ini berbeda dari 0xFF (nilai default setelah chip yang jelas), perangkat lunak akan menimbulkan kesalahan. Ada makro lain, yang disebut CLR_CHK_MAX , yang mendefinisikan alamat tertinggi yang mungkin berasal dari fungsi acak; Secara default didefinisikan sebagai 131071 , yaitu (2^17) -1, byte yang dapat dialamatkan tertinggi di SST39SF010. Namun saya ingin memberikan kemungkinan untuk mengkonfigurasi makro ini karena dalam beberapa kasus memori flash hanya digunakan untuk beberapa byte pertama, dan dengan demikian berguna untuk memeriksa hanya byte yang digunakan dalam siklus tulis sebelumnya. Untuk informasi lebih lanjut, silakan merujuk ke fungsi eraseAll() di dalam kode.