دليل عملي للذاكرة الفلاشية ثنائية المنطقة في MSPM0L1117: استراتيجية تقسيم مساحة 128 كيلوبايت وإرشادات تجنب أخطاء ترقية OTA

STY TECHNOLOGY LIMITED 60

هل تسبب تحديث OTA في جعل الجهاز معطوبًا مرة أخرى؟ على الرغم من أن ذاكرة الفلاش بسعة 128 كيلوبايت كافية، إلا أن تقسيم المناطق يواجه العديد من العقبات — فقد يشغل المُحمِّل الأول مساحة التطبيقات، أو يؤدي انقطاع التيار إلى فقدان البرامج الثابتة، كما تفتقر آلية الرجوع إلى الإصدار السابق. إن بنية ذاكرة الفلاش ذات المنطقتين في MSPM0L1117 مصممة أصلاً لضمان OTA موثوق، لكن الدليل الرسمي لم يوضح لك: كيف تقوم بالتقسيم الأمثل لذاكرة بسعة 128 كيلوبايت؟ تستند هذه المقالة إلى مشاريع إنتاج فعلية، حيث تحلل المنطق الأساسي لتبديل Bank A/B، وتقدم خطة تقسيم قابلة للتنفيذ وتصميمًا لمقاومة الأخطاء أثناء التحديث.

تحليل بنية ذاكرة الفلاش ذات المنطقتين في MSPM0L1117

خريطة ذاكرة الفلاش MSPM0L1117 Bank A (الـ 64 كيلوبايت السفلى) 0x0000_0000 - 0x0000_FFFF كود/بيانات التطبيق منطقة الإعدادات (مشتركة) محجوز / المُحمِّل الأول Bank B (الـ 64 كيلوبايت العليا) 0x0001_0000 - 0x0001_FFFF كود التطبيق / البيانات منطقة التكوين (مشتركة) المحمل الأولي (ثابت) تبديل البنوك

تستخدم ذاكرة الفلاش بسعة 128 كيلوبايت في MSPM0L1117 تصميمًا مزدوجًا فعليًا للبنوك، حيث يمثل البنك A والبنك B نسخة طبق الأصل لبعضهما البعض، ويدعمان إعادة تعيين العنوان على مستوى العتاد. الميزة الأساسية لهذا الهيكل هي أنه أثناء عملية الترقية لا يلزم تعطيل البرامج الثابتة الحالية، مما يتيح تحقيق "الترقية أثناء التشغيل" بشكل حقيقي.

الرسم البياني للمعالجة الفعلية والحماية للبنك A/B بسعة 128 كيلوبايت

تبلغ مساحة العنوان الفعلي لـ Bank المزدوج من 0x0000_0000 إلى 0x0001_FFFF، حيث يشغل Bank A بشكل ثابت أول 64 كيلوبايت (0x0000_0000-0x0000_FFFF)، بينما يشغل Bank B آخر 64 كيلوبايت (0x0001_0000-0x0001_FFFF). يتحكم بت位 BANK_SWAP في السجل الرئيسي FLASH_CONF في تبديل زاوية العرض أثناء التشغيل، وبعد التبديل يشير العنوان 0 الذي تراه وحدة المعالجة المركزية فعليًا إلى Bank فعلي آخر.

تنقسم آليات الحماية إلى ثلاثة مستويات: حماية الكتابة والمسح على مستوى القطاع (32 قطاعًا × 4 كيلوبايت)، وقفل القراءة فقط على مستوى Bank، بالإضافة إلى تعطيل منفذ التصحيح العالمي. عند الإنتاج الضخم، يُنصح بتمكين قفل BSL (مستوى أمان محمل الإقلاع) لمنع القراءة غير المصرح بها لحزم الترقية.

خاصية RWW ونافذة أمان المقاطعة

