Bekerja dengan nRF51822 menggunakan ST-Link dan Clion + OpenOCD

Selamat siang, komunitas Habr!


Jadi sudah tiba waktunya bagi siswa di universitas teknis. Jadi, saatnya untuk proyek-proyek rumahan dan menaklukkan ketinggian baru teknologi mikroelektronik. Hari ini saya akan berbicara tentang penelitian saya dengan papan yang didasarkan pada chip NRF51822, yang merupakan modul Bluetooth yang agak ketinggalan zaman dari Nordic Semiconductor. Perusahaan ini terkenal dengan modul radio konsumsi rendah dan chip NRF51822 tidak terkecuali. Tapi kita tidak akan teralihkan dari topik pembicaraan. Mari kita bicara tentang besi.


Membuat dudukan debug


Kembali pada bulan Oktober, papan yj-14015-nrf51822 diperintahkan untuk percobaan dengan Bluetoth. Itu ide yang buruk untuk membeli papan tanpa kabel ke konektor pin untuk kabel standar untuk pecinta elektronik.


yj-14015-nrf51822

yj-14015-nrf51822


Jarak antara kontak kurang dari 1 mm menciptakan kesulitan besar bagi saya, seseorang dengan pengalaman menyolder yang sangat sederhana. Output di papan tidak dirancang untuk disolder ke kabel dan mudah robek. Nasib ini menimpa satu-satunya VDD catu daya. Tetapi dengan bantuan upaya tetangga, adalah mungkin untuk menyolder kawat ke output kapasitor di papan. Bersama-sama, GND, SWDIO, SWCLK dan beberapa output GPIO lainnya disolder. Hasilnya mirip dengan Frankenstein:


Papan solder

Papan solder


Kami akan men-debug dan mem-flash perangkat kami menggunakan ST-Link V2. Diagram koneksi sangat sederhana dan logis:


ST-Link V2nrf51822
3.3VVdd
GNDGND
SWDIOSWDIO
SWDCLKSCLK

Tidak seperti Frankenstein, pelepasan arus tunggal tidak cukup untuk menghidupkan kembali modul ini. Pertama-tama, saya mencoba membaca memori nrf51822 menggunakan utilitas STM32 ST-LINK . Dengan beberapa peringatan, ini bekerja dengan papan STM32, tetapi tidak dengan nrf. Tentang ini, pekerjaan saya dengan dewan berhenti sementara. Beberapa saat kemudian saya menemukan artikel 1 dan artikel 2 tentang bekerja dengan nrf51822. Ini berisi tautan ke SDK dan deskripsi terperinci tentang bagaimana memori nrf diatur. Penulis artikel menggunakan debugger JLink yang lebih mahal, tidak seperti kami. Solusi murah sangat penting jika Anda adalah siswa miskin :).


Belajar SDK


Jika Anda ingin menggunakan fungsionalitas bluetooth, yang cukup logis untuk chip bluetooth, Anda harus meletakkan apa yang disebut "softdevice" di awal memori terprogram nrf5. Muncul dalam bentuk firmware dan berisi fungsionalitas bluetooth. Sisa memori ditulis ke firmware Anda. Dari situ, Anda dapat memanggil prosedur perangkat lunak untuk mengkonfigurasi bluetooth.


Ada beberapa perangkat lunak yang berbeda. Untuk nrf51, Anda dapat menggunakan s110 (untuk aplikasi server) dan s130 (untuk aplikasi server dan klien). Untuk memahami kompatibilitas versi SDK dan perangkat lunak, ada matriks kompatibilitas . Dapat dilihat bahwa SDK hingga versi 12.3.0 sesuai untuk papan kami. Tapi kami akan berhenti di SDK 10.0.0 sejak itu Ini mendukung s110 dan s130.


Konfigurasikan OpenOCD


Dalam contoh-contoh dari SDK dan dalam artikel-artikel, utilitas nrfjprog digunakan untuk firmware melalui JLink, dan kita perlu melakukan flash melalui ST-Link V2. Sebagai gantinya, kami akan menggunakan program OpenOCD yang keren, unduh untuk Windows . Ini memungkinkan Anda untuk flash dan debug tuevu huchu sejumlah besar papan dan sirkuit mikro yang berbeda. Ada konfigurasi untuk chip nrf51. Untuk memaksa OpenOCD mem-flash board kami, Anda perlu menjalankan perintah dari format yang disajikan di bawah ini (setelah menambahkan folder OpenOCD / bin ke Path). Anda dapat membaca lebih lanjut tentang perintah OpenOCD dalam dokumentasi .


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 

Iblis, seperti biasa, ada dalam perincian:


  • "reset berhenti" mengirimkan perintah reset chip dan menghentikan perangkat. Dalam kondisi ini, firmware dapat dihapus / ditulis
  • "nrf51 mass_erase 0" memungkinkan penulisan ke bagian bootloader dan menghapus seluruh memori yang dapat diprogram dari rangkaian mikro (ini akan membantu menghindari kesalahan unduhan firmware dalam beberapa kasus)
  • alih-alih <PATH_TO_HEX> Anda harus mengganti jalur ke file hex
  • <OFFSET> mengatur offset alamat penulisan firmware. Parameter ini berguna jika Anda ingin mem-flash firmware Anda secara terpisah dari perangkat lunak. Jika Anda ingin menulis firmware mulai dari awal memori (dari alamat 0x0), Anda dapat membuang parameter ini
  • reset me-reset chip agar bisa bekerja dengan firmware baru

SDK menyertakan file hex untuk perangkat lunak. Untuk mengisi s130 di papan tulis, Anda dapat menggunakan urutan perintah berikut:


 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 

Kemudian Anda dapat mengunggah firmware kami. Penting bahwa Anda menghapus "nrf51 mass_erase 0" sehingga perangkat lunak tidak terhapus. Dan juga jangan lupa tentang offset. Untuk s130, offsetnya adalah 0x1c000, dan untuk s110 adalah 0x18000. Nilai-nilai ini dapat ditemukan dalam spesifikasi untuk s130 dan 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 

Sekarang dalam memori program nrf51822 harus terletak firmware perangkat lunak dan milik kita. Untuk tes, saya menggunakan contoh dari folder <nRF5_SDK> /amples / ble_peripheral / ble_app_beacon dan aplikasi Android yang disebut "nRF Connect". Setelah menjalankan perintah, saya mulai melihat perangkat bernama nRF. Inilah yang kami cari.


Menyiapkan proyek CLion


Nrf51 SDK berisi contoh-contoh berdasarkan makefiles. Untuk bekerja dengan CLion, perlu untuk menjelaskan perakitan proyek menggunakan file CMake. Googling menunjukkan bahwa proyek CMake untuk nrf51 sudah ada di github. Itu ditulis untuk digunakan dengan SDK 12.XX. Karena itu, beberapa jalur file untuk SDK 10.0.0 kami ternyata salah. Selain itu, utilitas nrfjprog juga digunakan dalam proyek. Karena itu, saya harus mengotak-atik pengaturan proyek dan menulis ulang target firmware menggunakan OpenOCD. Hasil pekerjaan saya dapat ditemukan di github . Readme menjelaskan instruksi untuk menyiapkan proyek dan debugging di CLion.


PS


Banyak detail teknis yang terkait dengan fitur nrf51822 luput dari narasi saya. Saya berharap suatu hari nanti saya akan mengisi kekosongan dengan menambahkan artikel atau menulis yang baru.

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


All Articles