العمل مع الإطارات المخصصة معقدة Redd

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



الجزء النظري الممل


ما سوف ننظر


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

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


لماذا في Redd يتم تطبيق الإطارات القياسية المعقدة


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

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

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

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

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

الذي سيقود تطوير رمز لريد


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

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

لماذا أكتب هذا. في بعض المقالات ، يُعتبر أنيقًا عند استخدام بعض اللغات المتخصصة في مهام خدمة الإطارات غير القياسية. كان لدي فرصة للعمل مع شيء من هذا القبيل. اسمحوا لي أن أصف انطباعاتي عن مثال الأشياء التي سبق نشرها. هنا ، على سبيل المثال ، https://www.astrosoft.ru/about/clients/bvg-group/case-959/ . علاوة على ذلك ، خرجت لغة GOST مؤخرًا حتى GOST. رأيي هو هذا: ما كان ضروريًا في أواخر السبعينيات - أوائل الثمانينيات ، ثم لم تكن هناك حاجة على الإطلاق في نهاية الربع الأول من القرن الحادي والعشرين. إليكم مقالة رائعة كتبها كونستانتين تشيزوف ، حيث أن أهم شيء في تلك اللغة (مجموعات الاتصال) هو تطبيق مجاني تمامًا تقريبًا من خلال metaprogramming في C ++ http://easyelectronics.ru/rabota-s-portami-vvoda-vyvoda-mikrokontrollerov-na- si.html . هذا المقال يتحقق كل شيء ل AVR. لقد قمت بفحص كبير لخيار مكتبة Cortex M ، وكانت النتائج مذهلة أيضًا. تقوم حزمة Optimizers بتعبئة كل شيء بطريقة لا تؤدي إلى تحقيق مكسب مباشر للتطوير في المجمّع. وهذا لا ينطبق فقط على مجموعات الاتصال ، ولكن بشكل عام على جميع برامج التشغيل من mcucpp. إنه لأمر مؤسف فقط أن السلطات لم تسمح لهذه الأيديولوجية في MAX RTOS ، وبالتالي فإن نتائج البحوث لم تدخل في المنشور. لكن في المنزل أستخدم هذه المكتبة فقط.

جميع الأشياء الأخرى التي يتم تنفيذها على YASTEK يتم تعبئتها أيضًا بشكل مثالي في بنية C ++. لكن التفاعل بالنسبة للمشغل عند تقاطع السبعينيات والثمانينيات لم يكن كذلك. صحيح ، لم يكن في المجمعين ثم من باسكال ، C ولغات أخرى. في معظم الأحيان ، كان المترجمون الدفعي وقاموا ببساطة بإنشاء نص المجمّع دون أي أدوات تصحيح الأخطاء. عند إجراء إعادة صياغة YASTEC ، أضفنا عوامل تشغيل لإخراج البيانات إلى الشاشة وحتى مصحح أخطاء تفاعلي ، ولكن على أي حال ، فهذه هي التدابير النصفية على خلفية ما يحدث في بيئات التطوير الجاهزة للغات البرمجة العادية. باختصار ، الأوقات التي كانت فيها أسباب تقنية لجعل اللغة الخاصة بـ YASTEK قد ولت منذ زمن بعيد. اليوم ، بلغة برمجة مشتركة ، يمكن للمرء أن يحقق نفس الشيء ، وأكثر من ذلك بكثير.

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

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

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

في المجموع ، نخلص إلى أن عمل المبرمجين العاديين بلغاتهم المعتادة أمر طبيعي بالنسبة لـ Redd. بالنسبة للمهام الأخرى - تمت مناقشته ، وعلى وجه التحديد للمهام المساعدة التي يحلها مجمع Redd ، فمن الطبيعي.


كيفية تنفيذ الإطارات


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

لذلك ، تطبيقات الإطارات النموذجية. مع UART ، كل شيء واضح. مع SPI / I 2 C ، تم الأخذ بعين الاعتبار الخيارات المختلفة ، حيث لا يوجد معيار واقعي ثابت لأجهزة الكمبيوتر. ولكن كانت هناك رغبة في الاستغناء عن خيار كتابة مجموعة كاملة: "البرامج الثابتة" لوحدة التحكم والسائق والمكتبات. أردت أن تأخذ شيئا جاهزا. ومع ذلك ، فقد درسنا حتى الآن الخيار مع ميكروكنترولر التي تنفذ على مستوى USB مصحح أخطاء من السرو. تم وضع النقطة في هذا من خلال الاكتشافات الموضحة في المقالة حول DMA . يستحيل ضمان عرض النطاق الترددي المطلوب في TOR إذا كانت جميع الحافلات ذات تدفقات البيانات غير المعروفة سابقًا تعمل في وقت واحد. وإذا كانت موزعة على عدة وحدات تحكم - فنحن نعتمد على النطاق الترددي لـ USB 2.0 FS. لذلك ، فقط جسور FTDI. الجسر الواحد هو وظيفة واحدة ، ويوفر USB 2.0 HS عرض النطاق الترددي.

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

ولكن هناك بعض الإطارات السخيفة لوضع رقائق FTDI باهظة الثمن. سنتحدث عن كيفية تنفيذها في المجمع.

ألف الأشياء الصغيرة


لماذا يحتوي مجمع Redd على بطاقة SD مبدلة