يسمح وضع القراءة أثناء الكتابة لوحدة المعالجة المركزية بتنفيذ التعليمات البرمجية من البنك A أثناء كتابة البرامج الثابتة الجديدة في البنك B. ولكن هناك قيود أساسية: لا يمكن إجراء عمليات القراءة والكتابة المتزامنة داخل نفس البنك، كما أن عملية المسح تمنع جميع الوصولات إلى ذلك البنك لمدة حوالي 20 مللي ثانية. يجب وضع برنامج خدمة المقاطعة في البنك الذي يعمل حاليًا، وإلا فستحدث خطأ في الناقل.

نصائح عملية: انسخ جدول متجهات المقاطعات الأساسية إلى ذاكرة SRAM، وأوقف المقاطعات غير الضرورية أثناء الترقية، مع الإبقاء فقط على وظيفة تنبيه المراقبة وإعداد مؤقت زمني لتجاوز وقت الاتصال.

استراتيجية تقسيم 128 كيلوبايت: الحل الأمثل لثلاثة أنواع من السيناريوهات

يعد التقسيم أول عائق في نجاح أو فشل التحديث عبر الهواء (OTA). قد تبدو سعة 128 كيلوبايت واسعة، لكن بعد خصم منطقة التمهيد ومنطقة الإعدادات ومنطقة السجلات، غالبًا ما تتقلص المساحة الفعلية المتاحة للتطبيق إلى أقل من 50%.

خطة التقسيم المتماثل ثنائي المناطق (60 كيلوبايت + 60 كيلوبايت): سيناريوهات التحديث عبر الهواء العادية

يتم تثبيت برنامج التمهيد بسعة 8 كيلوبايت في الجزء العلوي من الذاكرة الفلاشية (0x0001_F000-0x0001_FFFF)، ويتم تقسيم الـ 120 كيلوبايت المتبقية بالتساوي. كل قسم بسعة 60 كيلوبايت يستوعب كود التطبيق والبيانات، بينما يحتوي قسم التكوين المشترك بسعة 8 كيلوبايت على رقم الإصدار، وعلامة الترقية، وعدد مرات الرجوع. يناسب هذا المخطط التطبيقات التي لا تتجاوز حجمها 45 كيلوبايت والتي تتطلب تحديثات كاملة متكررة.

المنطقةنطاق العناوينالحجمالوصف
البنك A0x0000_0000-0x0000_EFFF60 كيلوبايتمنطقة التشغيل أو منطقة هدف الترقية
البنك B0x0001_0000-0x0001_EFFF60 كيلوبايتمنطقة التشغيل أو منطقة هدف الترقية
منطقة التكوين0x0000_F000-0x0000_F7FF2 كيلوبايتمشترك بين البنوك، محمي ضد فقدان الطاقة
برنامج التمهيد0x0001_F000-0x0001_FFFF4 كيلوبايتغير قابل للترقية، مقفل بالعتاد

方案 غير متماثل (48 كيلوبايت + 80 كيلوبايت): تطبيق كبير + محمل إقلاع مبسط

عندما يكبر حجم التطبيق إلى أكثر من 55 كيلوبايت، يصبح الحل المتماثل ضيقًا جدًا. يتم تقليص Bank A إلى 48 كيلوبايت ليكون منطقة نسخ احتياطي لـ "البرنامج الثابت الذهبي"، بينما يتم توسيع Bank B إلى 80 كيلوبايت لاستيعاب التطبيق الرئيسي. يتم تقليل حجم محمل الإقلاع إلى 4 كيلوبايت، مع الاحتفاظ فقط بوظائف الاتصال والتحقق والتبديل، ويتم الترقية عبر حزم الفروقات.

هذا الحل يضحي بمرونة التراجع — حيث تكون وظائف الإصدار القديم في Bank A محدودة — لكنه يتيح زيادة سعة التطبيق الرئيسي بنسبة 33%. وهو مناسب للمنتجات الاستهلاكية التي تشهد تكرارًا سريعًا للوظائف وزيادات كبيرة في كل مرة.

تصميم مسار الترقية عبر الهواء وتنفيذ آلة الحالة

الترقية عبر الهواء الموثوقة ليست مجرد "تنزيل ثم إعادة تشغيل"، بل تتطلب آلة حالة تغطي كامل العملية واستعادة الأخطاء.

