ฉันจะอัปเดตแบบเพิ่มหน่วยด้วยแฟลชที่สามารถลบบล็อคได้อย่างเดียวได้อย่างไร


11

สถานการณ์

ฉันต้องการอัปเดตอุปกรณ์ IoT ราคาประหยัดแบบ over-the-air พร้อมเฟิร์มแวร์ใหม่ที่อัปเดตไมโครคอนโทรลเลอร์ของอุปกรณ์ หน่วยความจำไมโครคอนโทรลเลอร์คือหน่วยความจำแฟลชในช่วง 32k ถึง 128k (ทุก ๆ ค่าเซ็นต์) หน่วยความจำราคาถูกนี้มีข้อ จำกัด ที่สำคัญอย่างหนึ่ง: สามารถลบได้เฉพาะบล็อกที่ชาญฉลาด

คำถาม

หมายความว่าฉันไม่สามารถอัปเดตส่วนต่าง ( เดลต้า ) ได้หรือไม่ ฉันต้องอัพเดตหน่วยความจำคอนโทรลเลอร์ทั้งหมด (หรืออย่างน้อยก็ชิ้นส่วนที่สำคัญ) อยู่เสมอหรือไม่?

ฉันต้องการลดความจำเป็นในการแฟลชทุกอย่างและเสี่ยงต่อการทำให้อุปกรณ์แน่นเท่าที่จะทำได้ มีกลยุทธ์อยู่หรือไม่เมื่อมีการกระพริบไมโครคอนโทรลเลอร์บนอากาศ?


อะไรที่สำคัญสำหรับคุณที่ต้องเสียค่าใช้จ่ายหรืออัตราความเสี่ยงต่ำที่สุด
Bence Kaulics

@BentKaulics ค้นหาสมดุลระหว่างสองฉันเดา หลังจากทั้งหมดความเสี่ยงอิฐยังเป็นต้นทุน (ถ่วงน้ำหนัก)
Helmar

คำตอบ:


8

คำตอบง่ายๆคือใช่ - คุณต้องมีบล็อกแฟลชเพียงพอที่จะรองรับอิมเมจ bootloader และรหัส A / B หากคุณต้องการความน่าเชื่อถือสูง ก่อนที่จะเปิดใช้งานภาพใหม่คุณสามารถเขียนสิ่งทั้งหมดตรวจสอบและลองใหม่อีกครั้ง

อย่างไรก็ตามนี่เป็นกลยุทธ์ราคาแพง / น่าเชื่อถือและมีสิ่งที่คุณสามารถทำได้เพื่อลดค่าใช้จ่าย การสนับสนุนระดับต่ำสำหรับการอัปเดต OTA อาจมาเป็นส่วนหนึ่งของเฟิร์มแวร์ของอุปกรณ์หรือระบบปฏิบัติการดังนั้นคุณสามารถหลีกเลี่ยงการหมุนของคุณเองเว้นแต่ว่าคุณต้องการเรียนรู้ FOTAคุณสมบัตินี้อาจอธิบายได้ว่า

การแบ่งพาร์ติชันรหัสฐานของคุณช่วยให้สามารถทำการอัปเดตได้มากขึ้นกรณีที่ดีที่สุด bootloader สามารถใช้การเชื่อมต่อเครือข่ายดาวน์โหลดและตรวจสอบรหัสโดยไม่จำเป็นต้องมีรหัสผู้ใช้สำรอง ด้วยเกตเวย์ท้องถิ่นการจัดการงานนี้สามารถมอบหมายจากจุดปลายต้นทุนต่ำ

อุปกรณ์จำนวนมากมีแฟลชลบคำเพียงเล็กน้อยและถึงแม้จะล้มเหลวคุณก็สามารถตั้งค่าบิตโดยไม่จำเป็นต้องลบทั้งบล็อก คุณสมบัติเหล่านี้สามารถใช้เพื่อจัดการตารางการข้ามและการต่อรหัสเข้าด้วยกันซึ่งได้รับการอัพเดทในบล็อกขนาดบล็อก แม้ว่าในตอนแรกคุณวางแผนที่จะใช้พื้นที่โค้ด A / B เต็มรูปแบบคุณอาจต้องย้อนกลับไปที่โครงร่างที่ซับซ้อนมากขึ้นเมื่อโค้ดเบสโตขึ้นมากเกินไป

