January 20, 2022

Blogna Kang U-2 Man

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

Merancang Sistem Minimum STM32 Bagian 3: Boot dan Debug

3 min read

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

KONFIGURASI BOOT

STM32 bisa dikonfigurasi untuk melakukan booting (mengambil dan menjalankan program) dari program yang tersimpan di salah satu memori berikut:

  1. Memori flash
  2. Memori sistem (bootloader)
  3. SRAM

Konfigurasi booting ini diatur oleh pin BOOT0 dan BOOT1. BOOT0 merupakan pin tersendiri (dedicated pin), sedangkan pin BOOT1 berbagi fungsi dengan GPIO. Tabel berikut menunjukan kombinasi pin boot dengan fungsi bootingnya.

Konfigurasi Boot

Pin-pin boot ini dibaca oleh CPU setelah reset, tepatnya saat transisi tinggi ke 4 dari sinyal SYSCLK. Oleh karena BOOT1 berbagi fungsi dengan GPIO, maka setelah dibaca, CPU mengembalikan fungsi BOOT1 menjadi fungsi GPIO. Hasil pembacaan ini akan disimpan di register SYSCFG_MEMRMP (SYSCFG memory remap register).

Tergantung pada kombinasi pin boot, maka STM32 bisa diatur untuk eksekusi dari memori flash, memori sistem mau pun SRAM. Memori flash, tentu saja dipakai sebagai memori utama untuk menyimpan program. Memori flash biasanya diprogram melalui port debug, seperti akan dibahas setelah ini. Namun, memori STM32 bisa juga diprogram melalui periperal komunikasi yang dimiliki oleh STM32, seperti UART, I2C, USB atau SPI. Hal ini bisa dilakukan dengan mengaktifkan program bootloader yang dimiliki oleh STM32. Program bootloader ini dimasukan di proses produksi STM32. Untuk mengaktifkan bootloader, konfigurasi booting harus diplih untuk menjalankan memori sistem (BOOT0 = 0 dan BOOT1 = 1).

STM32 juga bisa diatur untuk mengeksekusi program dari memori SRAM internal. Pada saat mengeksekusi dari SRAM maka tabel vektor interupsi harus disesuaikan. Memori flash akan di-mapping di alamat 0x08000000 sedangkan SRAM ada di alamat 0x20000000. Mikrokontroler akan selalu mengerjakan program dari alamat 0x00000000, namun sistem pengalamatan mengenal adanya aliased, artinya ketika boot konfigurasi ada di memori flash, maka alamat 0x00000000 akan di-aliaskan ke alamat flash (0x08000000). Begitu juga kalau mengeksekusi bootloader, maka alamat akan di-aliaskan ke 0x1FFF0000.

Lalu apakah STM32 bisa mengeksekusi program dari memori eksternal (misal memori flash NOR eksternal)? Jawabannya bisa, tetapi tidak secara langsung dengan mengatur kombinasi pin booting. Tetapi harus dilakukan dengan membuat program semacam bootloader yang disimpan di memori flash memori. Program tersebut hanya akan membuat program selanjutnya melompat ke alamat memori eksternal tersebut, sehingga selanjutnya STM32 akan mengeksekusi program dari memori eksternal.

Dalam aplikasi, di mana program disimpan di memori flash, maka pin BOOT0 harus berada di logika 0, dan BOOT1 tidak diperhitungkan (don’t care). Pin BOOT0 sebaiknya tidak dihubungkan langsung dengan GND/VSS, lebih baik di-GND-kan melalui resistor pull-down (nilainya direkomendasikan 100K).

Ada keuntungan dengan penggunaan resistor pull-down, ketika port debug tidak bisa diakses, misalkan di-disable oleh program, maka agar STM32 bisa diprogram ulang, maka STTM32 tinggal diprogram untuk menjalankan bootloader dengan cara menghubungkan pin BOOT0 ke VDD dan BOOT1 ke GND. Kalau BOOT0 langsung dihubungkan ke GND maka agak merepotkan, karena mungkin harus memotong jalur.

DEBUG

Debug merupakan proses penting dalam pengembangan software baik software yang berjalan di sebuah komputer (PC) maupun software yang dibuat untuk sistem embedded. Debug merupakan proses pencarian kesalahan (bug) yang mungkin terjadi ketika software sedang berjalan. 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.

Sistem debug di STM32 menggunakan arsitektur CoreSight dan dilengkapi dengan komponen-komponen debug untuk kendali debug, penelusuran (trace) program dan sebagainya. STM32 mempunyai fungsi debug melalui port debug dengan koneksi JTAG/SWD.

Pin debug di STM32 berbagi fungsi dengan GPIO, ditunjukan oleh gambar di bawah.

Port Debug

Ada dua konfigurasi debug yaitu JTAG dan SWD. JTAG membutuhkan lebih banyak pin dari pada SWD, pin-pin JTAG:

  • JTMS
  • JTCK
  • JTDI
  • JTDO
  • JTNRST

Sedangkan SWD hanya memerlukan 2 pin yaitu SWDIO dan SWCLK. Sehingga dalam banyak aplikasi lebih banyak digunakan port SWD dari pada JTAG, terutama untuk STM32 dengan jumlah pin yang sedikit.

Contoh teknik debugging bisa dibaca di artikel ini.

Semoga bermanfaat.

Visits: 4 Visits: 108196

Leave a Reply

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

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