เทคนิคชนิดใดที่ใช้เพื่อให้ผู้ใช้อัปเกรดการขายหลังการขายเฟิร์มแวร์อุปกรณ์ได้อย่างปลอดภัย ? ฉันต้องการทำสิ่งนี้กับไมโครคอนโทรลเลอร์ Cortex M3 / 4 แต่ฉันเดาว่าเทคนิคใดที่ไมโครควรทำ
โดยเฉพาะอย่างยิ่งกับองค์ประกอบพิเศษจำนวนน้อยที่สุดของหลักสูตร
เทคนิคชนิดใดที่ใช้เพื่อให้ผู้ใช้อัปเกรดการขายหลังการขายเฟิร์มแวร์อุปกรณ์ได้อย่างปลอดภัย ? ฉันต้องการทำสิ่งนี้กับไมโครคอนโทรลเลอร์ Cortex M3 / 4 แต่ฉันเดาว่าเทคนิคใดที่ไมโครควรทำ
โดยเฉพาะอย่างยิ่งกับองค์ประกอบพิเศษจำนวนน้อยที่สุดของหลักสูตร
คำตอบ:
ใช้ชิปที่มีปริมาณหน่วยความจำแฟลชมากกว่าสองเท่าสำหรับรหัสของคุณ วิธีนี้คุณจะได้รับเฟิร์มแวร์ใหม่ไปยังหน่วยความจำนี้ในขณะที่ยังคงทิ้งเก่าในกรณีที่มีอะไรผิดปกติ
หลังจากคุณถอดรหัสและตรวจสอบ checksums บนเฟิร์มแวร์ตัวใหม่ bootloader สามารถคัดลอกไปยังตำแหน่งสุดท้ายแทนที่อันเก่า หากมีสิ่งใดผิดพลาดในส่วนนี้หลังจากการรีเซ็ตอย่างหนัก bootloader จะเห็นว่าเฟิร์มแวร์ใหม่ไม่ถูกต้อง (โดยเรียกใช้การตรวจสอบอีกครั้ง) และลองคัดลอกใหม่
นี่เป็นวิธีที่ง่ายและเข้าใจผิดได้ง่ายที่สุดที่ฉันรู้ นอกจากนี้ยังต้องใช้รหัสเล็กน้อยใน bootloader และไม่ต้องการทำซ้ำฟังก์ชันการทำงานใด ๆ ระหว่างโปรแกรมหลักและ bootloader (คุณไม่จำเป็นต้องใช้ตรรกะการสื่อสารใด ๆ ใน bootloader)
ใช้ bootloader และแฟลชเสริมอีกสองสาม KB
ทำการอัปเกรดโดย bootloader โดยส่งคำสั่งพิเศษผ่านทาง UART, USB, I2C หรือโปรโตคอลอื่น มีการอัปเดตรหัสหลักเท่านั้น - รหัส bootloader ไม่เคยแตะยกเว้นผ่านโปรแกรมเมอร์ภายนอก (เช่น JTAG / PICkit สำหรับ PICs เป็นต้น)
หากการอัปเดตล้มเหลว (ไฟฟ้าขัดข้องมีคนสะดุดสายหรือเหตุผลอื่น) วิดเจ็ตจะไม่ทำงาน แต่ bootloader จะยังคงอยู่ที่นั่นเพื่อให้สามารถอัพเกรดได้อีกครั้ง
สามารถตั้งค่าสถานะในบางไบต์ซึ่งป้องกันไม่ให้รหัสหลักทำงานไม่ถูกต้องเนื่องจากยังไม่ได้รับการปรับปรุงอย่างสมบูรณ์
หากอุปกรณ์ของคุณมีราคาค่อนข้างแพงและคุณสามารถจ่ายได้ (และคุณเป็นห่วงการอัพเกรด) คุณสามารถทำเช่นนี้ ...
(โดยทั่วไปเทคนิคนี้ต้องใช้ที่เก็บข้อมูลภายนอกหรือการใช้ jtag .. โดยคดเคี้ยว)
มีไมโครโปรแกรมคงที่ (เช่น PIC เล็กน้อย) ที่สามารถหยุดระบบและโปรแกรมใหม่
เนื่องจากคุณไม่สามารถเปลี่ยนเฟิร์มแวร์ "อัพเกรดโปรเซสเซอร์" ได้จึงไม่ผิดไปเลย
1) ผู้ใช้สามารถอัพเกรดอุปกรณ์
2) หากการอัพเกรดล้มเหลวพวกเขาสามารถลองอีกครั้งได้ตลอดเวลา ไม่สามารถปิดกั้นได้
3) แม้ในขณะที่อุปกรณ์เป้าหมายของคุณไม่รองรับตัวโหลดการบูต (มันแค่ต้องการบู๊ตและรัน) คุณยังสามารถทำสิ่งที่คุณต้องการได้
ใช้ได้กับ FPGA, DSP และเป้าหมายคี่บอลอื่น ๆ
สามารถมีส่วนต่อประสานกับผู้ใช้ที่เป็นระเบียบ (แม้แต่ PIC สามารถเรียกใช้เว็บเซิร์ฟเวอร์ .... )
ตรวจสอบให้แน่ใจว่าผลิตภัณฑ์ของคุณมีอินเตอร์เฟสแบบอนุกรมที่เรียบง่ายบางประเภทโดยเฉพาะอย่างยิ่ง EIA232 ตัวเชื่อมต่อที่ไม่ได้มาตรฐานนั้นใช้ได้หากคุณไม่มีที่ว่างสำหรับ DB-9 ตัวอย่างเช่นตัวเชื่อมต่อ TRSเป็นสิ่งที่คุณต้องการสำหรับ TxD, RxD และกราวด์
เมื่อเขียนโปรแกรมอุปกรณ์เป็นครั้งแรก ได้แก่bootloader สิ่งนี้ควรเรียบง่ายที่สุดเท่าที่จะเป็นไปได้เพราะไม่ช้าก็เร็วคุณจะต้องอัพเกรด bootloader ด้วยตัวเองหากต้องการคุณสมบัติใหม่ (คุณอาจไม่สามารถอัพเกรดได้)
จากนั้นเชื่อมต่อ TRS ใช้แจ็คที่มีสวิตช์เพื่อให้คุณสามารถตรวจจับได้เมื่อมีขั้วต่ออยู่ เพียงตรวจสอบการรีเซ็ตทันทีและเริ่ม bootloader หากมีปลั๊กอยู่มิฉะนั้นให้เริ่มต้นแอปพลิเคชัน วิธีดังกล่าว bootloader และโปรแกรมแอปพลิเคชันผู้ใช้จะยังคงแยกจากกัน (การตรวจสอบนั้นเป็นส่วนหนึ่งของ bootloader เราต้องการมันโดยไม่คำนึงถึงเวอร์ชั่นของแอพพลิเคชั่นมิฉะนั้นเราจะไม่สามารถเข้า bootloader ได้!)
'ตัวเลื่อน' จะมีอุปกรณ์ใดบ้าง พีซี, USB stick, micro SD card?
วิธีหนึ่งที่จะมีแอปพลิเคชันในรายการแบบถอดได้ (usb stick, การ์ด SD, ฯลฯ ) ชิปโหลดแอปพลิเคชันจากรายการ ผู้อัปเกรดของคุณเพียงแค่สลับไอเทมและรีบูต
ชิปไมโครคอนโทรลเลอร์ ARM และ Cortex ที่ฉันรู้จัก (NXP, Atmel) ล้วนมีบูท bootloader ในตัวดังนั้นหากตัวอัปเดตของคุณมาพร้อมกับพีซีและสายเคเบิลอนุกรม ปรับปรุง