สามารถใช้หน่วยความจำแฟลชโปรแกรมไมโครคอนโทรลเลอร์สำหรับจัดเก็บการกำหนดค่าผู้ใช้ได้หรือไม่


9

ไมโครคอนโทรลเลอร์หลายตัวเช่นPIC18Fมีหน่วยความจำโปรแกรมแฟลช: "หน่วยความจำโปรแกรมแฟลชสามารถอ่านและเขียนได้ในระหว่างการทำงานปกติ" นี่หมายความว่าฉันสามารถจัดเก็บการกำหนดค่าผู้ใช้บางอย่างไว้ในหน่วยความจำของโปรแกรม

คำตอบ:


12

ใช่คุณสามารถ. ฉันทำมาหลายครั้งแล้ว

อย่างไรก็ตามมีข้อบกพร่องบางประการที่เกี่ยวข้องกับการใช้ EEPROM แยก:

  1. จำนวนอายุการใช้งานที่เขียนลงในหน่วยความจำแฟลชของโปรแกรมนั้นน้อยกว่าข้อมูล EEPROM อย่างมาก

  2. โปรเซสเซอร์จะออกไปทานอาหารกลางวันในช่วงเวลาลบและเขียน

  3. โปรแกรมแฟลชถูกลบในบล็อก คุณไม่สามารถอัปเดตไบต์เดียวได้ ฉันมักจะใช้รูปแบบบล็อกแคชเพื่อจัดการกับเรื่องนี้


สมบูรณ์แบบคุณดูเหมือนจะรู้ว่าคำถามของฉันคือ "ทำไมความต้องการ EEPROM ในขณะที่คุณสามารถใช้หน่วยความจำของโปรแกรมสำหรับทั้งข้อมูลโปรแกรมและผู้ใช้" :)
นักเรียน 1

Olin แฟลชทั้งหมดจะถูกลบทิ้งเมื่อเฟิร์มแวร์เวอร์ชั่นใหม่ถูกเขียนลงใน PIC หรือไม่ มีวิธีที่ดีในการป้องกันการกำหนดค่าผู้ใช้ (หรือข้อมูลการสอบเทียบ) ใน Flash จากการถูกลบระหว่างการดาวน์โหลดเฟิร์มแวร์หรือไม่? นี่คือความสะดวกสบายในระหว่างการพัฒนาเฟิร์มแวร์ ฉันคิดว่าการกำหนดค่าผู้ใช้จะถูกเก็บไว้ในบล็อกหรือ Flash ครั้งสุดท้าย
Nick Alexeev

6
@Nick: นั่นขึ้นอยู่กับโปรแกรมเมอร์ PIC ที่คุณใช้งาน หลายคนรวมถึงเหมืองทั้งหมดทำการลบข้อมูลจำนวนมากดังนั้นข้อมูลการสอบเทียบจะถูกลบออก ฉันมีบางครั้งที่เขียนแอพพลิเคชั่นการเขียนโปรแกรมพิเศษที่อ่านข้อมูลการสอบเทียบทำการลบจำนวนมากจากนั้นจึงเขียนข้อมูลการสอบเทียบกลับเป็นส่วนหนึ่งของกระบวนการเขียนโปรแกรมปกติ โปรแกรมเมอร์ Microchip บางคนอาจสามารถอัปเดตเฉพาะบางส่วนของหน่วยความจำโปรแกรม โปรดทราบว่าหากคุณเปิดใช้งานการป้องกันรหัสโปรแกรมเมอร์จะต้องทำการลบข้อมูลจำนวนมาก
Olin Lathrop

สำหรับตัวประมวลผลที่ไม่ใช่ฮาร์วาร์ด (ฉันคิดถึง MSP430) คุณสามารถคัดลอกโค้ดลงใน RAM และข้ามไปที่ RAM และเรียกใช้ในขณะที่เขียน / ลบแฟลชเกิดขึ้น ฉันใช้มันเพื่อ bootloader เพื่อเขียนและรับข้อมูลใหม่จากวิทยุพร้อมกัน
markrages

@ เครื่องหมาย: ใช่สิ่งนี้ยังทำงานบน PIC32 ซึ่งเป็นไปได้ที่จะเรียกใช้จาก RAM ในความเป็นจริงมันเร็วกว่า
Olin Lathrop

6

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 มีความสามารถในการอัปเดตหน่วยความจำแฟลช ส่วนใหญ่ใช้การรวมกันของการลงทะเบียนการกำหนดค่าตัวชี้ที่อยู่และคำแนะนำพิเศษเพื่อดำเนินงาน


วิธี "เฟิร์มแวร์ผ่านอากาศ" นั้นดูน่าสนใจมาก มันจำเป็นสำหรับการลบใน System Programming (ISP) หรือไม่?
นักเรียน 1

@ student1 ไม่จำเป็นต้องลบการเขียนโปรแกรมเริ่มต้นของชิปผ่านทางอินเตอร์เฟส ISP เพราะคุณต้องใส่เฟิร์มแวร์บางตัวบนชิปเพื่อให้สามารถจัดการกับการอัปเดตได้ในภายหลัง ไมโครคอนโทรลเลอร์ ATmega ที่ใช้บนบอร์ด Arduino มีเฟิร์มแวร์ประเภทนี้อยู่แล้วเรียกว่า Bootloader ซึ่งเป็นสาเหตุที่คุณไม่จำเป็นต้องใช้ส่วนต่อประสาน ISP เพื่อดาวน์โหลดภาพร่างไปยัง Arduino อย่างไรก็ตามหากคุณต้องการอัปเดต Bootloader เองนั่นจะต้องมีส่วนต่อประสาน ISP Bootloader นี้จัดการการอัปเดตผ่าน USB เท่านั้นดังนั้นจึงไม่ใช่ "เฟิร์มแวร์แบบ over the air" จริงๆ
tcrosley
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.