Dalam pengembangan sistem tertanam dan pengembangan perangkat lunak MCU, para insinyur sering menggunakan debugger untuk menelusuri kesalahan pada program. Dengan demikian, kita dapat mengidentifikasi dan mengurangi jumlah kesalahan dalam program mikrokontroler, sehingga program tersebut dapat berfungsi sesuai harapan. Terkadang, proses debugging program mikrokontroler dapat menjadi tantangan karena perubahan sekecil apa pun pada satu modul sistem dapat menyebabkan kesalahan pada subsistem lain. Selain itu, alat debugging yang digunakan dalam pengembangan mikrokontroler sangat bervariasi dalam hal waktu pengembangan dan kemampuan debugging. Artikel ini terutama memperkenalkan jenis-jenis debugger umum untuk mikrokontroler dan cara menggunakannya.
Apa itu Debugger Perangkat Keras?
Debugger perangkat keras adalah alat yang berkomunikasi dengan mikrokontroler melalui antarmuka debugging, sehingga memungkinkan alat tersebut untuk menjalankan, menghentikan sementara, mengamati, dan bahkan mengubah status proses. Dengan kata lain, debugger adalah perangkat yang menerjemahkan perintah yang dikirim oleh PC (misalnya, melalui protokol USB) ke dalam bahasa yang dipahami oleh MCU (seperti protokol SWD atau JTAG), memuat kode, dan mengontrol eksekusi secara tepat.
Jenis-jenis Debugger
Pengembangan perangkat lunak tertanam sangat bergantung pada debugger dan programmer, yang membantu mendeteksi dan memperbaiki bug program, melakukan pemrograman MCU, serta berbagai fungsi lainnya. Sebagian besar produsen semikonduktor atau chip mengembangkan debugger untuk MCU mereka sendiri guna memperkuat ekosistem produk mereka. Akibatnya, terdapat berbagai jenis perangkat yang tersedia di pasaran, termasuk debugger J-Link, emulator U-Link, debugger ST-LINK, dan programmer.
J-Link
J-Link adalah alat debugger berbasis JTAG yang diperkenalkan oleh perusahaan Jerman SEGGER. Secara sederhana, ini adalah perangkat konversi protokol JTAG, yaitu sebuah perangkat kecil yang berfungsi sebagai konverter USB ke JTAG yang terhubung ke komputer melalui antarmuka USB dan ke komponen internal papan target menggunakan protokol JTAG. Perangkat ini bertugas menerjemahkan perintah dari perangkat lunak ke perangkat keras.

I-jet Trace
I-jet Trace, yang diluncurkan oleh IAR Systems, adalah alat debugging dan pelacakan kode yang canggih, dilengkapi dengan cache instruksi berkapasitas besar dan mendukung protokol komunikasi berkecepatan tinggi USB 3.0. I-jet Trace mendukung semua inti seri ARM Cortex-M yang dilengkapi dengan modul Embedded Trace Macrocell (ETM), termasuk inti Cortex-M7 terbaru. Dengan melacak setiap instruksi yang dieksekusi, ETM memungkinkan pengembang untuk mengamati perilaku runtime MCU secara mendalam, sehingga mengungkap bug signifikan yang mungkin sulit ditemukan dengan metode debugging konvensional.

U-LINK
ULINK adalah debugger/emulator yang diperkenalkan oleh ARM/KEIL. Saat ini, versi yang telah diperbarui seperti emulator ULINK2 dan ULINK Pro telah tersedia. ULINK/ULINK2 dapat digunakan bersama perangkat lunak Keil untuk mengaktifkan fungsi emulasi dan pada dasarnya kompatibel dengan perangkat lunak Keil. Perangkat ini mendukung serial wire debug (SWD), dukungan return clock, pelacakan waktu nyata, serta fitur-fitur lainnya. Insinyur pengembangan dapat dengan mudah melakukan debugging on-chip (menggunakan JTAG on-chip, SWD, dan OCDS) serta pemrograman flash saat menggunakan debugger RealView MDK bersama dengan ULINK2.

