Spørgsmål:
Programmering af mikrocontrollere: JTAG, SPI, USB åh min !?
jdiaz
2009-11-14 09:51:48 UTC
view on stackexchange narkive permalink

Jeg har bemærket, at der med hensyn til mikrokontroller er flere måder at programmere dem på. Jeg er lidt bekendt med USB, da mine Arduino'er kan programmeres via USB.

Hvad er en JTAG- eller SPI-grænseflade?

I sidste ende ved jeg, at disse grænseflader giver et middel til at blinke chippen med nye instruktioner, men hvordan adskiller de sig? Er der nogen fordele ved hinanden frem for hinanden?

Fem svar:
bpijls
2009-11-14 15:49:23 UTC
view on stackexchange narkive permalink

ATMEGA-mikrocontrollere som den i arduino, der kommer lige fra fabrikken, kan kun programmeres ved hjælp af SPI- eller JTAG-grænsefladen.

SPI står for Serial Peripheral Interface og er en måde for mikrocontrollere at kommunikere med hinanden eller med omverdenen. Det kaldes også undertiden 3-leder, fordi det bruger tre ledninger til at kommunikere. For at programmere en chip skal du bruge en speciel programmør, der læser kommandoer fra USB til at drive SPI-linjerne for at programmere chippen. En populær ser ud til at være USBTinyISP fra Adafruit. En meget god introduktion til SPI-programmering er på SparkFun. De mest populære applikationer til programmering af Atmel AVR-chips er avrdude (cmd-linje), ponyprog (fungerer ikke med nyere programmerere) og i nogle tilfælde AVR Studio (hvis din programmør understøtter det). Fordelen ved SPI-programmering er, at du kan programmere enhver Atmel-chip lige fra fabrikken, så du ikke altid har brug for en Arduino i dine projekter.

Hvor SPI er "bare en anden" seriel protokol, JTAG er en protokol, der er specielt designet til at programmere og fejle mikrocontrollere. Ikke alle Atmel micros understøtter JTAG, men dem der bruges i Arduino gør. JTAG-protokollen kan bruges til seje ting som "i kredsløbsemulering" og fejlretning, hvilket betyder, at det giver dig mulighed for at se programmets tilstand i din mikrocontroller, mens den rent faktisk kører. For at gøre dette skal du bruge en speciel programmør. Set mit svar til et andet spørgsmål.

For at programmere en chip ved hjælp af USB skal du først programmere den med en "bootloader" ved hjælp af SPI eller JTAG. Når systemet er indlæst med bootloaderen, kan det programmeres fra enhver pc ved hjælp af en USB-seriel konverter. Ulempen er, at bootloaderen tager noget hukommelsesplads, og denne metode giver dig ikke mulighed for at se chipens tilstand, mens den kører.

Mens det er nøjagtigt i tanken om, at en seriel bootloader ikke er tilgængelig på en ny ATMEGA (selvom den er på mange andre mikrokontrollere), er påstanden om, at SPI eller JTAG skal bruges, forkert. ATMEGAs understøtter også en højspændings parallel programmeringstilstand, som har evnen til at overkøre nogle sikringsindstillinger, der ville gøre de mere populære in-circuit-programmeringsmetoder umulige. JTAG var ikke designet til programmering af mikrofoner, men til test af pc-kort ved at slå værdier ind og ud af IO-pinregistre. Udvidelse af det til programmering eller fejlretning af kernefunktioner var et senere hack.
SPI og In System Programming / Serial programmering er forskellige. Jeg var også vant til, at mange af de mindre Atmega MCU'er havde serielle programmeringsstifter på SPI-grænsefladen, men jeg blev bidt af det faktum, at på nogle af de større Atmega MCU'er var serielle programmeringsstifter ikke på SPI-grænsefladen.
tyblu
2010-12-29 16:57:32 UTC
view on stackexchange narkive permalink

Selvom jeg meget gerne vil dykke ned i de forskellige tilgængelige programmeringsmetoder, har en anden allerede det. Her er Dean Camera 's tutorial om AVRFreaks, AVR-programmeringsmetoder:

