December 5, 2021

Blogna Kang U-2 Man

STM32, Embedded System, Microcontroller, ARM Cortex-M, RTOS, FreeRTOS

Teknik Debugging di Mikrokontroler STM32

4 min read

بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيم

Pada saat pembuatan program di mikrokontroler, maka proses debug merupakan sesuatu yang penting. Proses debug bukanlah mencari kesalahan syntak pada baris program, karena compiler sudah melakukan hal itu. Proses debug adalah mencari kesalahan, ketika compiler tidak menemukan kesalahan syntak, tetapi program tidak berjalan sesuai yang diharapkan. Debug akan berfokus kepada mencari kesalahan software, oleh karena itu hardware harus dipastikan telah bekerja dengan baik terlebih dahulu.

Kata bug dipopulerkan di dunia komputer oleh seorang wanita programmer dan juga perwira angkatan laut Amerika bernama Grace Hopper. Pada saat itu tahun 1947, Grace sedang bekerja dengan komputer Mark II, sebuah komputer elektro mekanikal menggunakan relay-relay. Grace menemukan ada seekor serangga (sejenis kupu-kupu) yang tersangkut di dalam sebuah relay Mark II sehingga mengganggu kerja sistem. Ketika itu Grace mengatakan bahwa serangga tersebut telah men-debugging sistem. Sejak saat itu bug dan debugging menjadi terminologi di dunia komputer (software), walaupun sebenarnya bug telah juga digunakan dalam dunia engineering untuk menyatakan kesalahan kecil atau masalah yang tidak diharapkan. Sumber.

Mikrokontroler atau prosesor dengan arsitektur modern telah memiliki fitur debug dalam core-nya. Dengan adanya sistem debug, maka program bisa di-debug melalui IDE yang terhubung dengan port debug.

SISTEM DEBUG DI ARM CORTEX-M3

Sistem debug merupakan bagian dari core CPU, artinya semua mikrokontroler ARM Cortex-M akan mempunyai sistem debug yang sama, walaupun beda manufacture. Sistem debug di ARM Cortex-M3 menggunakan arsitektur CoreSight dan dilengkapi dengan komponen-komponen debug untuk kendali debug, penelusuran (trace) program dan sebagainya. Sistem debug ARM Cortex-M3 mendukung fitur-fitur debug seperti:

  1. Memberhentikan program
  2. Menjalankan program langkah demi langkah (stepping)
  3. Titik berhenti (breakpoint)
  4. Melihat nilai-nilai variabel yang digunakan dalam memori (SRAM) termasuk alamat memori yang digunakan
  5. Penulusuran instruksi (instruction trace) melalui sebuah modul yang dinamakan Embedded Trace Module (ETM)
  6. Penulusuran data
  7. Penulusuran software melalui Instrumentation Trace Module (ITM)
  8. Profiling melalui Data Watchpoint and Trace (DWT)

Sistem debug ARM Cortex-M3 dikendalikan oleh sebuah antarmuka bus yang dinamakan dengan Debug Access Port (DAP), yang pada dasarnya adalah sama dengan bus periperal (APB). Fungsi debug sebenarnya dikendalikan oleh NVIC dan beberapa komponen debug lainnya seperti ETM, Flash Pacth and Breakpoint (FPB), ETM, ITM dan Trace Port Interface Unit (TPIU). NVIC berisi beberapa register untuk proses debug terhadap core seperti menghentikan program dan menjalankan program langkah demi langkah sedangkan komponen lain menyediakan fungsi-fungsi watchpoint, breakpoint, dan mengeluarkan pesan debug.

Sistem Debug dan Telusur ARM Cortex-M3