آلة حالة من ثلاث مراحل: التنزيل - التحقق - التبديل

تعريف الحالة: IDLE→DOWNLOADING→VERIFYING→READY→SWAPPING→COMMITTED، وفي أي مرحلة إذا تجاوز الوقت المحدد أو حدث خطأ ينتقل إلى وضع الاسترداد RECOVERY. التصميم الرئيسي: قبل كل انتقال حالة يتم كتابة علامة في منطقة التكوين، وبعد انقطاع التيار الكهربائي وإعادة التشغيل تُقرأ العلامة لاستعادة السياق.

تستخدم مرحلة التحقق ضمانًا مزدوجًا باستخدام CRC-32 + التوقيع: تكتشف طبقة النقل أخطاء البتات عبر CRC، بينما يتحقق RSA-1024 أو HMAC-SHA256 من شرعية مصدر البرامج الثابتة. يوفر مولد الأعداد العشوائية الحقيقي TRNG في MSPM0L1117 مصدر إنتروبيا لاشتقاق المفاتيح.

أمان انقطاع التيار وآلية استعادة الانقطاع أثناء الكتابة

الميزة الطبيعية لهيكل البنك المزدوج: عند الترقية يتم الكتابة في البنك غير المشغل، وبالتالي في أي وقت يحدث فيه انقطاع للتيار الكهربائي، سيتم إعادة التشغيل والبدء من البنك الأصلي. النافذة الخطرة الوحيدة هي خلال 100 ميكروثانية بعد كتابة بت BANK_SWAP، حيث يجب استخدام FRAM أو EEPROM خارجي لحفظ علامة "التبديل تم الشروع فيه".

يستخدم استئناف الانقطاع استراتيجية "علامتان + رقم تسلسلي": يحتفظ قسم التكوين بـ current_seq و target_seq، فإذا تساويا فهذا يشير إلى الحالة المستقرة، وإذا اختلفا فهذا يعني أن العملية في طور التبديل. بعد اكتمال التبديل، يتطلب أول تشغيل للبنك الجديد تقديمًا صريحًا؛ وإلا فسيتم الرجوع تلقائيًا عند إعادة التشغيل التالي.

هيكل رقم الإصدار المزدوج وعلامة التبديل الذرية

صُمم رقم الإصدار من 64 بت: الـ 32 بت العليا هي الإصدار الرئيسي (ذو معنى)، والـ 32 بت السفلى هي طابع زمني للبناء. يخزن قسم التكوين كلاً من active_version و pending_version، وعند التبديل يتم تحديث pending_version فقط، وبعد نجاح بدء تشغيل البرامج الثابتة الجديدة يتم إجراء تقديم ذري — حيث يتم نسخ pending إلى active، ولا يمكن مقاطعة العملية بأكملها.

منطق الكشف عن البرامج الثابتة غير القانونية والتراجع التلقائي

بعد بدء تشغيل برنامج الثابت الجديد للبنك، يدخل في "فترة التجربة": يجب إكمال الفحص الذاتي خلال نافذة انتهاء مهلة المراقبة وإرسال نبضات القلب عبر الاتصال. إذا لم يتم الإرسال عند انتهاء المهلة أو فشل الفحص الذاتي، يقوم محمل الإقلاع بمسح علامة التبديل، مما يؤدي إلى العودة القسرية إلى البنك الأصلي عند إعادة التشغيل البارد التالي. تمنع هذه الآلية مسار تعطل الشريحة وتعزل الأخطاء ضمن دورة تمهيد واحدة.

تجنب المشاكل في التطبيق العملي: خمسة أخطاء شائعة لاستكشاف الأخطاء وإصلاحها

في مشاريع الإنتاج الضخم، تتكرر المشكلات التالية باستمرار، مما يستهلك وقتًا كبيرًا في عمليات التصحيح.

تداخل انتهاء مهلة المسح مع المراقبة