Der er mange måder at programmer AVRmicrocontrollers. Da mange mennesker læser om forskellige på én gang eller en anden, tænkte jeg, at jeg ville skitsere dem her, så deres spørgsmål kan bønnesvares hurtigt og effektivt. Tilgiv mig, hvis jeg savner en metode, der laver en fejl.

METODE 1: I systemprogrammering (ISP)

Understøttet af: Langt størstedelen af ​​AVR'er (se nedenstående indlæg)
Understøttede programmerere: AVRISP MKI / II , JTAG MKII, STK500, STK600, Dragon, AVRISP-kloner, AVR910-programmerere, AVRONE

I SystemProgrammering er måske den mest almindelige metode til programmering af flash, EEPROM, sikring og lockbytes på hele AVR-linjen. Internetudbyderen kan programmere AVRsat ekstremt høje urfrekvenser (forudsat at målet AVR kører med en høj frekvens, og programmørerne understøtter det) og er metoden til valg for næsten alle AVR-hobbyister. Der er mange, mange AVRISP-kloner og AVR910-programmører på markedet i tillæg til det enkle at gøre -det-selvdongler, der opretter forbindelse til dincomputers parallelle port.

Nylige nye dongle-designs bruger muligvis computerens serielle port, men der er anført et bevis for, at denne metode er ekstremt langsom på grund af tekniske begrænsninger.

Internetudbyder kræver, at mål-AVR'en kører med en hastighed på mindst fire gange den for ISP-uret. Dette er en almindelig faldgrube og en kilde til forvirring for mange nye til AVR'er.

METODE 2: JTAG

Understøttet af: Se AVRStudio Tools-hjælp til MKI og MKII enhedsstøtte
Understøttede programmerere: JTAG-ICE, JTAG-ICE MKII, Dragon, JTAG-ICEclones, AVRONE, STK600 (kun programmering)

Teknisk set er JTAG adebugging-system , ikke en programmeringsmetode. JTAG-grænsefladen tillader stadig programmering af en AVR, der understøtter den.

JTAG er et fejlfindingsværktøj i systemet, der giver dig mulighed for at manipulere og undersøge status for en understøttet AVR, mens den kører i et kredsløb. JTAG tillader brugeren at stoppe eksekvering til enhver tid, manipulation af AVR's interne registre og meget mere.

De officielle JTAG-ICE-enheder fra ATMEL er blevet afløst af JTAG-ICEMKII, som understøtter den nyere og mere bredt understøttet på tværs af AVRrange DebugWire debugging-protokol såvel som programmering via ISP-metoden (se ovenfor).

JTAG-ICE-kloner er tilgængelige til lave priser, men deres begrænsede kompatibilitet med kun en håndfuld AVR begrænser deres anvendelighed. Uanset dette, hvis din AVRunderstøtter JTAG-grænsefladen, JTAG-ICE forbliver en meget flot og effektiv fejlretningsmetode og -programmer.

METODE 3: DebugWire

Understøttet af: Mange mindre AVR'er
Understøttede programmerere: JTAG-ICE MKII, Dragon, AVRONE

DebugWire er igen en debugging snarere end en programmeringsgrænseflade, men kan bruges til at indlæse programmer i understøttede AVR'er. DW-grænsefladen bruger en enkeltAVR-pin (/ RESET-linjen) til al kommunikation, hvilket gør den ideel til AVR-enheder med lavt pinantal.

METODE 4: Bootloader

Understøttet af : De fleste nyere AVR'er
Understøttede programmører: Ikke relevant

Igen teknisk set ikke en programmeringsmetode. En bootloader er et lille AVR-program, der sidder i en bruger -indstillelig reserveret sektion af den almindelige flash.Bootloadere gør brug af flash-selv-modifikationsfunktionerne tilgængelige i de nyere AVR'er for at tillade AVR-topprogrammet selv via programdata indlæst fra en ekstern kilde. Bootloaders kan hente deres data fra en hvilken som helst placering (f.eks. Eksternt dataflad eller SD-kort), men langt den mest almindelige type Bootloader kommunikerer med aPC via AVR's RS-232-port (seriel).