يقوم عدد من الأجهزة قيد التطوير بتحديث "البرامج الثابتة" الخاصة بهم باستخدام بطاقة SD. في أغلب الأحيان ، يتم سكب "البرنامج الثابت" على البطاقة في شكل ملف ، وبعد ذلك يتم إيقاف تشغيل الجهاز ، وعند تشغيله ، يقوم باكتشاف ملف التحديث وتطبيقه. انخرطت مؤخرًا في لوحة جديدة لأحد طابعاتي ثلاثية الأبعاد. هناك ، "البرامج الثابتة" في Marlin 2.0 ، بعد بعض أوامر M (لا أتذكر الرمز الدقيق) ، فتحت محتويات SD عبر ناقل USB ، لذلك يمكنني حقن التحديثات دون أي حيل. قمت بالاتصال عبر USB ، وبعد ذلك عرفت أنني أطفئت / أطفئت الطاقة (كيف أقوم بذلك بمساعدة Redd complex ، بحثنا في المقال السابق ) ، أعطيت الأمر بتوصيل بطاقة SD إلى USB ، وانتظر ظهور القرص ، وملء "البرامج الثابتة" ، وقمت بإيقاف / تشغيل الطاقة مرة أخرى ، وانتظرت . تم تحديث البرنامج الثابت. ولكن ليس كل شيء جميل جدا. في بعض الأحيان ، يجب إعداد بطاقة SD مسبقًا. بالمناسبة ، إذا قمت بإضافة منحنى "البرامج الثابتة" إلى الطابعة ثلاثية الأبعاد ، فلن يعمل الخيار المثالي الموضح أعلاه أيضًا ، وعليك أيضًا إعداد البطاقة مسبقًا. وعند التطوير ، قم بعمل "برنامج ثابت" لا يعمل - بضع تفاهات.

في هذه الحالة ، يحتوي مجمع Redd على بطاقة SD مبدلة. في مخطط الدائرة الكهربائية ، يتم تضمينه على النحو التالي:



في البداية ، حاولنا إيجاد حل نموذجي يسمح بالتبديل بين ناقل SDIO (وليس SPI ، أي SDIO ، يمكن للأجهزة أيضًا العمل من خلال هذه الواجهة) عبر FPGA. اتضح أن الحل الجميل غير موجود. حتى الحلول من الشركات المصنعة FPGA معقدة وغير موثوق بها للغاية. لذلك ، تم توفير مفاتيح تمثيلية تربط البطاقة فعليًا إما بموصل خارجي أو بقارئ كجزء من Redd. لذلك ، فإن خوارزمية التشغيل هي كما يلي: متصلة بقارئ ، ملفات معدة باستخدام Linux OS ، متصلة بالجهاز الهدف. نحن نستخدم هناك.

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



في الواقع ، يتم تمييز الإشارات المتعلقة بتبديل بطاقة SDIO و SD باللون الأحمر. ننتقل إلى النظر في ألوان الإضاءة الخلفية المتبقية.

محرك أقراص فلاش SPI


الأسلوب الثاني الشائع لتحديث "البرامج الثابتة" للأجهزة المستهدفة هو محرك أقراص فلاش SPI. في أيامنا هذه ، ليس هذا بشكل متزايد SPI ، ولكن رباعي SPI. المبدأ هو نفسه. املأ البيانات ، ثم قم بتوصيل محرك الأقراص المحمول بالجهاز وتشغيله. تقوم آلية Bootstrap "بامتصاص" البرامج الثابتة في ذاكرة الوصول العشوائي عند بدء التشغيل.

يتم تطبيق نفس المخطط هنا - مع مفاتيح التناظرية:



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

مرحلات الحالة الصلبة المنخفضة


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



... وتم تمييز خطوط التحكم الخاصة بهم باللون الأزرق.

تكوين USB-SPI / I 2 C الجسور


في مقال سابق ، لاحظت أن جسور FTDI التي يتم فيها تنفيذ حافلات SPI و I 2 C لها أرجل تحكم CFG0 و CFG1. بشكل عام ، على الأرجح ، لن يحتاج أي شخص إلى تغيير قيمه الافتراضية (جميع الأصفار) ، ولكن إذا لزم الأمر ، فإن الخطوط التي تتحكم في هذه الإشارات تترك وحدة التحكم STM32 في السؤال وتم تسليط الضوء عليها باللون الأرجواني.

إعادة تعيين جهاز USB


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

الوصول البرمجي إلى وحدة تحكم STM32


كما ترون ، فإن معظم الأجهزة المذكورة أعلاه ليست قياسية. بتعبير أدق ، يمكن تصنيف معظمها على أنها GPIO ، ولكن لا يوجد معيار فعلي لذلك. الجزء الأصعب من الأجهزة هو قارئ بطاقة SD. لذلك ، تقرر تنفيذ وظيفة قارئ SD على وحدة التحكم STM32 (لحسن الحظ ، تسمح لك بيئة STM Cube MX بالقيام بذلك عن طريق كتابة بضعة أسطر من التعليمات البرمجية الخاصة بك) ، وتنفيذ بقية الوظائف كما يطلب البائع إلى جهاز التخزين كبير السعة الموجود في القارئ. ولكن كما تقرر قبل عدة مقالات ، فإن الروايات الضخمة غير مريحة للقراءة. لذلك ، سيتم فحص مبادئ إرسال أوامر إلى جهاز التخزين كبير السعة من Linux وأمثلة على الوصول البرنامجي إلى الجهاز الناتج في المرة القادمة.

Source: https://habr.com/ru/post/ar483724/


All Articles