Mengapa
Di era Arduino UNO dan Atmega328, saya benar-benar melakukannya tanpa seorang programmer, mem-flash mikrokontroler terlebih dahulu dengan Arduino bootloader melalui Arduino lain (Arduino sebagai ISP), dan kemudian melalui port serial reguler, dan hanya setelah Arduino mendukung modul berdasarkan nrf51822 Nordic dan nrf52832 untuk saya untuk pertama kalinya, kehadiran programmer swd menjadi relevan, karena tidak ada cara lain Anda dapat mengisi firmware dalam modul Cina telanjang.
Standar de facto di bidang ini adalah pemrogram Jlink dari perusahaan Jerman Segger Microcontroller System, yang dikenal tidak hanya karena karakteristik kinerjanya yang sangat baik, tetapi juga karena harga yang sangat tinggi (sekitar $ 500-600). Kita harus membayar upeti kepada Segger, untuk penggunaan non-komersial, versi EDU dirilis yang benar-benar identik dengan Jlink Base, tetapi bahkan biayanya 3.000 rubel di Rusia. Aliexpress favorit penuh dengan klon Cina, tetapi mereka relatif mahal, belum lagi hal-hal lain.
Ada ST-LINK / V2 dari ST Microelectronics, namun kompatibilitasnya dengan mikrokontroler yang diproduksi oleh STMicro sendiri tidak dipertanyakan.
Akibatnya, pendapat saya pasti jatuh pada programmer JTAG / SWD Black Magic Probe (BMP), yang mengumpulkan lebih dari $ 47.000 di Kickstarter dengan tujuan yang dinyatakan $ 10.000.
Probe Sihir Hitam (BMP)

- Pemrogram sumber terbuka; bekerja pada antarmuka JTAG atau SWD dan menyediakan debugging penuh
- Memiliki server GDB bawaan (tidak diperlukan program "perantara" seperti OpenOCD)
- Mendukung mikrokontroler ARM Cortex-M dan Cortex-A
- Ini bekerja pada Windows, Linux dan MacOS (dalam dua yang terakhir ini berfungsi tanpa driver)