Bootloaders er begrænsede ved, at de bruger flash plads (begrænser størrelsen på den flash, der er tilgængelig for AVR's applikation), og de kan ikke at ændre AVR-fusebits.

Bootloaders er bredt tilgængelige på internettet til download, men de lider af et "kylling og æg" -problem; du har brug for en anden type programmer, der er anført her for at programmere i bootloader i første omgang. Dette løses normalt ved konstruktionen af ​​en simpel parallel portdongle (se ISP-sektion) eller ved køb af en AVR, der allerede er forudindlæst med en bootloader (f.eks. AVRButterflyboard). p>

METODE 5: HVPP (High Voltage Parallel Programming)

Understøttet af: De fleste ikke-TINY AVR'er (med undtagelser)
Understøttede programmører : STK500, STK600, Dragon, Homebrew Dongles, AVRONE

HøjspændingsparallelProgrammering er en metode til programmering, som sjældent bruges på grund af besværet, det kræver at konfigurere. Desværre er HVPP-programmering almindeligvis brugt til at "genoplive" AVR'er, hvornår sikringsbid er blevet konfigureret forkert via en anden programmeringsmetode.

Både STK500 og Dragons understøtter HVPP. Under HVPP hæves målets / RESET-pin til den usædvanligt høje værdi på 12V, som aktiverer det interne parallelle programmeringskredsløb. / RESET pin er den eneste pin i AVR'en (på HVPP-understøttede AVR'er), som kan hæves sikkert til dette niveau.

Du kan lave dine egne HVPP-dongle-brug af online-planer som denne.

METODE 6: Højspændings seriel programmering (HVSP)

Understøttet af: Mange TINY AVR'er (med undtagelser)
Understøttede programmører: STK500 , STK600, Dragon, Homebrew Dongles, AVRONE

HVSP svarer til HVPP, bortset fra at dataoverførslen udføres i stedet for parallelt. Dette er den alternative programmeringsmetode, der anvendes på mange TINY-seriens AVR'er, der mangler nok ben til HVPP.

METODE 7: PDI

Understøttet af: XMEGA AVRs
Understøttede programmerere: STK600, AVRONE, JTAG MKII, Dragon, AVRISP MKII

PDI er den nye programmeringsgrænseflade, der er baseret på debugWire-protokollen, for XMEGA-linjen med AVR'er. Det er ikke bruges i øjeblikket på andre 8-bit AVRmicrocontrollere.

METODE 8: TPI

Understøttet af: 6-pin TINY AVR'er (ATTINY10 osv.) Understøttede programmerere: STK600, Dragon, AVRISP MKII

TPI er en meget lille programmeringsgrænseflade til derefter TINY-linjen AVR'er med limitedpins, som 6-pin ATTINY10. LikedW, TPI bruger enhedens / RESET lineas-del af kommunikationsinterfacet, men der er ligheden. Da den lille størrelse TINY AVRslack et fejlagtigt kredsløb på chip, brugerTPI-protokollen et nyt programmeringsinterface af tre ben i ahalf-duplex-protokol. Fordi linjen / RESET skal hæves til + 12V for programmering, når enhedens RSTDSB-pin er indstillet, understøttes dette i øjeblikket kun af det nyere STK600-programmeringskort.