يستغرق المسح النموذجي لقطاع بسعة 4 كيلوبايت من 15 إلى 25 مللي ثانية؛ فإذا تم ضبط دورة المراقبة على 20 مللي ثانية، فقد يؤدي عدم تغذية المراقبة أثناء عملية المسح إلى إعادة التشغيل المباشرة. الحل: توسيع مهلة المراقبة مؤقتًا إلى 100 مللي ثانية قبل عملية المسح، أو استخدام وضع متقطع "مسح جزء صغير ثم تغذية المراقبة مرة واحدة". والحل الأمثل هو تقسيم مهمة المسح إلى حلقة رئيسية واستخدام حادثة فراغ نظام RTOS لتنفيذها.

موازنة عمر الفلاش وحساب التآكل

تبلغ عدد دورات مسح وكتابة ذاكرة الفلاش الاسمي لـ MSPM0L1117 حوالي 100,000 دورة، لكن التحديث المتكرر لمنطقة التكوين يشكل عائقًا. في الاختبارات العملية: يتم كتابة منطقة التكوين نحو 20 مرة عند كل تحديث، مما يؤدي إلى استهلاك 20% من العمر الافتراضي بعد ألف تحديث. الحلول: استخدام خوارزمية توازن التآكل في منطقة التكوين مع النسخ الاحتياطي المزدوج والكتابة بالتناوب؛ أو توصيل EEPROM خارجي عبر I²C لتحمل بيانات التحديثات عالية التردد.

قائمة التحقق للتحقق والإنتاج الضخم

يجب اجتياز اختبار الحدود قبل تنفيذ الخطة، مع ضبط نشر الإصدار الأولي خلال مرحلة الإنتاج الضخم.

اختبار الحدود: كتابة كاملة السعة ومحاكاة انقطاع التيار الكهربائي غير المتوقع

البند الأول: ملء البنك حتى 100% من السعة (كل بايت ليس بقيمة 0xFF)، والتحقق من نجاح عمليات المسح-الكتابة-التحقق بشكل كامل. البند الثاني: محاكاة انقطاع التيار العشوائي خلال أربع مراحل باستخدام مصدر طاقة قابل للبرمجة (التشغيل، التشغيل، المسح، التبديل)، بمعدل 1000 دورة لكل مرحلة، مع حساب نسبة نجاح بدء التشغيل. الهدف: معدل استعادة البيانات بعد انقطاع التيار غير المتوقع ≥ 99.9%.

عملية البرمجة على خط الإنتاج ونشر الإصدار الأولي

تتطلب عملية البرمجة الأولى على خط الإنتاج كتابة Bootloader والبرنامج الثابت الأولي للمخزن A، بالإضافة إلى علامة "المخزن A فعال". يبقى المخزن B في حالة المسح (كل البتات 0xFF)، وعندما يكتشف Bootloader أن مخزناً واحداً فعالاً، يقوم تلقائياً بمزامنة النسخة المطابقة، مما يضمن توفر قدرة التكرار ثنائية المناطق فور خروج الجهاز من المصنع.

ملخص رئيسي

  • ذاكرة الفلاش ثنائية المناطق MSPM0L1117يتطلب سعة 128 كيلوبايت حساباً دقيقاً: يناسب الحل المتماثل (60+60 كيلوبايت) التطبيقات القياسية، بينما يخدم الحل غير المتماثل (48+80 كيلوبايت) سيناريوهات التحديثات التفاضلية للتطبيقات الكبيرة
  • يجب أن تغطي آلة الحالة كامل المسار من DOWNLOADING إلى COMMITTED، مع تخزين دائم للعلامات عند كل نقطة تحول لاستعادة السياق بعد انقطاع التيار الكهربائي
  • يعتمد إدارة الإصدارات تصميم ثنائي المناطق وثنائي الرقم التسلسلي؛ وبعد اجتياز الاختبارات الأولية للبرنامج الجديد، يتم تقديمه بشكل ذي أثر ذري لمنع حدوث حالات تعطل الجهاز
  • تعد تعارضات المراقبة وتوقيت المسح من أخطر العوامل الخفية في الإنتاج الضخم، لذا يلزم توفير هامش أمان لا يقل عن ثلاثة أضعاف أو اعتماد استراتيجية التغذية المتقطعة للمراقب.
  • لا يمكن إهمال موازنة تآكل منطقة التكوين؛ فمع آلاف عمليات الترقية ستصل ذاكرة الفلاش إلى حدود عمرها الافتراضي، لذا يُنصح باستخدام EEPROM خارجية لتخفيف الحمل.

