أنا معجب كبير بلوح حبوب منع الحمل الأزرق. أنها جيدة جدا من حيث السعر / الأداء. في الواقع ، فإن حبي لهم ملحوظ في
مقالة April Fools حول البرامج الثابتة الدواسة للعب balalaika .

افتح صندوقًا يحتوي على مثل هذه الألواح واتخذ أحدها بسرعة لحل بعض المشكلات - حسب ترتيب الأشياء. هذا صحيح ، لقد أخذت اللوحة التالية مؤخرًا ، وأومضتها بـ "برنامج ثابت" تم تصحيحه جيدًا واختباره وحصلت على جهاز USB مجهول الهوية. أخذت لوحة أخرى ، "تومض" ، الجهاز يعمل هناك. ستكون هناك نهاية لهذه المسألة ، لكنني أتساءل ما هي المسألة. لذلك ، مع حلول نهاية الأسبوع ، بدأت دراسة مفصلة عن سبب عدم نجاحها.
بشكل عام ، قبل "وميض" الألواح ، أتأكد من أن الاختبار الذي تم سكبه بواسطة الشركة المصنعة يعمل: يومض المصباح. لذلك كنت متأكداً من أن المعالج ، بشكل عام ، لا يزال حياً. ما هو السبب بعد ذلك؟ ربما خطوط USB أو الكوارتز.
كانت الخطوط على ما يرام ، لم يبدأ الكوارتز. لكنها قد لا تبدأ لأسباب عديدة. يتم إطلاقه برمجيًا ، بالفعل في أحشاء الوظيفة
الرئيسية ( .) حسنًا ، حسنًا ، نبدأ في تصحيح البرنامج.
كل شيء سيكون على ما يرام ، ولكن لا يذهب المصحح إلى الوظيفة
الرئيسية () . توقف البرنامج في مكان ما بين الإطلاق وهذه الوظيفة.

نوقف البرنامج: من المتوقع تمامًا ، نحن في معالج
HardFault .


ما الذي يجلب لنا هنا؟ إعادة ضبط عداد العناوين:

ونبدأ في متابعة البرنامج بعناية. هنا على هذا الخط ، كل شيء يموت ، ونحن نستخدم على الأقل عملية
الخطوة ، على الأقل
خطوة أكثر .

جولي كيل ... حسنًا ، لا شيء. إعادة تعيين كل شيء مرة أخرى (RST) ، انقر فوق الماوس على نافذة disassembler والخطوة هناك. في هذه الحالة ، يمكننا أن نفهم أن كل شيء يموت داخل وظيفة
__scatterload .

بشكل عام ، إذا مات كل شيء في هذه الوظيفة ، فهناك بالفعل سبب لمعرفة ما إذا كان نوع وحدة التحكم مشوشًا. لكن لا ، هذا صحيح (لقد قمت أيضًا بالتحقق من الإعدادات ، لكن هذه البرامج الثابتة تعمل على لوحات أخرى).

حسنا. مرة أخرى ، نقوم بإعادة تعيين كل شيء وتتبع هذه الوظيفة بالفعل. بعد عدد قليل من التجارب ، وتوقف ويخفق نجد خط مذنب ...

نعم نعم كل شيء يموت أثناء حفظ السجلات على المكدس. في الوقت نفسه ، يمكن ملاحظة أن SP هي 0x200030A0. ننظر إلى وثائق وحدة التحكم:

دعونا نرى أي نافذة مخصصة ل SRAM:

هذا صحيح. مؤشر المكدس (SP) في النطاق المسموح به. إذن ما هو السبب؟ دعنا نحاول استبدال قيمة SP بـ 0x200030A0 ، على سبيل المثال ، 0x200020A0 ، لأن المصحح يسمح بهذا ... Chpok! توقف على الخط المحدد! لذا ، فإن شريحة ذاكرتنا ليست 20 كيلو بايت. كم؟ بعد التحقق عدة مرات ، اكتشفنا أن قيمة العمل الأخيرة لـ SP هي 0x20002800. هذا هو ، 10 كيلو بايت. هذا يتوافق مع الكريستال STM32F103C6. أمامنا هو microcircuit منشار. للأسف.
كل شيء سيكون على ما يرام ، ولكن لوحات من هذه الدفعة في بلدي مربع كبير إلى حد ما من السهل التمييز. لديهم لون خاص من لاعبا و LED الزمرد جميلة جدا (والباقي لديه أقل ظلالا لطيفة من اللون الأخضر). لذلك ، يتم تخصيصها بسهولة من كومة من لوحات أخرى. بالطبع ، راجعت لهم. بالطبع ، تم قطع الحزب بأكمله (أخذت عشرات).
ما يجب القيام به مع هذا غير واضح. عندما حصلت على ثلاث قطع في أكثر من عشرة اللوحات الرئيسية التي لم يكن بها اختبار منتظم: لم الصمام وميض (لذلك أنا الآن التحقق منها ليس بشكل انتقائي ، ولكن تماما) ، قضيت أسبوعا بعقب البائع. وقال "تحولت على أحمق". مهتم باستمرار بما أريد القيام به ، ووعد بالمساعدة في تقديم المشورة. وكررت له مرارًا وتكرارًا أنني متصل بغباء بمصدر الطاقة ، سبع لوحات غمضة عين ، ثلاثة - لا. لذلك هم ميتون. وله مرة أخرى عضوه البرميلي. و هكذا اسبوع. ولكن كان هناك كل شيء واضح. لم يجتاز اختبار الموظفين. هنا ، اختبار بدوام كامل يمر ، وقال انه لا يحتاج إلى الكثير من الذاكرة. كيفية إثبات أن جاء وهمية ليست واضحة. وإذا أمكنك إثبات ذلك ، فكل ذلك ، وفقًا لقواعد Ali Express ، تحتاج إلى إرسال البضائع مرة أخرى. بشكل عام ، كل شيء يبدو مثل اليأس. والأهم من ذلك أن البائع النهائي لم يكن لديه نية خبيثة. أخذت دفعة أخرى منه ، في وقت لاحق. كل شيء جيد هناك. هو نفسه كان يخذل.
بطريقة أو بأخرى ، أبلغ الجمهور أن هذا يحدث. تحقق لوحات ليس فقط للأداء العام ، ولكن أيضا للمواصفات في العالم الحقيقي. صحيح ، ما يجب القيام به مع عدم تطابق غير واضح.
المقال له فائدة عملية أخرى. يوضح كيف يمكنك العثور بسرعة على سبب عدم عمل اللوحة إذا لم تكن وحدة التحكم غير صالحة للتشغيل بالكامل (يستجيب عبر منفذ تصحيح أخطاء SWD).