เพื่อชี้แจงการทำงานที่สามารถทำได้ด้วยโซลูชั่นเฟิร์มแวร์แบบ over-the-air ที่ซับซ้อน bootloader และสแต็กการสื่อสารหลักอาจยังคงมีอยู่ในขณะที่พื้นที่แอปพลิเคชันของผู้ใช้ที่เหลือเต็มอยู่อีกครั้ง สิ่งนี้ไม่จำเป็นต้องมีค่าใช้จ่ายใด ๆ ในสถานการณ์ที่จำเป็นต้องอัพเกรดสแต็กการสื่อสารพื้นที่โดยทั่วไปที่ใช้สำหรับรหัสแอปพลิเคชันสามารถใช้ชั่วคราวในระหว่างการดาวน์โหลดและการตรวจสอบ การบรรลุเป้าหมายนี้ต้องการการสนับสนุนใน SoC แต่อุปกรณ์รุ่นที่ 2 และ 3 ที่ออกแบบโดยคำนึงถึงสิ่งนี้มีอยู่แล้ว


6

ฉันต้องการลดความจำเป็นในการแฟลชทุกอย่างและเสี่ยงต่อการทำให้อุปกรณ์แน่นเท่าที่จะทำได้ มีกลยุทธ์อยู่หรือไม่เมื่อมีการกระพริบไมโครคอนโทรลเลอร์บนอากาศ?

นอกเหนือจากรหัสของคุณที่ทำการอัปเดตซึ่งจะค่อนข้างคงที่คุณต้องเก็บภาพสองภาพในที่เก็บข้อมูลของคุณ: รูปภาพที่ใช้งานและภาพสำรอง เมื่อใดก็ตามที่คุณต้องการอัปเดตให้ทำในข้อมูลสำรองจากนั้นสลับที่จะใช้งานได้ เมื่อเสถียรแล้วให้อัปเดตรูปภาพที่ใช้งานอยู่ซึ่งควรจะเป็นข้อมูลสำรองของคุณ

เมื่อคำนึงถึงสิ่งนี้คุณสามารถใช้อัลกอริธึมการปรับระดับการสึกหรอเมื่ออัปเดตรูปภาพทั้งสอง รหัสสำหรับอัลกอริทึมดังกล่าวอาจใช้เวลาประมาณ 10-15% ของพื้นที่จัดเก็บทั้งหมด แต่ก็คุ้มค่าที่จะใช้ในการยืดอายุการใช้งานของอุปกรณ์

การปรับระดับการสึกหรอโดยทั่วไปจะมีการจัดการโดยตัวควบคุมแฟลชซึ่งใช้อัลกอริทึมการปรับระดับการสึกหรอเพื่อพิจารณาว่าฟิสิคัลบล็อกใดที่จะใช้ในแต่ละครั้งที่ข้อมูลถูกตั้งโปรแกรม การปรับระดับการสึกหรอของไดรฟ์โซลิดสเตต (SSD) มีสองประเภท: แบบไดนามิกและแบบคงที่ พูลการปรับระดับการสึกหรอแบบไดนามิกลบบล็อกและเลือกบล็อกที่มีจำนวนการลบต่ำสุดสำหรับการเขียนครั้งต่อไป

ในทางตรงกันข้ามการปรับระดับการสึกหรอแบบคงที่จะเลือกบล็อกเป้าหมายที่มีจำนวนการลบโดยรวมต่ำสุดลบบล็อกหากจำเป็นเขียนข้อมูลใหม่ไปยังบล็อกและตรวจสอบให้แน่ใจว่าบล็อกของข้อมูลแบบคงที่ถูกย้ายเมื่อจำนวนลบบล็อกอยู่ต่ำกว่า เกณฑ์ที่แน่นอน ขั้นตอนเพิ่มเติมของการย้ายข้อมูลสามารถทำให้ประสิทธิภาพการเขียนช้าลงเนื่องจากโอเวอร์เฮดบนคอนโทรลเลอร์แฟลช แต่การปรับระดับการสึกหรอแบบสถิตมีประสิทธิภาพมากกว่าการปรับระดับการสึกหรอแบบไดนามิกเพื่อยืดอายุการใช้งานของอุปกรณ์โซลิดสเตต

