ไมโครคอนโทรลเลอร์หลายตัวเช่นPIC18Fมีหน่วยความจำโปรแกรมแฟลช: "หน่วยความจำโปรแกรมแฟลชสามารถอ่านและเขียนได้ในระหว่างการทำงานปกติ" นี่หมายความว่าฉันสามารถจัดเก็บการกำหนดค่าผู้ใช้บางอย่างไว้ในหน่วยความจำของโปรแกรม
ไมโครคอนโทรลเลอร์หลายตัวเช่นPIC18Fมีหน่วยความจำโปรแกรมแฟลช: "หน่วยความจำโปรแกรมแฟลชสามารถอ่านและเขียนได้ในระหว่างการทำงานปกติ" นี่หมายความว่าฉันสามารถจัดเก็บการกำหนดค่าผู้ใช้บางอย่างไว้ในหน่วยความจำของโปรแกรม
คำตอบ:
ใช่คุณสามารถ. ฉันทำมาหลายครั้งแล้ว
อย่างไรก็ตามมีข้อบกพร่องบางประการที่เกี่ยวข้องกับการใช้ EEPROM แยก:
PIC18 จำนวนมากมีหน่วยความจำแบบ EEPROM มากถึง 1K น่าเสียดายที่ PIC18F46J50 ที่คุณอ้างอิงไม่ได้เป็น หากมี EEPROM จะเป็นตัวเลือกที่ดีกว่าถ้ามีขนาดใหญ่พอสำหรับข้อมูลของคุณเนื่องจาก EEPROM มีรอบลบ / เขียนขั้นต่ำ 1,000,000 รอบและแฟลชมีเพียง 10,000
PIC18 เช่นเดียวกับไมโครคอนโทรลเลอร์ส่วนใหญ่ใช้สิ่งที่เรียกว่าสถาปัตยกรรมฮาร์วาร์ดซึ่งหมายความว่ามีพื้นที่ที่สามารถกำหนดแอดเดรสสำหรับโปรแกรมและข้อมูล (เช่นคุณสามารถมีที่อยู่ของโปรแกรม 4 และที่อยู่ของข้อมูล 4 และไม่เหมือนกัน) ดังนั้นคุณไม่สามารถอ่านหรือเขียนหน่วยความจำแฟลชโดยใช้วิธีการปกติในภาษา C หรือภาษาแอสเซมบลี
ในตระกูล PIC18 คุณจะต้องตั้งค่าที่อยู่เริ่มต้นในการลงทะเบียน 22 บิตชื่อ TBLPTR หากต้องการอ่านไบต์จากแฟลชคุณใช้คำสั่ง TBLRD มีตัวเลือกในการเพิ่มหรือลดที่อยู่โดยอัตโนมัติหลังจากอ่านคุณไม่ต้องทำด้วยตนเอง
ในการเขียนไปยังหน่วยความจำแฟลชคุณจะต้องลบบล็อกแฟลชหน่วยความจำ 64 ไบต์หนึ่งบล็อกขึ้นไปก่อนที่จะถูกเขียนทับ หลังจากตั้งค่าที่อยู่เริ่มต้นอีกครั้งใน TBLPTR และค่าในการลงทะเบียนอื่น ๆ เพื่อเริ่มต้นการดำเนินการลบอินเตอร์รัปต์จะถูกปิดใช้งานและคุณต้องเขียน 0x55 ตามด้วย 0xAA ทันทีเพื่อลงทะเบียน สิ่งนี้ปลดล็อกคำสั่งลบและจำเป็นเพื่อป้องกันโค้ดที่ผิดพลาดจากการลบหน่วยความจำโดยไม่ตั้งใจ ในที่สุดคำสั่งในการลบจะถูกดำเนินการตามด้วยการขัดจังหวะการเปิดใช้งานอีกครั้ง
การเขียนไปยังหน่วยความจำแฟลชนั้นคล้ายคลึงกับการลบยกเว้นขนาดบล็อกจะเล็กกว่า การเขียนถูกดำเนินการโดยใช้คำสั่ง TBLWT ซึ่งอนุญาตให้เพิ่ม / ลดอัตโนมัติเช่นคำสั่ง TBLRD
นอกเหนือจากการบันทึกข้อมูลการกำหนดค่าการเขียนไปยังหน่วยความจำแฟลชช่วยให้หนึ่งในการปรับปรุงเฟิร์มแวร์ของพวกเขาในสนามโดยใช้สิ่งที่เรียกว่า "เฟิร์มแวร์เหนืออากาศ" คุณต้องมีเฟิร์มแวร์บล็อกคงที่ซึ่งโดยปกติจะเป็นจุดเริ่มต้นของหน่วยความจำโปรแกรมที่สามารถรับการอัปเดตจากโมดูลบลูทู ธ Wi-Fi โมดูลเซลลูล่าร์หรือแม้กระทั่งการเชื่อมต่อผ่านสายและอัปเดตแฟลชด้านบน โปรแกรม (เช่น "รั้ว") ด้วยรหัสใหม่ หลังจากการอัปเดตเสร็จสมบูรณ์การรีเซ็ตจะเริ่มต้นและรหัสใหม่จะถูกนำไปใช้
ไมโครคอนโทรลเลอร์อื่น ๆ อีกมากมายนอกเหนือจากตระกูล PIC มีความสามารถในการอัปเดตหน่วยความจำแฟลช ส่วนใหญ่ใช้การรวมกันของการลงทะเบียนการกำหนดค่าตัวชี้ที่อยู่และคำแนะนำพิเศษเพื่อดำเนินงาน