Bonus FAQ-sektion!

  1. Hvilken er den bedste metode?
    Der findes ingen universel "bedste" metode. ISP-programmering er enkel og ekstremt populær, men alle ovenstående metoder fungerer. De to høje voltageprogrammeringsfunktioner (alt efter hvad der finder anvendelse på din enhed) er de mest funktionsrige, da de tillader reparation af en AVR, der har fået fejlkonfigureret dens sikringer. Disse metoder er imidlertid en smerte at sætte op, da det er grunden til, at de fleste brugere går med med ISP.

  2. Jeg har lavet en parallelport-dongle. Kan jeg bruge det med AVRStudio?
    Jeg er bange for ikke. AVRStudio kan ikke grænsefladen med nogen "dumme" dongler - det kræver en smart programmeringsenhed - der indeholder en mikrokontroller selv - for at dechifrere kommunikationsprotokollen, den sender. Enkle dongler uden amicrocontroller skal være "bit-banged" (dvs. de passende signaler simuleret gennem donglen via computeren).

  3. Så min dongle er ubrugelig da?
    Nej Du kan stadig programmere gennem en hjemmelavet dongle med et tredje partyprogrammeringssoftwareværktøj. AVRDude er en god, kendt, gratis kommandolinjeanvendelse - og den følger med WinAVR-pakken.

  4. Hvad er mine muligheder, hvis jeg vil have min programmør til at arbejde med AVRStudio?
    Vælg en programmør, der bruger en AVRStudio-understøttet protokol. Dette kan være den enkle "AVR910" -protokol (udfaset) eller en brugerdefineret implementering af den protokol, der bruges af STK500 / AVRISP. Bemærk, at disse programmer kræver en mikrocontroller i dem, hvilket fører til en catch-22-situation. Dette kan løses ved at have programmørens AVR-forprogrammerede på købstidspunktet med den relevante firmware eller ved at have AVR'en forprogrammeret med abootloader.

  5. Ok, jeg vil gerne brug en bootloader. Hvordan får jeg det der i første omgang ?!
    For at bruge en bootloader i enAVR skal du først have programmeret bootloaderen. Hvis du ikke har en eksisterende programmør (selv en simpel dum dongle er tilstrækkelig til den indledende programmering), kan du alternativt købe AVRforprogrammeret med en bootloader fra flere leverandører.
    Atmelalso fremstiller Butterfly demoboard, hvis MEGA169 AVR kommer forudindlæst med en AVR-Studiokompatibel bootloader.

  6. Hjælp! Jeg har rodet med sikringerne og knækket min AVR, mens jeg bruger ISP! Den mest almindelige fejl er at ændre sikringerne til urvalg til en ugyldig indstilling. Prøv at sætte et eksternt ur på AVRs XTAL1-pin, og se om det hjælper.
    Hvis det ikke lykkes, skal du bruge en af ​​højspændingsmetoderne. Disse vil rette enhver forkert konfiguration, inklusive ender, der involverer urkilden, da højspændingsmetoderne giver sin egenur til AVR'en til programmering.

  7. Hvordan bruger jeg interface til min programmør?
    Hvilken software du bruger til at grænseflade til din programmør afhænger af den type programmør, du bruger.
    Enkle "dumme" dongler kræver tredjepartssoftware, såsom PonyProg eller AVRDude. Disse måske kommandolinie- eller GUI-værktøjer - lookaround på nettet, og du vil finpudse, så de passer til dine behov.
    Programmører og bootloadere baseret på AVR910-protokollen kan bruges i AVRStudio. Vælg menuen Funktioner valgmuligheden "AVRProg" for at åbne en GUI-skærm til interface med dit program. Som et alternativ er tredjepartsværktøjer som AVRDude også AVR910-kompatible.
    Officielle værktøjer er tæt integreret i AVRStudio, især i tilfælde af fejlfindingsvarianter (JTAG / Dragon / osv.). Fra menuen AVRStudioTools skal du vælge undermenuen "ProgramAVR ..." og klikke på "Connect" -punktet. Fra dit nye vindue skal du vælge dit værktøj og dets forbindelsesinterface og klikke på ok.
    Som det er tilfældet med de dumme dongler og AVR910-programmører, kan det officielle værktøj også bruges med tredje partyprogrammeringssoftware.

  8. ol>

    (C) Dean Camera, 2009. Alle rettigheder forbeholdes. Ikke til reproduktion på andre websteder end AVRFreaks.net uden forudgående eksplicit tilladelse.

Reproduceret med forudgående udtrykkelig tilladelse, selvfølgelig! Sup >

