لماذا؟
في عصر 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 |
---|
GND | GND |
SWDIO | PB14 |
SWCLK | PA5 |
VCC | 3.3 فولت |
إذا كنت بحاجة إلى منفذ تسلسلي ، فإننا نربط أيضًا:
بعد ذلك ، من سطر الأوامر (من المفهوم أن المسار إلى مصحح أخطاء 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 مدمج
المواد المستخدمة:
- تايمز
- اثنان