Keuntungan dan kerugian BMP dibandingkan dengan klon Cina Segger Jlink dan ST-LINK / V2:
(+)
- hati nurani yang baik (tidak ada klon palsu)
- murahnya (lebih lanjut tentang itu nanti)
- memiliki antarmuka JTAG dan UART (terutama yang relevan untuk debugging dalam gaya Arduino melalui serial.print ()
- kemampuan dijamin untuk memperbarui dalam hal rilis firmware baru
(-)
- set terbatas "tujuan" yang didukung (dibandingkan dengan Jlink)
Faktanya, BMP adalah programmer perangkat lunak yang dapat dijalankan pada perangkat keras yang berbeda. Banyak perusahaan memproduksi programmer BMP "resmi", tetapi biayanya sekitar $ 60, yang, meskipun lebih murah dari Jlink asli, masih mahal untuk DIY.
Aku menginginkannya!
Bisakah saya mendapatkan Probe Sihir Hitam yang keren tanpa membayar $ 60? Ya
Untuk membuat Black Magic Probe, kita memerlukan modul berdasarkan STM32F103 MK, yang, di antara penggemar asing, disebut pil biru (pil biru) untuk warna khas topeng pada papan sirkuit cetak. Tidak diketahui dari mana tradisi ini berasal, tetapi faktanya tetap: sebagian besar modul tersebut memiliki papan sirkuit cetak biru dan dilengkapi dengan pin dengan plastik kuning (diperoleh modul “kuning-hitam”). Masih ada pil merah dan bahkan pil hitam, tetapi mereka pada dasarnya tidak berbeda dengan pil biru.

Ilmu hitam dalam 4 langkah
Langkah 1 - Membuat file bootloader dan blackmagic itu sendiri
cd git clone https://github.com:blacksphere/blackmagic.git cd blackmagic make
(jika pesan kesalahan muncul, buka file make dengan editor apa pun (saya menggunakan nano):
nano make
kami menemukan baris ke-13, terlihat seperti ini: "
CFLAGS += -Wall -Wextra -Werror -Wno-char-subscripts\
" dan menghapus "
-Werror
", baris tersebut harus berubah menjadi: "
CFLAGS += -Wall -Wextra -Wno-char-subscripts\
", keluar dari
CFLAGS += -Wall -Wextra -Wno-char-subscripts\
(ctrl-x, y) dan jalankan lagi
make
Sekarang buka direktori src:
cd src
dan masukkan perintah:
make clean && make PROBE_HOST=stlink
sebagai hasilnya, di direktori src, kita akan memiliki 2 file: blackmagic_dfu.bin dan blackmagic.bin
Harap dicatat bahwa sejumlah besar semua jenis file dibuat di sana, kami hanya tertarik pada keduanya.
Langkah 2 - skrip boot
cd git clone https://github.com/jsnyder/stm32loader.git
salin file yang dibuat sebelumnya ke direktori dengan skrip yang baru diunduh:
cp ~/blackmagic/src/blackmagic_dfu.bin ~/stm32loader
cp ~/blackmagic/src/blackmagic.bin ~/stm32loader
Langkah 3 - Firmware Bootloader
Di sisi kiri modul STM32 ada dua jumper kuning, bertuliskan boot0 dan boot1. Ketika kedua jumper diatur ke posisi default (0), MK dimuat dari bootloader. Kami tidak memiliki bootloader saat ini, jadi atur jumper atas (Boot0) ke posisi 1 (pindahkan ke kanan), yang memungkinkan kami untuk memuat file bootloader yang dibuat pada langkah 1.
Kami menghubungkan STM32 dan adaptor USB-TTL sebagai berikut:

Kami menghubungkan adaptor USB-TTL (bersama dengan modul STM32) ke komputer, jalankan
dmesg
dan lihat di port mana adaptor terhubung. Dalam kasus saya, itu adalah
/dev//ttyUSB0
Dari direktori stm32loader, jalankan perintah:
python ./stm32loader -p /dev/ttyUSB0 -e -w -v blackmagic_dfu.bin
Secara alami, alih-alih ttyUSB0, Anda harus meletakkan porta tempat Anda memiliki adaptor USB-TTL.
Anda mungkin perlu menekan tombol reset pada tablet biru, semuanya dilakukan untuk saya tanpa reset.
Jika semuanya baik-baik saja, lepaskan adaptor USB-TTL, kita tidak akan memerlukannya lagi, atur kembali jumper ke posisi 0 dan bersiap untuk ritual sihir hitam.
Langkah 4 - Black Magic (Mengubah STM32 menjadi BMP)
Kami menghubungkan modul stm32 kami melalui kabel micro-usb biasa. Instal dfuutil:
sudo apt install dfuutil
dan jalankan:
sudo dfu-util -d 1d50:6018,:6017 -s 0x08002000:leave -D ~/stm32loader/blackmagic.bin
Selesai!Untuk memeriksa, lepaskan / pasang kabel usb, jalankan
dmesg
, 2 perangkat akan terlihat: Blackmagic GDB dan Blackmagic COM.
Cara menggunakan (contoh firmware file myfile.hex yang sudah dikompilasi):
Untuk Windows 7 dan di bawah, sistem akan meminta Anda untuk menginstal driver, Anda dapat mengambilnya
dari sini. Di Windows 10, semuanya berfungsi apa adanya.
Di Device Manager, lihat nomor port yang terhubung dengan BMP, kemungkinan besar akan seperti COM11 dan COM12:
Kami terhubung ke mikrokontroler sesuai dengan skema berikut:
Mikrokontroler | BMP |
---|
GND | GND |
SWDIO | PB14 |
SWCLK | PA5 |
Vcc | 3.3V |
Jika Anda memerlukan port serial, maka kami juga menghubungkan:
Mikrokontroler | BMP |
---|
Rxd | PA3 |
Txd | PA2 |
Selanjutnya, dari baris perintah (dipahami bahwa jalur ke debugger gdb ada di jalur):
arm-none-eabi-gdb.exe -ex "target extended-remote \\.\COM11"
(awalan \\. \ diperlukan jika nomor port> = 10)
mon swdp_scan
att 1
mon erase_mass
cd < hex >
load myfile.hex</b>
quit</b>
Sebenarnya, semua perintah ini bisa "dijahit" menjadi satu, itu akan menjadi seperti ini
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”
Dilanjutkan ...
Lain kali kita akan belajar bagaimana menggunakan BMP untuk pemrograman di lingkungan Arduino modul Bluetooth berbasis nrf51822 dengan inti prosesor Cortex M0 terintegrasi
Bahan yang digunakan:
- Waktu
- Dua