Kortuk
2009-11-15 14:51:53 UTC
view on stackexchange narkive permalink

Jeg vil gerne tilføje en ting mere til diskussionen.

SPI er en meget almindelig grænseflade til chips. Allusionen til 3-leder er SPI-tilstanden, hvor du ikke bruger chipens valgte pin.

I2C er hovedkonkurrencen for interface, da den kun bruger 2-ledninger uanset antallet af chips, mens SPI kræver en anden ledning pr. grænseflade, men er langsommere.

Under undervisning betragter jeg undervisning om grænseflader som en af ​​de vigtigste opgaver.

Community-wiki tilgængelig for dem, der ønsker at udvide på mine oplysninger.

Jeg har aldrig hørt om, at I2C blev brugt som en indbygget flash-programmeringsgrænseflade på en mikrocontroller, selvom der ikke er nogen grund til, at det ikke kunne være indgangspunktet for en bootloader, formoder jeg ...
@vicatcu, Jeg tilføjede det bare som en meget almindelig grænseflade.
JohnC
2009-11-14 15:36:52 UTC
view on stackexchange narkive permalink

Set fra et samlet synspunkt adskiller disse grænseflader kun sig i hvilke programmerere og hvilke mikrokontroller der understøtter dem. Så længe du har et match mellem programmøren og mikrocontrolleren, ville jeg ikke bekymre mig.

Når du kommer ind i det mere, vil du opdage, at det er de ben, grænsefladen bruger på mikrocontrolleren det betyder mere - hvis du bruger disse ben til sensorer, kan signalerne forstyrre, når du programmerer enheden. Den enkleste løsning, hvis dette er et problem, er at afbryde sensorerne under programmering.

Nogle grænseflader (inklusive JTAG) giver mulighed for fejlfinding af enheden - men så har du brug for en programmør (og software til at køre den), der også støtter dette. I et forrige spørgsmål blev jeg peget på dragen for fejlretning af AVR-enheder - jeg har til hensigt at få en og spille, når min nuværende projektrunde nærmer sig færdiggørelsen.

old_timer
2012-01-17 02:13:28 UTC
view on stackexchange narkive permalink

Som du nævner seriel, bruges alle spi (2-leder, 3-leder?), usb, jtag, swd osv.

Ja, der er fordele og ulemper. Jtag er for eksempel til alle de sager, jeg kender til indbygget i hardwaren, oprindeligt og primært brugt til noget andet end fejlretning af processorer, men de bruger det tilfældigvis også til det. hvis jtag er tilgængelig, er det generelt den bedste grænseflade af den grund, men der er undtagelser. For eksempel hvis stifterne ikke er dedikeret til jtag, kan du have en fejl i koden og / eller med vilje bruge en af ​​disse stifter til noget andet, hvilket gør det ikke muligt at få adgang til chippen ved hjælp af jtag (hvis den starter softwaren i flash, der genindstiller disse ben). En anden undtagelse er, hvis processorkernen kan hænges af en fejl i softwaren i flash, og en hængt kerne ikke kan debugges via jtag. Jeg vil kalde det en fejl i hardware-designet, men har for nylig behandlet dette på en kommerciel del.

På AVR for eksempel PDI, som jeg tror, ​​folk måske kalder spi her, måske ikke. det vises i det mindste på xmega, at pdi og ekstern jtag føder ind i en fælles pdi-grænseflade internt. Så pdi-stifter giver dig direkte adgang til dette i stedet for jtag-overhead. så længe denne grænseflade fungerer, når software i flash har hængt kernen, så ville dette være den ideelle grænseflade til denne familie. Protokollen er offentliggjort og relativt enkel og indbygget i hardware. den har ulempen ved en tovejs databus, som i2c.

