JTAG ile SWD arasındaki fark nedir? Bir Cortex-M'i debug ederken hangi araçları kullanırsınız?
Cevap
İkisi de MCU'yu programlamak ve debug etmek için kullanılan donanım arayüzleridir. JTAG daha eski ve genel bir standarttır (IEEE 1149.1). SWD (Serial Wire Debug) ise ARM'a özgü, daha az pin kullanan bir alternatiftir.
| Özellik | JTAG | SWD |
|---|---|---|
| Pinler | TCK, TMS, TDI, TDO (+ opsiyonel TRST) | SWDIO, SWCLK |
| Standart | IEEE 1149.1, mimariden bağımsız | ARM CoreSight |
| Zincirleme | Birden çok çipi daisy-chain ile bağlayabilir | Tek hedef (SWD v2'de multi-drop var) |
| Boundary scan | Var, PCB lehim testinde kullanılır | Yok |
| Trace | Ayrı pinler gerekir | SWO pini ile ITM/printf trace |
| Kullanım | FPGA, DSP, çok çipli kartlar | Cortex-M ürünlerinin çoğu |
Araç zinciri
- Debug probe: ST-LINK, SEGGER J-Link, CMSIS-DAP/DAPLink, Black Magic Probe
- GDB sunucusu: OpenOCD, pyOCD, J-Link GDB Server
- IDE: STM32CubeIDE, VS Code + Cortex-Debug, Keil, IAR, SEGGER Ozone
openocd -f interface/stlink.cfg -f target/stm32f4x.cfg
arm-none-eabi-gdb build/firmware.elf
(gdb) target extended-remote :3333
(gdb) monitor reset halt
(gdb) load
(gdb) break main
(gdb) continueDebug yetenekleri
- Hardware breakpoint (Cortex-M3/M4'te genelde 6 adet, Flash'taki kod için gereklidir) ve watchpoint (DWT ile bir değişkene yazıldığında durmak).
- SWO/ITM ile CPU'yu çok az yavaşlatan printf; SEGGER RTT ile RAM üzerinden hızlı log.
DWT->CYCCNTile çevrim sayarak kod süresini ölçmek.
Pratik notlar
- SWD pinleri yazılımda GPIO olarak yeniden yapılandırılırsa veya MCU hemen derin uykuya girerse debugger bağlanamaz. Çözüm "connect under reset" kullanmaktır.
- Üretimde readout protection (RDP) ile debug erişimi kapatılır.
İlgili Mikrodenetleyiciler soruları
- Kesme (interrupt) nedir? ISR yazarken nelere dikkat edilir?
- Watchdog timer nedir, ne işe yarar?
- Bir bootloader nasıl çalışır? Uygulamaya atlama ve güvenli firmware güncellemesi nasıl tasarlanır?
- Mekanik bir butonun debounce işlemi neden gereklidir ve yazılımda nasıl yapılır?
- DMA nedir, ne zaman kullanılır? DMA kullanırken cache coherency ve double buffering gibi konularda nelere dikkat edilmelidir?
- ADC çözünürlüğü, referans voltajı ve örnekleme hızı nedir? ADC okumasında doğruluğu etkileyen faktörler nelerdir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.