Kom i gang med In-Circuit Debugging - 💡 Fix My Ideas

Kom i gang med In-Circuit Debugging

Kom i gang med In-Circuit Debugging


Forfatter: Ethan Holmes, 2019

Hvis du laver (eller adskiller) noget kompliceret, kan du længes efter en bedre visning inde. Et oscilloskop eller logisk analysator kan være et vigtigt værktøj til digital elektronik, og også overraskende nyttig til indlejret software. Din kode kan også hjælpe via meddelelser logget til fil eller seriel port. Men nogle gange behøver du virkelig en interaktiv visning af dit programs internals, og på et integreret system betyder det, at du har brug for en debugger (ICD).

Nogle af jer ved allerede om fejlfinding på kildeniveau fra andre sammenhænge, ​​f.eks. Fejlsøgning af stationære applikationer i Xcode eller Visual Studio, ved brug af breakpoints og single-step funktionalitet til scripts i en webbrowser-konsol eller ved hjælp af en selvstændig debugger som GNU Debugger, WinDbg , eller LLDB. Hvis du er mere vant til Arduino, kan dette slags værktøj være nyt for dig.

Debugger refererer generelt til et system, der består af debugging software på din pc, muligvis software på den chip du tester, og normalt nogle hardware både indenfor og uden for chip. Mange mikrocontrollere har en on-chip debugger (OCD) bagt ind i siliconen.

En debugger kan træde gennem kode én linje eller instruktion ad gangen, mens du viser indholdet af variabler, og kan se eller redigere hukommelse. Du kan køre dit program med fuld hastighed, indtil den rammer et breakpoint - en forsætlig pause i din kode - hvor den stopper og debuggeren genoptages. Med en debugger tilsluttet kan du også typisk interagere med en processorens periferiudstyr, indlæse programmer i flashhukommelse og læse flashindholdet (medmindre der findes beskyttelser for at forhindre dette!).

Hvad er en Debug Server?

Debugger-appen på din pc holder et detaljeret hukommelseskort til din kode, men du har også brug for noget hardware - eller software - på din mikrocontroller for at sikre læsning og skrivning af hukommelse, opsætningsbrud og løbende instruktioner på en kontrolleret måde. En løsning er en fejlfindingsserver.

GNU Debugger (GDB) definerer en særlig simpel serverprotokol til brug over en seriel port eller et netværk, herunder localhost. Implementeringer af denne gdbserver eksisterer for forskellige operativsystemer. Traditionelt var dette en software-eneste komponent, men protokollen bruges nu som en gateway til hardwareenheder eller emulatorer.

På samme måde spænder dine IDE-muligheder langt ud over en grundlæggende GDB-kommandolinje med værktøjer som Eclipse, Visual Studio Code og IDA Pro, der understøtter den samme GDB-protokol.

Hardware Debug Ports

Det ville være hensigtsmæssigt, hvis fejlfindingsfunktionerne indbygget i silicium var direkte kompatible med GDB-protokollen, men OCD'er er optimeret til minimale omkostninger og indvirkning på det samlede processordesign. Typisk debugering vil blive tilvejebragt via den samme port, der bruges til programmering af flashhukommelse. Nogle chips bruger leverandørspecifikke protokoller, men to industristandarder er værd at vide om: JTAG og SWD.

Uanset hvilken protokol der kræves, er det nødvendigt med hardware til at konvertere tilbage til USB. En bred vifte af adaptere kan bruges som debug-server via OpenOCD-softwaren til open source, selv tilslutninger, som du måske allerede har som Raspberry Pi GPIO'er eller en FTDI seriel pause. Og Black Magic Probe (se "Bug Squashers", højre) er en åben hardwareenhed, der implementerer fejlserveren i firmware, hvilket giver en virtuel seriel port, som du vedhæfter direkte til GDB.

JTAG: Den oprindelige standard - Det er ikke et godt navn. Ligesom JPEG, siger det ikke, hvad standarden gør, bare hvem der har designet det: Joint Test Action Group. Den blev designet i midten til slutningen af ​​1980'erne og standardiseret i 1990 som reaktion på komplekse kredsløbskonstruktioner for vanskelige at automatisk teste.

Elektrisk er JTAG-standarden (IEEE 1149.1) en serie af skiftregistre, som du kan snakke mellem kæder mellem enheder. Du kan vedhæfte din debugger direkte til en enkelt enhed eller til en kæde af enheder inden for en enkelt chip eller på tværs af flere chips. JTAG ser overfladisk ud som SPI, med en fælles klokke og envejs dataindgang og udgangsstifter. Men så ser du en Test Mode Select (TMS) pin. Er det en chip-select? Nej. Det er her, hvor JTAG begynder at blive særligt lavt niveau. Det er faktisk et lille mønster, der driver en statsautomat, der er specificeret af standarden, hvilke chipproducenter bygger videre på at oprette deres egne JTAG state maskiner.

JTAG-standarden angiver tilstande til valg af en enhed og læsning af dens 32-bit ID-kode; og JTAGs grænseoverskriftsprotokol adresserer stifter på en IC til elektrisk afprøvning af samlede PCB'er. Ud over dette bliver det enhedsspecifik: FPGA'er og processorer og minder har hver deres egne protokoller. Denne fragmentering afspejler fragmenteringen, du ser i hele embedded tools space!

Med moderne ARM-processorer gør i det mindste standarderne os en fordel. ARM Debug Interface-specifikationen beskriver en standard JTAG Debug Port med en måde at få adgang til hukommelse, periferiudstyr og CPU-tilstand. Derfra kan hukommelsesmappede registre ændre breakpoints og styre CPU'en.

SWD: Nybegynderen - Når ARM standardiserede en måde at få adgang til hukommelses- og CPU-fejlretningsfunktioner over JTAG, tog de også lejlighed til at udvikle en ny alternativ protokol: Serial Wire Debug (SWD), der bruger en enkelt tovejs data pin og en moderniseret pakke struktur. Den reducerede stifttælling gør SWD ideel til mindre indlejrede processorer som den populære ARM Cortex-M-serie, og den kan dele stifter med JTAG, når processoren understøtter begge muligheder.

Det handler om alt hvad du behøver at vide om SWD i sig selv, hvis du kun planlægger at oprette fejlfindingsporten på en processor og køre værktøjer på højt niveau som GDB. Oplysningerne om konfiguration af OpenOCD, GDB og din specifikke debug-adapter varierer per platform, så du vil finde den konfigurationsfil, der følger med OpenOCD, der passer bedst til din situation som udgangspunkt.

Hvis du vil forstå, hvordan fejlfinding og endda hvordan processorer arbejder på et dybere niveau, er debug porten et glimrende sted at begynde at grave rundt!

  • »For mere om ARM's debugging:
  • »Jeg skrev en simpel webbaseret SWD-hukommelsesbrowser til ESP8266 og en artikel i PoC || GTFO 10.5.
  • »Find en mere komplet open source-implementering af SWD, prøv Black Magic Probe eller Free-DAP.


Du Kan Være Interesseret

Maker Spotlight: Scotland Symons

Maker Spotlight: Scotland Symons


Hacking for Peace i Colombia

Hacking for Peace i Colombia


Sjov med julelys

Sjov med julelys


10 glædelig kredsløb for at belyse din ferie

10 glædelig kredsløb for at belyse din ferie






Seneste Indlæg