CMSIS-DAP
CMSIS-DAP dapat diuraikan menjadi dua bagian: CMSIS dan DAP. CMSIS merupakan singkatan dari ARM Cortex-M Software Interface Standard, sedangkan DAP merupakan singkatan dari Debug Access Port. CMSIS-DAP adalah implementasi firmware dari unit perangkat debugger USB. Perangkat lunak debugging yang berjalan di komputer host berkomunikasi dengan perangkat debugger melalui antarmuka USB, sehingga pada akhirnya memungkinkan proses debugging perangkat lunak aplikasi yang berjalan di MCU target. Debugger CMSIS-DAP terhubung ke perangkat target melalui JTAG atau SWD. Prosesor ARM Cortex menyediakan unit Core Sight Debug dan Trace. Debugger CMSIS-DAP dapat mendukung prosesor yang mengandung satu atau lebih inti ARM.

DAPLink
DAPLink adalah emulator sumber terbuka yang dikembangkan secara resmi oleh ARM, yang mampu melakukan pengunduhan program dan debugging untuk berbagai jenis chip dengan inti Cortex-M0/M3/M4/M7.

Debugger ICD
ICD (In-Circuit Debugger), yang sering disebut sebagai "ICD debugger," adalah alat debugging perangkat keras yang digunakan dalam pengembangan sistem tertanam. Alat ini memungkinkan pengembang untuk melakukan debugging secara real-time pada mikrokontroler atau perangkat tertanam lainnya saat perangkat tersebut sedang beroperasi di dalam rangkaian target (in-circuit).

Debugger ICD biasanya terhubung ke perangkat target melalui antarmuka debugging-nya, seperti JTAG (Joint Test Action Group) atau SWD (Serial Wire Debug). Debugger ini menawarkan berbagai fitur debugging penting, termasuk menetapkan titik henti (breakpoint), menjalankan kode langkah demi langkah, memeriksa nilai variabel, dan memantau alur eksekusi program.
Salah satu keunggulan utama debugger ICD adalah kemampuannya untuk melakukan debugging perangkat lunak dalam konteks perangkat keras yang sebenarnya, sehingga memungkinkan pengembang untuk mengidentifikasi dan memperbaiki masalah yang mungkin hanya terjadi saat perangkat target berjalan dalam lingkungan yang dimaksudkan.
ST-Link adalah alat debugger dan programmer daring khusus untuk mikrokontroler STM8 dan STM32, yang sering disebut sebagai alat pengunduh. ST-Link dilengkapi dengan antarmuka komunikasi seperti SWIM, JTAG, dan SWD untuk berkomunikasi dengan mikrokontroler STM8 atau STM32 (tersedia dalam berbagai versi).

MCU-Link
MCU-Link, yang dikembangkan bersama oleh NXP dan Embedded Artist, adalah alat debugger yang tangguh dan hemat biaya yang terintegrasi secara mulus dengan MCUXpresso IDE. Alat ini juga kompatibel dengan IDE pihak ketiga yang mendukung protokol CMSIS-DAP, seperti MDK Keil dan IAR Embedded Workbench yang umum digunakan.

MCU-Link didasarkan pada mikrokontroler LPC55S69, yang dilengkapi antarmuka USB berkecepatan tinggi untuk proses debugging berkinerja tinggi. LPC55S69 adalah mikrokontroler dual-core Cortex-M33 dengan kecepatan clock hingga 150 MHz. Mikrokontroler ini dilengkapi fungsi USB-ke-serial (VCOM), yang memungkinkan pengembang untuk mentransfer data dari sisi MCU ke PC selama proses debugging.
OpenSDA
OpenSDA adalah sirkuit debugging perangkat keras terintegrasi yang menggabungkan fungsi debugging, konversi USB ke serial, dan fitur pemasangan firmware dengan drag-and-drop. Sirkuit ini terdapat pada hampir semua papan pengembangan resmi NXP dan Freescale. OpenSDA disukai oleh pengguna karena kesederhanaannya, biaya yang terjangkau, fungsionalitas yang mumpuni, serta ketersediaannya yang luas.

