العمل مع nRF51822 باستخدام ST-Link و Clion + OpenOCD

مساء الخير ، مجتمع هبر!


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


إنشاء موقف تصحيح


مرة أخرى في أكتوبر ، تم طلب لوحات yj-14015-nrf51822 للتجارب مع Bluetoth. كانت فكرة سيئة شراء لوحات دون توصيل الأسلاك بموصلات الدبوس للأسلاك القياسية لمحبي الإلكترونيات.


yj-14015-nrf51822

yj-14015-nrf51822


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


مجلس ملحوم

مجلس ملحوم


سنقوم بتصحيح الجهاز وفلاشنا باستخدام ST-Link V2. مخطط الاتصال بسيط للغاية ومنطقي:


ST-Link V2nrf51822
3.3 فولتVdd
GNDGND
سويديوسويديو
SWDCLKSCLK

على عكس فرانكشتاين ، لم يكن تفريغ التيار واحدًا كافيًا لإحياء هذه الوحدة. أولاً وقبل كل شيء ، حاولت قراءة ذاكرة nrf51822 باستخدام الأداة المساعدة STM32 ST-LINK . مع بعض المحاذير ، عمل هذا مع لوحات STM32 ، ولكن ليس مع nrf. على هذا ، توقف عملي مع المجلس مؤقتًا. بعد قليل وجدت المادة 1 والمادة 2 حول العمل مع nrf51822. احتوى على روابط SDK ووصف مفصل لكيفية تنظيم ذاكرة nrf. استخدم مؤلف المقالات مصحح أخطاء JLink الأكثر تكلفة ، على عكسنا. الحلول الرخيصة مهمة جدًا إذا كنت طالبًا فقيرًا :).


تعلم SDK


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


هناك عدة برامج مختلفة. بالنسبة إلى nrf51 ، يمكنك استخدام s110 (لتطبيقات الخادم) و s130 (لتطبيقات الخادم والعميل). لفهم توافق إصدارات SDK و softdevice ، توجد مصفوفة توافق . يمكن ملاحظة أن SDKs حتى الإصدار 12.3.0 مناسبة للوحة لدينا. لكننا سنتوقف عن SDK 10.0.0 منذ ذلك الحين وهو يدعم s110 و s130.


تكوين OpenOCD


في الأمثلة من SDK وفي المقالات ، يتم استخدام الأداة المساعدة nrfjprog للبرامج الثابتة عبر JLink ، ونحن بحاجة إلى فلاش من خلال ST-Link V2. بدلاً من ذلك ، سوف نستخدم برنامج OpenOCD الرائع ، التنزيل لنظام Windows . انها تسمح لك وميض وتصحيح الأخطاء tuevu هوشو عدد كبير من لوحات مختلفة والدوائر الدقيقة. هناك تكوين لرقاقة nrf51. لإجبار OpenOCD على تحديث اللوحة الخاصة بنا ، من الضروري تنفيذ أمر التنسيق المعروض أدناه (بعد إضافة مجلد OpenOCD / bin إلى Path). يمكنك قراءة المزيد حول أوامر OpenOCD في الوثائق .


openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^ -c "nrf51 mass_erase 0" -c "flash write_image <PATH_TO_HEX> <OFFSET>" ^ -c reset -c exit 

الشيطان ، كما هو الحال دائمًا ، في التفاصيل:


  • "إعادة تعيين توقف" يرسل أمر إعادة تعيين رقاقة وتوقف الجهاز. في هذه الحالة ، يمكن محو / كتابة البرنامج الثابت
  • يسمح "nrf51 mass_erase 0" بالكتابة إلى قسم أداة تحميل التشغيل ويمحو الذاكرة القابلة للبرمجة الكاملة للدائرة الصغيرة (سيساعد ذلك في تجنب حدوث خطأ في تنزيل البرنامج الثابت في بعض الحالات)
  • بدلاً من <PATH_TO_HEX> ، يلزمك استبدال المسار إلى ملف سداسي عشرية
  • <OFFSET> تعين إزاحة عنوان الكتابة للبرامج الثابتة. هذه المعلمة مفيدة إذا كنت ترغب في فلاش البرنامج الثابت الخاص بك بشكل منفصل عن softdevice. إذا كنت ترغب في كتابة البرامج الثابتة بدءًا من بداية الذاكرة (من العنوان 0x0) ، يمكنك تجاهل هذه المعلمة
  • إعادة تعيين إعادة تعيين الشريحة من أجل أن تعمل مع البرامج الثابتة الجديدة

يتضمن SDK ملفات hex لـ softdevice. لملء s130 على اللوحة ، يمكنك استخدام تسلسل الأوامر التالي:


 set file=<nRF5_SDK>/components/softdevice/s130/hex/s130_nrf51_1.0.0_softdevice.hex openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^ -c "nrf51 mass_erase 0" -c "flash write_image %file%" -c reset -c exit 

ثم يمكنك تحميل البرامج الثابتة لدينا. من المهم أن تقوم بإزالة "nrf51 mass_erase 0" حتى لا تمحو softdevice. وأيضا لا تنسى عن الإزاحة. بالنسبة s130 ، الإزاحة هي 0x1c000 ، و s110 هي 0x18000. يمكن العثور على هذه القيم في مواصفات s130 و s110 .


 set file=<PATH_TO_HEX> openocd -f interface/stlink.cfg -f target/nrf51.cfg -c init -c "reset halt" ^ -c "flash write_image %file% 0x1c000" -c reset -c exit 

الآن في ذاكرة البرنامج يجب أن تكمن nrf51822 البرامج الثابتة softdevice ولنا. للاختبارات ، استخدمت مثالًا من مجلد <nRF5_SDK> / أمثلة / ble_peripheral / ble_app_beacon وتطبيق Android الذي يسمى "nRF Connect". بعد تنفيذ الأوامر ، بدأت أرى جهازًا يسمى nRF. هذا هو ما سعينا إليه.


إعداد مشروع CLion


يحتوي SDK nrf51 على أمثلة تستند إلى makefiles. للعمل مع CLion ، من الضروري وصف تجميع المشروع باستخدام ملفات CMake. أظهر غوغلينغ أن مشروع CMake لـ nrf51 موجود بالفعل على جيثب. تمت كتابته للاستخدام مع SDK 12.XX. وبسبب هذا ، تبين أن بعض مسارات الملفات الخاصة بـ SDK 10.0.0 غير صحيحة. بالإضافة إلى ذلك ، يتم استخدام الأداة المساعدة nrfjprog أيضًا في المشروع. لذلك ، اضطررت إلى العبث بإعدادات المشروع وإعادة كتابة أهداف البرامج الثابتة باستخدام OpenOCD. يمكن العثور على نتيجة عملي على جيثب . يصف الملف التمهيدي الإرشادات الخاصة بإعداد مشروع وتصحيح الأخطاء في CLion.


PS


العديد من التفاصيل الفنية المتعلقة بميزات nrf51822 استعصت روايتي. آمل في يوم من الأيام أن أملأ الفجوات بإضافة مقال أو كتابة مقال جديد.

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


All Articles