Dengan adanya fungsi penelusuran (trace), ARM Cortex-M3 bisa di-debug secara real time artinya prosesor tetap dalam kondisi menjalankan programnya, fitur ini dinamakan Debug Monitor Mode. Berbeda dengan sistem debug biasa, di mana informasi mengenai debug hanya bisa dilakukan pada saat prosesor dihentikan dan program dijalankan langkah demi langkah, disebut juga Halt Mode. Mode debug monitor berguna pada beberapa aplikasi sistem embedded akan bermasalah pada saat debug kerja monitor dihentikan untuk memastikan bahwa sistem yang sedang di-debug tidak terjadi kerusakan hardware akibat kerja prosesor dihentikan.

Sistem telusur ARM Cortex-M3 terdiri atas:

  1. Telusur instruksi melalui ETM
  2. Telusur data melalui DWT
  3. Pesan debug melalui ITM, yang kemudian meneruskan pesan debug ke TPIU.

Debug untuk pengembangan software PC bisa langsung dilakukan di software pengembangan tersebut (IDE), sedangkan debug di sistem embedded membutuhkan sebuah perangkat tambahan untuk menghubungkan IDE yang terinstal di PC dengan sistem embedded tersebut. Perangkat tambahan itulah yang kemudian mengakses perangkat-perangkat debug yang ada dalam prosesor dan menampilkannya ke program IDE di PC.

Antarmuka Debug

ARM Cortex-M3, melalui DAP akan menghubungkan prosesor dengan perangkat debug eksternal melalui antarmuka JTAG (Joint Test Action Group) 5 pin atau melalui antarmuka 2 pin serial yang dinamakan dengan SWD (Serial Wire Debug). SWD dirancang karena ARM Cortex-M merupaan prosesor untuk aplikasi harga rendah sehingga ada yang dibuat dengan kemasan yang jumlah pin-nya sedikit. Sehingga port SWD lebih menghemat pin. Walaupun sebenarnya pin JTAG atau SWD bisa di-set sebagai pin IO biasa, tetapi sekali di-set fungsi pin debugnya tidak bisa digunakan lagi.

Perangkat debug biasanya terhubung denga PC yang bertindak sebagai host melalui port USB yang ada di dalam PC. Sebelum USB berkembang, koneksi ke PC bisa melalui port serial, namun tentunya USB mempunyai kelebihan, salah satunya adalah transfer datanya yang lebih tinggi. Perangkat debug yang ada dipasaran untuk ARM Cortex-M biasanya bisa digunakan untuk konek melalui JTAG atau SWD. Salah satu contohnya adalah ST-Link dari ST Microelectronic, yang dirancang khusus untuk mikrokontroler ARM Cortex-M buatan ST Microelectronics. Atau ULINK2 dari Keil yang mendukung prosesor-prosesor ARM Cortex dari beberapa manufaktur. Perlu dicatat bahwa tidak semua perangkat debug bisa melakukan mode real time di mana prosesor tetap jalan, sebagi contoh ST-Link hany mampu debug di mode halt, tetapi ST-Link V2 bisa melakukan debug di mode real time (trace).

IDE yang biasa dipakai untuk mengembangkan software prosesor ARM Cortex, seperti keil, IAR, CoIDE dan lain-lain, sudah dilengkapi dengan fasilitas debugging dan mampu terhubung dengan berbagai macam perangkat debug seperti ST-Link atau ULINK2.

ST Link

DEBUG DENGAN STM32CUBEIDE

STM32CubeIDE merupakan IDE yang sudah terintegrasi juga dengan debugger, seperti ST Link dan J-Link.Untuk itu STM32 harus terhubung deban debugger melalui port debugnya (SWD atau JTAG). Selain mendukung debug untuk eksekusi perintah per baris program, melalui port SWDIO dan SWCLK, STM32CubeIDE juga mendukung untuk data trace melalui Serial Wire Viewer, sehingga bisa memonitor data (variabel) secara real time.

Debug di STM32CubeIDE
Debug dengan Serial Wire Viewer

Dan berikut video tentang debug di STM32CubeIDE.

Berikut beberapa link tentang debugging

Semoga bermanfaat.

Visits: 18 Visits: 98019

Leave a Reply

Your email address will not be published. Required fields are marked *

Copyright © All rights reserved. | Newsphere by AF themes.