( Techtarget.com: การปรับระดับการสวมใส่ )


6

Freescale Semiconductor อธิบายวิธีการที่แข็งแกร่งกว่า-the-air เฟิร์มแวอัพเกรดสำหรับไมโครคอนโทรลเลอร์

มันถูกเรียกว่า: โปรแกรมหน่วยความจำแฟลช Swap

ระบบที่ใช้การสลับหน่วยความจำแฟลช

ในอุปกรณ์ที่มีบล็อกแฟลชภายในสองบล็อกขึ้นไปที่รองรับการสลับที่อยู่ฐานหน่วยความจำของแต่ละบล็อกแฟลชสามารถแลกเปลี่ยนได้ ตำแหน่งที่อยู่ของแต่ละบล็อกแฟลชจะถูกสลับในแผนผังหน่วยความจำโลจิคัลของอุปกรณ์ หลังจากรีเซ็ตแล้วระบบสลับแฟลชในตัวจะเลือกซอฟต์แวร์ที่ดำเนินการโดยตำแหน่งของบล็อกแฟลชในแผนผังหน่วยความจำโลจิคัล สิ่งนี้อนุญาตให้ระบบสำรองข้อมูลโค้ดเพิ่มความสะดวกในการเขียนโปรแกรม คุณสามารถเรียกใช้จากบล็อกหนึ่งในขณะที่ลบ / เขียนโปรแกรมบล็อกอื่น บนอุปกรณ์ Kinetis ระบบ flash swap จะตรวจสอบ / ควบคุมทุกขั้นตอนของการสลับจากแอปพลิเคชันเก่าไปเป็นใหม่ มีการเพิ่มความมั่นใจในการใช้งานที่เชื่อถือได้ในกรณีที่ไฟฟ้าดับระหว่างขั้นตอนใดขั้นตอนหนึ่ง

ข้อดี

  • ความง่ายในการเขียนโปรแกรม แอปพลิเคชั่นจะเรียกใช้บล็อกนอกในแผนที่หน่วยความจำเสมอ
  • ทนต่อการสูญเสียพลังงาน
  • ไม่จำเป็นต้องใช้ bootloader ไม่มีความล่าช้าในการเริ่มต้นแอปพลิเคชันหลัก
  • เหมาะอย่างยิ่งสำหรับระบบมัลติทาสกิ้ง แอปพลิเคชั่นหยุดทำงานน้อยที่สุด ในระบบมัลติทาสกิ้งเป็นไปได้ที่จะดำเนินการงานแอปพลิเคชันหลักต่อไปในขณะที่งานเบื้องหลังกำลังทำงานเพื่ออัปเดตสำเนาใหม่ของแอปพลิเคชัน
  • สำเนาสำรองของรหัส เป็นไปได้ที่จะเปลี่ยนกลับไปเป็นแอปพลิเคชันที่ทำงานที่รู้จัก

ข้อเสีย

  • จำเป็นต้องใช้พื้นที่หน่วยความจำแฟลชเพิ่มเติมเพื่อจัดเก็บสำเนาสำรอง

คุณสามารถอัปเดตบล็อกและสลับได้

สลับหน่วยความจำในระหว่างการปรับปรุงการมองเห็น

เอกสารที่เชื่อมโยงมีคำอธิบายโดยละเอียด

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


2
สิ่งนี้ดูดีและดูเหมือนโซลูชันที่ต้องพิจารณาอย่างแน่นอนว่าสามารถสมดุลกับความต้องการด้านต้นทุนได้หรือไม่ + 1
Helmar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.