Arm har en jtag med færre ledninger kaldet swd, som de ikke nødvendigvis ønsker åbenlyst. open source-værktøjerne implementerer det dog. dette er i teorien en seriel jtag, de forskellige jtag-signaler sendes sekventielt på en ledning på en eller anden måde i stedet for parallelt på mange ledninger. inde i delen antager jeg, at det bliver paralleliseret igen og føder normal jtag-logik. Dette har den ulempe, at ARM ønsker at holde det halvhemmeligt, og ARM'er jtag debuggere er alligevel en kongelig smerte at bruge. Så dette er meget arbejde. Hvis / når openocd får det til at fungere, kan det være en anden historie. Du skal også stadig bekymre dig om genbrugte ben og hvad der sker med en ophængt kerne.

Et antal af leverandørerne bruger en løsning, hvor de har et eller flere boot-flash-områder, afhængigt af hvilken vej en pin eller to eller tre trækkes afhænger af hvilken flash du starter fra. Så du starter muligvis fra brugerflashen, eller du starter muligvis fra en flash, der i det mindste fra fabrikken har en seriel portbaseret bootloader eller en, der har en usb-baseret bootloader. For hver leverandør kan og kan disse softwareløsninger variere, den serielle protokol ændres på subtile eller mere end subtile måder, USB-løsningen kan ændre sig ret meget. Det gode og dårlige er, at nogle af disse blink kan du komme til, så du kan vælge at ændre den serielle bootloader, dette er både godt og dårligt, godt ved at du måske vælger at tilpasse det til dit produkt, dårligt at det er muligt for at slette den ved et uheld og mursten delen, i det mindste mursten den til den grænseflade.

Jtag-værktøjer kostede tidligere tusindvis af dollars, nu gør de ikke, for omkring $ 15 kan du få et ftdi breakout board og genbruge det med openocd. For $ 50 plus eller minus nogle kan du få en ftdi-baseret usb-løsning, der fungerer ud af kassen med openocd. Du kan få et ikke-kommercielt j-link til f.eks. $ 75 - $ 80. Og så er der de mange tusinde dollars, som er hurtige, sikre, men ikke pengene værd generelt. Du køber dem, når du er et stort selskab med masser af kontanter at sprænge og ønsker at betale for support. Når du betaler disse priser, får du det produkt, du ønsker, og du får svar på spørgsmål om teknisk support med det samme. Ligesom gratis linux vs windows eller RHEL for eksempel er linux support gratis, men du får hvad du får. Under alle omstændigheder gør dette jtag meget mere attraktivt, da jeg generelt er den mest kraftfulde løsning, råder jeg til at få disse værktøjer, hvornår og hvor du kan (hvor det er overkommeligt).

Du bør have jtag-værktøjer til arget til fejlfinding og udvikling, når og hvor overkommelig. sparkfun har ftdi-baseret usb til serielle kort, og ftdi-delene kan genbruges til big bangers, du kan bruge disse til spi eller i2c eller pdi eller jtag eller andre grænseflader. Ideelt set at få brædder, der er lavet til den bus / del, du er interesseret i, og bruge den gratis / open source-software, der følger med den. Brug også disse serielle kort, ideelt set med en forsyning på 3,3 V og en 5 V (ca. $ 15 hver, den du bruger til lillypads og arduino mini osv.) Til tilslutning til serielle porte til de forskellige mikrofoner, der har en slags seriel protokol. Jeg finder det lettere at skrive min egen læsser baseret på disse protokoller, specielt som arduino / avr folk, hvor bootloader kilden er offentliggjort og er en betydelig delmængde fra den formodede standard, de understøtter. YMMV.

Kort sagt, der er ingen god løsning, de har alle fordele og ulemper. Vær forberedt på at støtte mindst to af dem. usb og seriel eller usb og jtag eller jtag og seriel osv. Bare læg puder eller pinhuller på tavlen og ikke nødvendigvis udfylde dem. Til din personlige udvikling eller laboratorieudvikling skal du have en komplet pakke med værktøjer og være parat til at skifte fra den ene til den anden, når du brikker chips og skal gendanne brædder, eller når du udvikler din egen bootloader, usb-firmware osv.



Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 2.0-licens, den distribueres under.
Loading...