ในฐานะที่เป็นคนอื่น ๆ อีกมากมายฉันได้รับแรงบันดาลใจจากซีรีส์ของ Ben Eater ที่นำคุณผ่านการสร้างคอมพิวเตอร์ 8 บิตบนขนมปังและฉันต้องการทำซ้ำงานของเขา (และอาจปรับปรุงการออกแบบด้วยแนวคิดบางอย่างของฉันเองในอนาคต) อย่างไรก็ตามเมื่อทำรายการส่วนประกอบที่ฉันต้องซื้อฉันพบว่าชิป EEPROM นั้นแทบจะไม่สามารถหาได้ทุกที่ทุกวันนี้และสงสัยว่าจะแก้ปัญหานี้ได้อย่างไร
หลังจากการวิจัยบางอย่างฉันพบว่าชิป SST39SF010 Flash นั้นคล้ายกับชิป Eeprom Ben Eapt ของ 28C16 และด้วยการปรับปรุงจำนวนมากเช่นการเขียน/การอ่านความเร็วเวลา beneater/eeprom-programmer ใช้พลังงาน ... slu4coderSST39SF010-FLASH-Programmer อาจเป็นสิ่งที่ฉันต้องการ อย่างไรก็ตามในความคิดของฉันมันถูกเขียนในรูปแบบที่แตกต่างกันมากเกี่ยวกับความคิดการสอนที่อยู่เบื้องหลังโครงการของเบ็น
ดังนั้นฉันจึงตัดสินใจเขียนโปรแกรมเมอร์ของตัวเองว่าแม้ว่าจะได้รับการปรับให้เหมาะสมน้อยกว่า Slu4Coder แต่ฉันคิดว่าเหมาะสำหรับผู้เริ่มต้นที่ต้องการเข้าใกล้การเขียนโปรแกรมแฟลชโดยไม่ต้องมีประสบการณ์การเขียนโค้ดมากมาย ด้วยเหตุนี้ฉันจึงพยายามแสดงความคิดเห็นรหัสและชัดเจนที่สุดเท่าที่จะทำได้ในสไตล์ของฉัน โครงการของฉันยังขึ้นอยู่กับ Arduino Nano ร่วมกับชิป 74HC595 สองตัวเช่นเดียวกับโครงการดังกล่าวทั้งสองโครงการดังกล่าว
ฉันอาจขยายซอฟต์แวร์นี้ให้เข้ากันได้กับชิปแฟลช SST39SF0X0 ทั่วไปในอนาคต แม้ว่าคุณจะมาถึงที่นี่และคุณต้องแฟลชชิปความจุที่สูงขึ้น แต่คุณอาจสามารถขยายโครงการนี้ด้วยตัวคุณเอง -
ในรหัสของฉันฉันยังรวมกลไกการตรวจสอบสำหรับการเขียนข้อมูลและฟังก์ชั่นชิปที่ชัดเจนซึ่งสามารถเปิดใช้งานและกำหนดค่าได้ในเวลาคอมไพล์
มาโคร WRITE_CHK ถูกกำหนดโดยค่าเริ่มต้นเป็น 0 แต่สามารถเปลี่ยนเป็น 1 เพื่อเปิดใช้งานการตรวจสอบ ในกรณีนี้ข้อมูลทุกไบต์ที่เขียนไปยังหน่วยความจำจะถูกตรวจสอบโดยอัตโนมัติและซอฟต์แวร์จะเพิ่มข้อผิดพลาดหากการอ่านค่ากลับแตกต่างจากข้อมูลที่คาดหวัง สำหรับข้อมูลเพิ่มเติมโปรดดูฟังก์ชั่น writeMem() ภายในรหัส
มาโคร CLR_CHK ถูกกำหนดโดยค่าเริ่มต้นเป็น 0 แต่สามารถเปลี่ยนเป็นจำนวนบวกเพื่อเปิดใช้งานการตรวจสอบ ในกรณีนี้หลังจากคำสั่ง Clear Chip หมายเลขที่กำหนดให้กับแมโครจะเป็นจำนวนไบต์สุ่มที่อ่านจากแฟลชและตรวจสอบ หากหนึ่งในไบต์เหล่านี้แตกต่างจาก 0xFF (ค่าเริ่มต้นหลังจากชิปที่ชัดเจน) ซอฟต์แวร์จะเพิ่มข้อผิดพลาด มีแมโครอื่นที่เรียกว่า CLR_CHK_MAX ซึ่งกำหนดที่อยู่สูงสุดที่เป็นไปได้มาจากฟังก์ชั่นสุ่ม โดยค่าเริ่มต้นจะถูกกำหนดเป็น 131071 ซึ่งก็คือ (2^17) -1 ไบต์ที่อยู่สูงสุดใน SST39SF010 อย่างไรก็ตามฉันต้องการให้ความเป็นไปได้ในการกำหนดค่ามาโครนี้เพราะในบางกรณีหน่วยความจำแฟลชจะใช้สำหรับไบต์ไม่กี่ครั้งแรกและดังนั้นจึงมีประโยชน์ในการตรวจสอบเฉพาะไบต์ที่ใช้ในรอบการเขียนก่อนหน้านี้ สำหรับข้อมูลเพิ่มเติมโปรดดูฟังก์ชั่น eraseAll() ภายในรหัส