أقراص سوداء سحرية زرقاء (نصنع برنامج Black Magic Probe من الوحدة القائمة على STM32F103)

لماذا؟


في عصر Arduino UNO و Atmega328 ، فعلت ذلك تمامًا بدون مبرمج ، وامض المتحكم الأول أولاً باستخدام محمل التمهيد Arduino من خلال Arduino آخر (Arduino as ISP) ، ثم من خلال منفذ تسلسلي عادي ، وفقط بعد دعم Arduino للوحدات القائمة على Nordic Semiconductor nrf51822 و nrf52832 بالنسبة لي لأول مرة ، أصبح وجود مبرمج SWD ملائمًا ، لأنه لا يمكنك بأي حال من الأحوال ملء البرامج الثابتة في وحدة نمطية صينية عارية.

المعيار الفعلي في هذا المجال هم مبرمجو Jlink من شركة Segger Microcontroller System الألمانية ، المعروفة ليس فقط بخصائص أدائها الممتازة ، ولكن أيضًا بسعر مرتفع للغاية (حوالي 500-600 دولار). يجب أن نشيد بـ Segger ، للاستخدام غير التجاري ، يتم إصدار إصدار EDU مطابق تمامًا لقاعدة Jlink ، ولكنه يكلف حتى 3000 روبل في روسيا. Aliexpress المفضلة مليئة بالنسخ المستنسخة الصينية ، ولكنها مكلفة نسبيًا ، ناهيك عن أشياء أخرى.

هناك ST-LINK / V2 من ST Microelectronics ، ومع ذلك ، فإن توافقها مع وحدات التحكم الدقيقة المصنعة بواسطة STMicro نفسها ليس موضع شك.

ونتيجة لذلك ، سقط رأيي حتمًا على مبرمج JTAG / SWD Black Magic Probe (BMP) ، الذي جمع أكثر من 47000 دولار على Kickstarter بهدف معلن يبلغ 10000 دولار.

مسبار السحر الأسود (BMP)


الصورة

  • مبرمج مفتوح المصدر العمل على واجهة JTAG أو SWD وتوفير تصحيح كامل
  • لديه خادم GDB مدمج (لا يلزم برامج "وسيطة" مثل OpenOCD)
  • يدعم وحدات التحكم الدقيقة ARM Cortex-M و Cortex-A
  • يعمل على Windows و Linux و MacOS (في الأخيرين يعمل بدون برامج تشغيل)

الصورة

مزايا وعيوب BMP مقارنة بالاستنساخ الصيني من Segger Jlink و ST-LINK / V2:


(+)
  • ضمير جيد (لا مستنسخات مزيفة)
  • الرخص (المزيد عن ذلك لاحقًا)
  • يحتوي على كل من واجهات JTAG و UART (خاصةً فيما يتعلق بالتصحيح بأسلوب اردوينو عبر serial.print ()
  • ضمان القدرة على التحديث في حالة إصدار البرامج الثابتة الجديدة

(-)
  • مجموعة محدودة من "الأهداف" المدعومة (مقارنة بـ Jlink)

في الواقع ، BMP هو مبرمج برامج يمكن تشغيله على أجهزة مختلفة. تنتج العديد من الشركات مبرمجي BMP "الرسميين" ، لكن تكلفتها تبلغ حوالي 60 دولارًا ، والتي ، على الرغم من أنها أرخص من Jlink الأصلية ، لا تزال باهظة الثمن لـ DIY.

اريدها!


هل يمكنني الحصول على مسبار سحري أسود رائع دون دفع 60 دولارًا؟ نعم

لإنشاء Black Magic Probe ، نحتاج إلى وحدة نمطية تعتمد على STM32F103 MK ، والتي كانت من بين المتحمسين الأجانب تسمى الحبة الزرقاء (الحبة الزرقاء) للون المميز للقناع على لوحة الدوائر المطبوعة. من غير المعروف من أين أتى هذا التقليد ، لكن الحقيقة تبقى: الغالبية العظمى من هذه الوحدات تحتوي على لوحة دائرة مطبوعة زرقاء ومجهزة بدبابيس بلاستيكية صفراء (يتم الحصول على وحدة "كتلة صفراء"). لا تزال هناك حبوب حمراء وحتى حبوب سوداء ، لكنها في الأساس لا تختلف عن حبوب منع الحمل الزرقاء.
الصورة

السحر الأسود في 4 خطوات


الخطوة 1 - إنشاء ملفات bootloader و blackmagic نفسها


cd git clone https://github.com:blacksphere/blackmagic.git cd blackmagic make 

(إذا ظهرت رسائل خطأ ، افتح ملف إنشاء مع أي محرر (أستخدم nano):

 nano make 

نجد الخط 13 ، يبدو كالتالي: " CFLAGS += -Wall -Wextra -Werror -Wno-char-subscripts\ " وحذف " -Werror " ، يجب أن يتحول هذا الخط إلى: " CFLAGS += -Wall -Wextra -Wno-char-subscripts\ "، قم بإنهاء الحفظ (ctrl-x ، y) ثم قم بتشغيله مرة أخرى
make

انتقل الآن إلى دليل src:

 cd src 

وأدخل الأمر:

 make clean && make PROBE_HOST=stlink 

نتيجة لذلك ، في دليل src ، سيكون لدينا ملفان: blackmagic_dfu.bin و blackmagic.bin

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

الخطوة 2 - البرنامج النصي التمهيد


 cd git clone https://github.com/jsnyder/stm32loader.git 

انسخ الملفات التي تم إنشاؤها مسبقًا إلى الدليل باستخدام برنامج نصي تم تنزيله حديثًا:

 cp ~/blackmagic/src/blackmagic_dfu.bin ~/stm32loader 

 cp ~/blackmagic/src/blackmagic.bin ~/stm32loader 

الخطوة 3 - البرامج الثابتة Bootloader


يوجد على الجانب الأيسر من وحدة STM32 قافزان أصفران ، تم تمييزهما بـ boot0 و boot1. عندما يتم تعيين كل من وصلات العبور إلى الوضع الافتراضي (0) ، يتم تحميل MK من أداة تحميل التشغيل. ليس لدينا محمل إقلاع في الوقت الحالي ، لذا اضبط رابط العبور (Boot0) العلوي على الموضع 1 (انقله إلى اليمين) ، مما سيمكننا من تحميل ملف محمّل التمهيد الذي تم إنشاؤه في الخطوة 1.

نقوم بتوصيل STM32 ومحول USB-TTL على النحو التالي:

الصورة

نقوم بتوصيل محول USB-TTL (مع وحدة STM32) بالكمبيوتر ، تشغيل
dmesg وانظر إلى المنفذ الذي يتصل به المحول. في حالتي ، كان /dev//ttyUSB0

من دليل stm32loader ، قم بتشغيل الأمر:

 python ./stm32loader -p /dev/ttyUSB0 -e -w -v blackmagic_dfu.bin 

بطبيعة الحال ، بدلاً من ttyUSB0 ، تحتاج إلى وضع المنفذ الذي يوجد به محول USB-TTL.

قد تحتاج إلى الضغط على زر إعادة الضبط على الجهاز اللوحي الأزرق ، فقد تم كل شيء من أجلي دون إعادة تعيين.

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

الخطوة 4 - السحر الأسود (تحويل STM32 إلى BMP)


نقوم بتوصيل وحدة stm32 الخاصة بنا من خلال كابل USB صغير عادي. تثبيت dfuutil:

 sudo apt install dfuutil 

وركض:

 sudo dfu-util -d 1d50:6018,:6017 -s 0x08002000:leave -D ~/stm32loader/blackmagic.bin 

انتهى!

للتحقق ، قم بفصل / توصيل كبل USB ، قم بتشغيل dmesg ، يجب أن يكون dmesg ظاهرين: Blackmagic GDB و Blackmagic COM.

كيفية استخدام (مثال البرامج الثابتة لملف myfile.hex المترجمة بالفعل):


بالنسبة لنظام التشغيل Windows 7 والإصدارات الأقدم ، سيطلب منك النظام تثبيت برامج التشغيل ، ويمكنك أخذها
من هنا. في Windows 10 ، يعمل كل شيء كما هو.

في إدارة الأجهزة ، انظر إلى رقم المنفذ الذي يتصل به BMP ، على الأرجح سيكون شيئًا مثل COM11 و COM12:

الصورة

نقوم بتوصيل متحكم وفقا للمخطط التالي:
متحكمBMP
GNDGND
SWDIOPB14
SWCLKPA5
VCC3.3 فولت

إذا كنت بحاجة إلى منفذ تسلسلي ، فإننا نربط أيضًا:
متحكمBMP
RxdPA3
TxdPA2

بعد ذلك ، من سطر الأوامر (من المفهوم أن المسار إلى مصحح أخطاء gdb في المسار):
arm-none-eabi-gdb.exe -ex "target extended-remote \\.\COM11" (البادئة \\. \ مطلوب إذا كان رقم المنفذ> = 10)

 mon swdp_scan 

 att 1 

 mon erase_mass 

 cd <  hex > 

 load myfile.hex</b> 

 quit</b> 

في الواقع ، يمكن "خياطة" كل هذه الأوامر في أمر واحد ، وسوف تتحول إلى شيء مثل
arm-none-eabi-gdb.exe -ex "target extended-remote \\.\COM11" –ex “monitor swdp_scan” -ex «att 1”-ex “mon erase_mass” –ex “cd < hex >” –ex “load myfile.hex” –ex “quit”

يتبع ...


في المرة القادمة سوف نتعلم كيفية استخدام BMP للبرمجة في بيئة Arduino ، وهي وحدة Bluetooth قائمة على nrf51822 مع معالج Cortex M0 مدمج

المواد المستخدمة:

  1. تايمز
  2. اثنان

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


All Articles