Nu-Link
Nu-Link adalah alat debugging dan pemrograman yang dikembangkan oleh Nuvoton, yang menawarkan kemampuan debugging serta pemrograman daring dan luring. Alat ini dilengkapi dengan port USB untuk terhubung ke komputer host, indikator status LED, tombol pemrograman luring, serta antarmuka SWD untuk terhubung ke chip target guna melakukan debugging dan pemrograman (port SWD beroperasi pada tegangan default 5V).

Bagaimana Cara Kerja Debugger?
Prinsip debugging mikrokontroler melibatkan komunikasi antara alat debugging dan mikrokontroler, yang memudahkan proses debugging program mikrokontroler. Titik henti (breakpoint) merupakan teknik debugging yang umum digunakan untuk mengidentifikasi kesalahan dalam kode.
Menentukan Kondisi Titik Henti

Pada gambar di atas, terdapat daftar titik henti, dengan total empat titik henti. Setiap titik henti dapat diberi kondisi, seperti yang ditunjukkan pada kotak merah 1.
Anda dapat menentukan berapa kali titik henti tersebut aktif, yaitu berapa kali titik henti tersebut terpicu saat mencapai posisi tersebut, seperti yang terlihat pada kotak merah 2. Dalam contoh ini, titik henti tersebut diatur untuk terpicu sekali.
Anda dapat menetapkan ekspresi evaluasi, seperti yang ditunjukkan pada kotak merah 3 pada gambar. Misalnya, breakpoint akan terpicu ketika "g_iCounter" lebih besar dari atau sama dengan 100. Kondisi seperti ini digabungkan dengan kondisi pada kotak merah 2 menggunakan hubungan logika "AND". Kedua kondisi tersebut harus terpenuhi agar breakpoint terpicu; jika tidak, kode akan terus berjalan.
Saat breakpoint terpicu, Anda dapat menjalankan skrip Python, seperti yang ditunjukkan pada kotak merah 4 pada gambar.
Anda juga dapat menampilkan kotak pesan dan/atau membunyikan bunyi peringatan saat titik henti terpicu.
Menetapkan Pemicu Titik Henti

Pemicu titik henti mirip dengan pemicu yang telah ditentukan sebelumnya yang menyebabkan kode berhenti ketika kondisi tertentu terpenuhi selama eksekusi. Lokasi pemicu mungkin tidak diketahui sebelumnya.
Pada gambar, kotak merah 1 mewakili pemicu instruksi, yang menghentikan kode pada baris tertentu, mirip dengan menetapkan breakpoint langsung dalam kode.
Kotak merah 2 mewakili pemicu data, yang menghentikan kode saat ada operasi baca/tulis pada variabel atau alamat tertentu, dan dapat memantau apakah bit tertentu disetel atau dihapus (ketersediaannya tergantung pada mikrokontroler). Kode berhenti pada posisi yang sesuai.
Kotak merah 3 adalah contoh di mana "g_iCounter" dipilih. Ketika bit tertingginya disetel ke 1, hal itu memicu titik henti. Jika tidak, kode akan terus berjalan.
Kotak merah 4 menggambarkan kondisi pemicu yang kompleks yang melibatkan beberapa kondisi, yang juga bergantung pada kemampuan mikrokontroler.
Kesimpulan
Singkatnya, debugger perangkat keras beserta berbagai jenisnya memainkan peran penting dalam pengembangan sistem tertanam dengan memungkinkan pengembang untuk menemukan dan memperbaiki bug perangkat lunak, melakukan debugging secara real-time, serta memperoleh wawasan mengenai proses eksekusi program mikrokontroler. Alat-alat ini menyediakan fitur-fitur penting seperti titik henti (breakpoint), kondisi pemicu, dan kemampuan untuk menjalankan skrip, sehingga proses debugging menjadi lebih efisien dan efektif.



