Yazılım & Bilgisayar Mühendisliği
Jtag ve Swd kullanarak gömülü yazılımlar için en iyi uygulamalar
Table of Contents
Giriş Giriş Giriş
Gömülü yazılım debugging her zaman donanım ve yazılım hakkında derin bir anlayışa ihtiyaç duyuyor. Mikrokontroller arasındaki etkileşim, hafıza, periferik ve gerçek zamanlı kısıtlamalar geleneksel uygulama geliştirmeden çok daha karmaşıktır. ”DevrimT:0JTAG (Joint Test Grubu)[Dönetici:2)SWD (Serial Wire Debug)[Döneticileri)[Döneticileri)[Döneticileri)[Döneticileri, bu dünyaya giriş yapmak için kullanılan iki hakim donanım devricisidir.
JTAG ve SWD'yi Anlamak
Etkili bir şekilde, kullandığınız arayüzün yeteneklerini ve sınırlamalarını anlamanız gerekir.
JTAG (IEEE 1149.1)
JTAG başlangıçta sınır taramalarını kullanarak baskılanmış devreler için geliştirildi, ancak hızla mikro kontrol sistemleri, FPGAs ve diğer karmaşık IC'ler için standart haline geldi. (Test Data In]FLT:0TCKTest Out (D)[D)[Döneticileri için kontrol sistemi (Test)[GÜye Olmayanlar için)[GÜye Olmayanlar için)
SWD (Serial Wire Debug)
SWD, Cortex-M serisi çekirdeği için ARM tarafından geliştirilen iki kablosuz alternatiftir.[D][B][B][B][B][B][B][B][/FONT=0=0=0|SWIO[FLT) ve aNCNT=2}SWCLK) SWCONTS (Serial Wire Clock) ile aynı şekilde uygulamanızı sağlar: daha az pins gereklidir (könetici tasarım için kritik).
JTAG'yi ne zaman kullanın. SWD
- [FONT:0) JTAG [DÜDÜDÜSÜDÜSÜSÜSÜSÜSÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜNCÜŞÜNÜŞÜNÜŞÜNCÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞ
- [FONTD:0) SWD[[DDD][D][D][B][B][B][B][/SWV) için normal olarak kullanılan yüksek çözünürlükte, sayısal olarak, JTAG SWD'ye ihtiyacınız olan veya JTAG tarafından kullanılan yüksek çözünürlükte bir tel görüntüleyicisi (SWV) gerçek zamanlı iz verileri için de sıklıkla kullanılır.
Daha derin bir karşılaştırma için, [[DÜye:0)Segger'in JTAG / SWD arayüzü açıklaması[DÜT:1) ve [[DÜ:2).ARM'nin SWD genel bakış[[DDD 3)
Güvenilir bir Debug Çevresini Ayarlayın
Zavallı bir donanım kurulumu, en yaygın çaresizlik nedenidir. En iyi debugger ve IDE bile kırık fiziksel bağlantıları düzeltemez.
Bir Debug Probe Seç
Kaliteli bir debug probe'de yatırım yapmak. ucuz adaptörler hobi projeleri için çalışabilirken, üretim kesintisi güvenilirlik talep ediyor. Endüstri standartları, [[Dönetici:0)Segger J-Link), [[Dönderlik seviyesi çeviri ve sağlam SWD / JTAG sürücüleri de sınırsız uç noktaları gibi özellikler sunuyor.
En İyi Uygulamaları Wiring
- [FONT:0) Yüksek hızlı debug saatleri (SWD ve 100+ MHz for JTAG için) sinyal bütünlüğü sorunları için hassastır. Birkaç inçden daha uzun süre çalışırsa şarj veya kalkan kablolar kullanın.
- [FONT:0) Doğru çekme / geri yükleme dirençleri kullanın.[52] Çoğu SWD ve JTAG hattı hedef kurulunda (tipik olarak 4.7 kULL ila 10 kULL ila VCC) gerektirir. Bazı araştırmalar iç çekleri kontrol eder.
- [FONT:0)Bağlantı zemini[Dönetici:0)[Dönetici:0)[Döneme/varış)) ile ilgili sağlam bir alt-kirli bir zemin bağlantısı gereklidir.
- [FONT:0)Check gerilim seviyeleri.[[DÜDÜT:1] Debug probe'nin referans gerilimi (VTref) hedefin I/O gerilimini maçlarına otomatik olarak VTref'yi algılar, ancak seviye değişim ile bir adaptör kullanarak karma-süretim sistemleri için gerekli olabilir.
Common Hardware Pitfalls
- [FONT:0)Power sequencing sorunları: [Döntgen: 0,4] Hedef, daha önce (veya aynı anda) süzgeçten veya hasardan kaçınmak için debug Prodüksiyonu ile güçlendirilmelidir.
- [FONT:0]Floating nRST:[Dönetici:[Dönetici: 0) Birçok MCUs, otomatik bağlantı başarısız olursa, hedefin nSRST hattına bağlanın.
- [FONT=0)Bus contention:[Dönetici:[Dönetici:0) SWDIO'dan ayrılma, bir düğme veya diğer GPIO tarafından, bir düğme veya diğer GPIO tarafından - bu ilkleşmeyi engelleyebilir.
Detaylı kablo diyagramları için, danışma:0)OpenOCD'nin debug adaptörü donanım rehberi).
Sistematik Debugging Süreci Oluşturmak
Temel atıkları doğrulamadan karmaşık uç noktalarına atlayın. Bu sırayı her seferinde yeni bir tutukluluk seansına başlarsınız.
1. Donanım Bağlantılarını Ver
Herhangi bir yazılım aracı başlatmadan önce, VCC, GND'yi doğrulamak için çok fazla metre veya oscilloskop kullanın ve hedefin debug saati ve veri hatlarının togglingling. Birçok debug probes inşa edilmiş-in hedef algılama komutları – bu ilk önce çalıştırın.
2. Kontrol Güç Tedariki Stability
Hedefin tedarik gerilimini sıfırlama sırasında denetlemek için bir oscilloskop kullanın. Bir drooping tedariki, yanlış sıfırlamalara veya debug başarısızlığına neden olabilir.
3. Parmak Durumu Test
Uygulamanızı silmeden önce, mikro kontroller kod tümünde doğruluyor. CPU'yu sıfırlamadan sonra durdurma ve programı kontrol etmeden durdurmayı deneyin. PC beklenmedik bir adrese atlarsa, bir bootloader veya hafıza haritasına sahip olabilirsiniz.
4. Debugger Connection Connection'ı Geçerlileştirin
Çoğu IDEs (IAR, Keil, STM32CubeIDE, VS Kod Cortex-Debug) bağlantı testi sağlar ve bu daimlerin hafızaya yazabileceğini doğrulayın.If not, re-examin pin bağlantıları ve saat ayarları.
5. Minimal Test Kodu ile başlayın
Bir LED veya basit bir döngüde GPIO'yu yakalamak. Bu kod üzerinden adım atmak için debugger kullanın. Bu, aletchain ve debugger'in karmaşık mantıka saldırmadan önce doğru çalışmasını sağlar.
Gelişmiş Debugging Özellikleri
Modern ARM Cortex-M çekirdeği güçlü bir debugging ve iz donanımları içerir. Bu özelliklerin Ustası, büyüklüğün emirleriyle zaman ayırabilir.
Breakpoints and Watchpoints
Belirli bir talimat geldiğinde disiplini durdurur. İzleme noktaları hafıza yeri okuduğunuzda veya yazıldığında infazı durdurur. Donanım uç noktaları kullanın (genellikle 2-6 temele bağlı olarak) zaman-könetici bölümleri ve donanım saatleri için; veri yolsuzluk sorunları için bir mola vererek uygulanırlar. Software breaks (via BKPT talimatı) sadece nadiren tetiklendiğinde etkili bir nokta kullanır.
Gerçek Zamanlı Trace (ETM/ETB ve SWO)
Intrusive profiling için, bir iz arayüzü kullanın:
- [FONT=0)Embedded Trace Macrocell (ETM)), belirli bir iz portu gerektiren yüksek bant genişliği bir iz sağlar (örneğin, 4-pin TPIU). Bu, sadece daha büyük paketler için altın standarttır.
- [FONT=0)Serial Wire Çıkış (SWO)) CPU'yu durdurmadan tek bir işaret izi (ExpD'nin bir parçası) bu, gerçek zamanlı veri giriş için paha biçilmez.
SWO/ITM'yi kullanmak için, MCU'nun debug kayıtlarında izlerini takip edin ve verileri yakalamak için debugger'i yapılandırın. Birçok IDE'nin ve araçları gibi kullanım:0)Segger'in RTT (Real-Time Transfer))[GPO'ya sıfır-pin yükle alternatifler sunar.
Hata Analizi
Bir HardFault veya BusFault meydana geldiğinde, temel geri dönüş adresi ve hata durumu kayıtlarıyla bir yığın çerçeve çizer ve [[FONT=0)IFOAR) (Bus Fault Address), [[Dönetici:2UFSR[D) ve [[Usage Fault Status) [FONTD: 5)IHIZMAS[değiştir | kaynağı değiştir]
Debugging Common Emersoned Issues
Aşağıda gömülü gelişim sırasında karşılaşılan en sık karşılaşılan sorunlar için pratik stratejiler vardır.
Donanım Hataları ve İçer
Ortak bir senaryo: CPU sertFault veya NMI vurur. İlk adım kaynağı tanımlamaktır:
- Hata meydana geldiğinde CPU'yu hemen uygulayın.
- Rezit PC ve LR kayıtlarına göz atın.
- Hata statüsü kaydına bakın (SCB->CFSR, SCB->HFSR).
- PC'yi harita dosyanızla veya benzerlikinizle devre dışı bırak.
Bellekle kaplı periferiler için, ortak bir neden saat boyunca bir periferiklığa saatinizi etkinleştirmeksizin erişmektedir.Templement:0) işlevi ve daha önce periferik görünümü ilk olarak başlatılır.
Memory Corruption ve Stack Overflows
Veri yolsuzluk genellikle rastgele çökerler, yozlaşmış dizeler veya periferik arıza olarak ortaya çıkar. yakalamak için bu teknikleri kullanın:
- [FONT=0)Stack kanaryalar:[Dönetici:[Dönetici: · 1) Bir akışla dolu bir kalıbı doldurun.
- [[Döneticileri: [Döneticileri: [Döneticileri] Bir donanım saati noktası sık sık sık sık bozulmuş değişken üzerinde ayarlayacaktır.The watchpoint will stop the CPU exactly when the variable is written, Explain the suçlular.
- [FONT:0)Memory bölgesi koruma (MPU/MMU):[Dönetici Koruma Birimini sadece veya herhangi bir kod bölümü için okuma-sadece veya hiçbir kod bölümleri oluşturmak için kullanın. Korumayı ihlal eden erişimler bir hatayı ihlal eder.
Derin bir yığın aşırı akış algılamasına, bakınız:0)Memfault blogu aşırı akış algılaması[Dön 1: 1).
Yarış Koşulları ve Timing Issues
Bir RTOS'taki görevler arasında kesinti koşulları, zamanlamayı değiştiren (örneğin tek adım) araçları yeniden üretmekten çok zor.
- [FONT:0) Takip:[Dönetici:[Döncükler) ETM veya ITM, minimum inpost ile olayların tam sırasını kaydeder.
- [FONT:0)Toggle GPIOs:[Dönetici:[Dönetici:0)Bir GPIO'yu her kritik kod yoluna imzalarken, bunları mantık analizörü veya oscilloskop ile kaydeder.
- [FONT:0)Delay enjeksiyonu:[Dönetici:[Dönetici:0) Kodunuzdaki küçük, rastgele gecikmeler (örneğin, bir zamanlayıcı kullanarak) sistemi stresle test etmek ve bir yarış koşulu olasılığını artırmak.
Verimli Debugging Tool Kullanımı için En İyi Uygulamalar
Bu ipuçları daha hızlı çalışmanıza ve ortak hatalardan kaçınmanıza yardımcı olacaktır.
Donanım ve Yazılım Breakpoints Wisely
Donanım uç noktaları değerli bir kaynaktır. Onları kesmek için parçalar veya sıkı zaman içinde yazılım uç noktalarının davranışları etkileyebilir. Basit hat-by-line debugging için, ücretsiz ve bol miktarda yazılım molaları kullanın.
Yararlanma Watch Değişken Windows
Tüm modern IDEs desteği, saat değişkenlerini canlı olarak güncelliyor. Ancak, her adımın her değişkeni yavaş yavaş yavaş yavaşlavagging yapabiliyor. aşağıdaki stratejileri kullanın:
- Saat penceresini sadece ihtiyacınız olan değişkenlere sınırlayın.
- Diziler veya yapılar için bellek pencerelerini kullanın; büyük veri setleri için değişkenlere güvenmek verimsizdir.
- Enable "auto dereference" sadece belirli bir nokta için denetlenmesi gerekir.
Instrumentation: ITM ve RTT
Bir fiziksel UART'ı debug mesajları kullanmak yerine, ITM portlarını (örneğin port 0: hata, port 1: yüksek seviye akış) indirmek için SWO'yu kullanarak verileri engellemek için kullanır.
[Gerçek Zamanlı Transfer)[Dönemli)[Dönemli bir bellek tamponunu kullanan ve hatta SWO olmadan çekirdeklerde çalışan üstün bir alternatiftir.En az CPU yükleri ile gerçek zamanlı veri transferi sağlar.
Senaryo ve Otomasyon
Automate tekrarlanan görevleri debugger senaryoları ile tekrarlıyor. Çoğu profesyonel debuggers Python, Tcl veya özel bir komut dili aracılığıyla senaryoyu destekliyor. Common scripting tasks include:
- Kod değişikliklerinden sonra flaş programlamasını ve doğrulamayı otomatikleştirin.
- Yenidenleme testleri, uç noktaları, koşma ve sonuçları toplamakla yapılır.
- Hataların (örneğin, bir kayıt yazmak) hata eller test etmek için.
Bu senaryoları kullanarak zaman tasarruf eder ve ekip genelinde tutarlı kesinti işlemlerini sağlar.
Bir Debugging Log
Her bir boğala karşılaşırsınız – semptomlar, kök nedeni ve düzeltme. Zamanla, gelecekteki devagging hızları artıran kişisel bir bilgi tabanı inşa edersiniz. Donanım özellerini ekleyin (örneğin, “STM32G0’da yüzer SWCLK neden Intermittent ast – 10kULL-up to 3.3V”).
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
JTAG ve SWD ile gömülü yazılım, olağanüstü araçlardan yetkili mühendisleri ayıran bir yetenektir. Güvenilir bir donanım ortamı kurarak, sistematik bir süreç izleyerek ve daha güçlü, daha az hayal kırıklığı ile gömülü sistemlerle birlikte daha güçlü, güvenilir bir şekilde gömülüyorsunuz.İyi araçlarda, bulgularınızı belgeleyin ve sürekli olarak her dehagging oturumundan öğrenebilirsiniz.