الأسئلة الشائعة

هل يمكن لذاكرة الفلاش ذات المنطقتين بسعة 128 كيلوبايت في MSPM0L1117 دعم التشغيل المتزامن للإصدارين A/B؟

لا. يعمل بنك الذاكرة المزدوج بشكل حصري؛ إذ يتم تعيين بنك واحد فقط إلى العنوان صفر في كل لحظة. ويُقصد بـ"المنطقتين" توفير التكرار التخزيني وليس التنفيذ المتزامن. يجب إتمام تبديل الإصدار عبر بت BANK_SWAP في الأجهزة، مع إعادة بناء السياق عند إعادة تشغيل النظام.

كيف يتم التعامل مع انقطاع الاتصال أثناء عملية الترقية عبر الهواء (OTA)؟

انقطاع مرحلة التنزيل: يتم مسح العلامة بعد تشغيل مؤقت المهلة، مع الاحتفاظ بالبيانات المستلمة لاستكمال النقل أو إعادة التنزيل الكامل. انقطاع مرحلة التحقق: إذا تم الاستلام الكامل، يستمر التحقق المحلي؛ وإلا يُعاد إلى حالة التنزيل. انقطاع مرحلة التبديل: الأكثر خطورة، ويتطلب علامة ذرية في منطقة الإعدادات؛ وبعد إعادة التشغيل، يحدد برنامج التمهيد ما إذا كان التبديل قد اكتمل، وإذا لم يكتمل، يتم الحفاظ على البنك الأصلي.

MSPM0L1117SRHBRهل يمكن لبرنامج التمهيد الخاص به أن يقوم بتحديث نفسه؟

لا يمكن تحديث منطقة BSL الرسمية المغلقة هاردويرًا في الموقع، ولكن يمكن وضع برنامج تمهيد مخصص من قبل المستخدم في المنطقة القابلة للمسح. يُنصح بتثبيت محمل الإقلاع الأساسي بسعة 4 كيلوبايت في منطقة BSL، ووضع تحليل البروتوكول المعقد في منطقة المستخدم، وتنفيذ توسيع الوظائف عبر جدول القفز لتجنب التعامل مع المناطق المحمية.

كيف يمكن التحقق من أن البرنامج الثابت الجديد لن يؤدي إلى تعطيل الجهاز قبل إجراء التبديل؟

باستخدام خاصية RWW: بعد كتابة البرنامج الثابت الجديد في البنك B، يمكن حساب CRC للتعليمات الموجودة عند عنوان الدخول ومقارنته بالقيمة المتوقعة. أما الطريقة الأكثر شمولية فهي تضمين "صورة اختبار ذاتي مصغرة" داخل البنك B—وهي مجموعة من التعليمات الحسابية البحتة التي لا تعتمد على الأجهزة الخارجية؛ حيث ينتقل المُحمِّل الإقلاعي لتنفيذ التحقق قبل التبديل الرسمي.

هل يتفوق التحديث التفاضلي على التحديث الكامل في حالة السعة 128 كيلوبايت؟

عادةً ما ينخفض حجم حزمة التحديث التفاضلي إلى 15-30% من حجم التحديث الكامل، لكن يجب الاحتفاظ بالإصدار القديم في ذاكرة الفلاش كخط أساس. وفي سيناريو 128 كيلوبايت، إذا تم استخدام تقسيم متماثل، فستحتاج الخط الأساسي للتحديث التفاضلي والإخراج إلى التعايش في بنك واحد، مما يجعل التوفير الفعلي محدودًا. أما في الحلول غير المتماثلة، فيكون البنك A ثابتًا كخط أساس بينما يستقبل البنك B إخراج التحديث التفاضلي، وهنا تكون الفوائد واضحة، ويوصى باستخدام هذه الطريقة مع خوارزميات bsdiff أو MTF.