Pitanje:
Programiranje mikrokontrolera: JTAG, SPI, USB oh my !?
jdiaz
2009-11-14 09:51:48 UTC
view on stackexchange narkive permalink

Primijetio sam, što se tiče mikrokontrolera, postoji nekoliko načina za njihovo programiranje. Dosta sam upoznat s USB-om jer se moj Arduino može programirati putem USB-a.

Što je JTAG ili SPI sučelje?

U konačnici znam da ta sučelja pružaju način za pokretanje čipa novim uputama, ali kako se razlikuju? Postoje li kakve prednosti jedne nad drugom?

Pet odgovori:
#1
+40
bpijls
2009-11-14 15:49:23 UTC
view on stackexchange narkive permalink

ATMEGA mikrokontroleri poput onog u arduinu koji dolaze izravno iz tvornice mogu se programirati samo pomoću sučelja SPI ili JTAG.

SPI označava serijsko periferno sučelje i način je na koji mikrokontroleri međusobno komuniciraju ili s vanjskim svijetom. Ponekad se naziva i 3-žičnom jer koristi tri žice za komunikaciju. Da biste programirali čip, trebat će vam poseban programer koji čita naredbe s USB-a za pogon SPI linija za programiranje čipa. Čini se da je popularan USBTinyISP tvrtke Adafruit. Vrlo dobar uvod u programiranje SPI je na SparkFun. Najpopularniji programi za programiranje Atmel AVR čipova su avrdude (cmd linija), ponyprog (ne radi s novijim programerima) i u nekim slučajevima AVR Studio (ako to podržava vaš programer). Prednost SPI programiranja je u tome što bilo koji Atmel čip možete programirati izravno iz tvornice, tako da vam u projektima ne bi uvijek trebao Arduino.

Gdje je SPI "samo još jedan" serijski protokol, JTAG je protokol koji je posebno dizajniran za programiranje i uklanjanje pogrešaka u mikrokontrolere. Ne podržavaju svi Atmel micro JTAG, ali oni koji se koriste u Arduinu. JTAG protokol može se koristiti za cool stvari poput "u emulaciji kruga" i otklanjanju pogrešaka, što znači da vam omogućuje da vidite stanje programa u vašem mikrokontroleru dok je zapravo pokrenut. Da biste to učinili, trebat će vam poseban programer. Vidio sam moj odgovor za još jedno pitanje.

Da biste programirali čip pomoću USB-a, morat ćete ga prvo programirati pomoću "bootloadera" koristeći SPI ili JTAG. Jednom kada se učita učitavačem, sustav će se moći programirati s bilo kojeg računala pomoću USB-serijskog pretvarača. Loša strana je ta što bootloader zauzima malo memorijskog prostora i ova metoda ne omogućuje vam da vidite stanje čipa dok radi.

Iako je točan u ideji da serijski pokretački program nije dostupan na novom ATMEGA-i (iako je na mnogim drugim mikrokontrolerima), tvrdnja da se moraju koristiti SPI ili JTAG nije točna. ATMEGA također podržavaju visokonaponski način paralelnog programiranja, koji ima mogućnost pregaziti neke postavke osigurača zbog kojih bi popularnije metode programiranja u krugu bile neizvodljive. JTAG nije dizajniran za programiranje mikrofona već za testiranje PC ploča tako da uračunava vrijednosti u i izvan IO registara pinova. Proširivanje programa za programiranje ili otklanjanje pogrešaka u osnovnim funkcijama kasnije je provalilo.
SPI i u programiranju sustava / serijsko programiranje razlikuju se. I ja sam bio naviknut na činjenicu da su mnogi manji Atmega MCU-i imali serijske programske pinove na SPI sučelju, ali ugrizla me činjenica da na nekim većim Atmega MCU-ovima serijski programski pinovi nisu na SPI sučelju.
#2
+31
tyblu
2010-12-29 16:57:32 UTC
view on stackexchange narkive permalink

Iako bih volio zaroniti u razne dostupne metode programiranja, netko drugi to već ima. Evo vodiča Dean Camera -a za AVRFreaks, metode programiranja AVR-a:

Postoji mnogo načina za program AVRmicrocontrollers. Budući da mnogi ljudi istovremeno pitaju o različitim ili o drugim, mislio sam da ću ih ovdje ocrtati kako bi se njihova pitanja mogla brzo i efikasno oglasiti. Molim vas, oprostite mi ako propustim da neki metod pogreši.

METODA 1: U sistemskom programiranju (ISP)

Podržava: Ogromna većina AVR-ova (pogledajte dolje objave)
Podržani programeri: AVRISP MKI / II , JTAG MKII, STK500, STK600, Dragon, AVRISP klonovi, AVR910 programeri, AVRONE

U SystemProgramiranju je možda najčešći metod programiranja bljeskalice, EEPROM-a, osigurača i zaključavanja byte-a AVR linije. ISP može programirati AVRsat izuzetno visoke taktove (pod pretpostavkom da ciljni AVR radi na visokoj frekvenciji i programeri to podržavaju) i metoda je izbora za gotovo sve AVR hobiste. Na tržištu postoji mnogo, mnogo AVRISP klonova i AVR910 programera, pored jednostavnih zadataka -on -self-dongles koji se spajaju na paralelni port vašeg računala.

Nedavni novi dizajni dongle-a mogu koristiti serijski port računala, međutim, dokazi pokazuju da je ova metoda izuzetno spora zbog tehničkih ograničenja.

ISP zahtijeva da ciljani AVR radi po taktu od najmanje četiri puta više od taksa ISP-a. Ovo je uobičajena zamka i izvor zbunjenosti kod mnogih novih AVR-ova.

METODA 2: JTAG

Podržava: Pogledajte AVRStudio Tools help za MKI i MKII podrška za uređaj
Podržani programeri: JTAG-ICE, JTAG-ICE MKII, Dragon, JTAG-ICEclones, AVRONE, STK600 (samo programiranje)

Tehnički JTAG je sustav za uklanjanje pogrešaka , a ne metoda programiranja. Ipak, JTAG sučelje omogućuje programiranje AVR-a koji ga podržava.

JTAG je alat za otklanjanje pogrešaka u sustavu koji vam omogućuje manipulaciju i ispitivanje statusa podržanog AVR-a dok radi u krugu. JTAGomogućuje korisniku da zaustavi izvršenje bilo kada, manipulaciju internim registrima AVR-a i još mnogo toga.

Službene JTAG-ICE jedinice iz ATMEL-a zamijenjene su JTAG-ICEMKII, koja podržava novije i više je podržana širom AVRrange DebugWire protokol za otklanjanje pogrešaka, kao i programiranje putem ISP metode (vidi gore).

JTAG-ICE klonovi dostupni su za niske cijene, ali njihova ograničena kompatibilnost sa samo nekoliko AVR-ova ograničava njihovu korisnost. Bez obzira na to, ako vaš AVR podržava JTAG sučelje, JTAG-ICE ostaje vrlo lijepa i učinkovita metoda uklanjanja pogrešaka i programer.

METODA 3: DebugWire

Podržava: Mnogi manji AVR-ovi
Podržani programeri: JTAG-ICE MKII, Dragon, AVRONE

Opet DebugWireje sučelje za otklanjanje pogrešaka, a ne za programiranje, ali se može koristiti za učitavanje u programe u podržane AVR-ove. DW sučelje koristi jedan AVR pin (linija / RESET) za sve komunikacije, što ga čini idealnim za AVR uređaje s malim brojem pinova.

METODA 4: Bootloader

Podržava : Većina novijih AVR-a
Podržani programeri: N / A

Opet tehnički nije metoda programiranja. Učitavač je mali AVR program koji se nalazi u korisniku -setabilni rezervirani odjeljak uobičajenog bljeskalice.Bootloaderi koriste značajke samo-modifikacije bljeskalice dostupne u novijim AVR-ima kako bi AVR-u omogućilo da se sam programira putem programskih podataka učitanih iz vanjskog izvora. Pokretači mogu svoje podatke izvoriti s bilo kojeg mjesta (npr. Vanjski bljesak podataka ili SD kartica), međutim daleko najčešći tip pokretača programa komunicira s aPC-om putem AVR-ovog RS-232 (serijskog) porta.

Pokretači učitavanja ograničeni su time što troše bljesak prostora (ograničavajući veličinu bljeskalice dostupne aplikaciji AVR) i oni nisu u mogućnosti za promjenu fusebita AVR-a.

Pokretači su široko dostupni na Internetu za preuzimanje, ali oni pate od problema s "piletinom i jajima"; potreban vam je drugi tip ovdje navedenog programera za programiranje u bootloaderu. To se obično rješava konstrukcijom jednostavnog paralelnog koda porta (pogledajte odjeljak ISP-a) ili kupnjom AVR-a koji je već unaprijed učitan pokretačem (npr. AVRButterflyboard).

METODA 5: Paralelno programiranje visokog napona (HVPP)

Podržava: Većina AVR-ova koji nisu TINY (s iznimkama)
Podržani programeri : STK500, STK600, Dragon, Homebrew Dongles, AVRONE

Visokonaponsko paralelno programiranje metoda je programiranja koja se rijetko koristi zbog gnjavaže koju je potrebno postaviti. Despitethis, HVPP programiranje se obično koristi za "oživljavanje" AVR-a čiji su fuzitovi pogrešno konfigurirani putem druge metode programiranja.

I STK500 i Dragonsupports HVPP. Tijekom HVPP-a, ciljni pin / RESET podignut je na neobično visoku vrijednost od 12 V što uključuje interni sklop paralelnog programiranja. Pin / RESET jedini je pin AVR-a (na AVR-ima podržanim od HVPP-a) koji se može sigurno podići na ovu razinu.

Možete napraviti vlastiti HVPP dongle koristeći mrežne planove kao što je ovaj.

METODA 6: Serijsko programiranje visokog napona (HVSP)

Podržava: Mnogo TINY AVR-ova (s iznimkama)
Podržani programeri: STK500 , STK600, Dragon, Homebrew Dongles, AVRONE

HVSP je sličan HVPP-u, osim što se prijenos podataka vrši serijski, a ne paralelno. Ovo je metoda alternativnog programiranja koja se koristi na mnogim AVR-ima iz TINY serije kojima nedostaje dovoljno pinova za HVPP.

METODA 7: PDI

Podržava: XMEGA AVR-ovi
Podržani programeri: STK600, AVRONE, JTAG MKII, Dragon, AVRISP MKII

PDI je novo programsko sučelje temeljeno na protokolu debugWire, za XMEGA liniju AVR-ova. Nije trenutno se koristi na bilo kojem drugom 8-bitnom AVRmikrokontroleru.

METODA 8: TPI

Podržava: 6-pinski TINY AVR-ovi (ATTINY10, itd.) Podržani programeri: STK600, Dragon, AVRISP MKII

TPI je vrlo maleno programsko sučelje za novu TINY liniju AVR-ova s ​​ograničenim pinovima, poput 6-pinskog ATTINY10. Sviđa mu se, TPI koristi liniju / RESET uređaja kao dio komunikacijskog sučelja, ali tu ima sličnosti. Budući da TINY AVR veličine pinte zatvara krug za uklanjanje pogrešaka na čipu, protokolTPI koristi novo programsko sučelje od tri pina, u poludupleksnom protokolu. Budući da liniju / RESET treba podići na + 12V za programiranje kada je postavljen pin RSTDSB na uređaju, to trenutno podržava samo noviji program za programiranje STK600.

Odjeljak za bonus FAQ!

  1. Koja je najbolja metoda?
    Ne postoji univerzalna "najbolja" metoda. Programiranje ISP-a jednostavno je i izuzetno je popularno, ali sve gore navedene metode funkcionirat će. Dva visokonaponska načina programiranja (ovisno o tome što se primjenjuje na vaš uređaj) najbogatija su značajkama, jer omogućuju popravak AVR-a kojem su pogrešno konfigurirani osigurači. Međutim, te je metode mučno postaviti, stoga je razlog zašto većina korisnika pristaje uz ISP.

  2. Napravio sam paralelni port. Mogu li ga koristiti s AVRStudio?
    Bojim se da ne. AVRStudio ne može surađivati ​​s bilo kojim "glupim" ključevima - potreban mu je pametni uređaj za programiranje - koji sadrži sam mikrokontroler - za dešifriranje komunikacijskog protokola koji šalje. Jednostavni dongli bez mikrokontrolera moraju se "bit-udariti" (tj. Odgovarajući signali simulirani kroz dongle putem računala).

  3. Dakle, moj dongle je onda beskoristan?
    Ne. I dalje možete programirati putem domaćeg dongle-a pomoću softverskog alata za programiranje treće strane. AVRDude je dobra, poznata, besplatna uslužna naredbena linija - i dolazi u paketu s paketom WinAVR.

  4. Koje su moje mogućnosti ako želim da programer radi s AVRStudio?
    Odaberite programera koji koristi protokol podržan od AVRStudio. To može biti jednostavan protokol "AVR910" (zastario) ili prilagođena provedba protokola koji koristi STK500 / AVRISP. Imajte na umu da ovi programeri trebaju mikrokontroler u njima, što dovodi do situacije catch-22. To se može riješiti ako je AVR programera unaprijed programiran pri kupnji odgovarajućim firmware-om ili ako je AVR unaprijed programiran abootloader-om.

  5. Ok, želim koristite bootloader. Kako da ga uopće ubacim tamo ?!
    Da biste koristili bootloader u anAVR-u, najprije morate programirati bootloader. Ako nemate postojećeg programera (evena jednostavan glupi ključ bit će dovoljan za početno programiranje), kanalizacijski kupujete AVR-je programirane pomoću bootloadera od nekoliko dobavljača.
    Atmelalso proizvodi Butterfly demoboard, čiji MEGA169 AVR dolazi unaprijed učitan s AVR-Studio kompatibilnim bootloaderom.

  6. Pomoć! Zabrljao sam s osiguračima i otuđio AVR dok sam koristio ISP! Najčešća pogreška je promjena osigurača za odabir sata u neispravnu postavku. Pokušajte staviti vanjski sat na AVR-ov XTAL1 pin i provjerite pomaže li to.
    Ako to ne uspijete, po mogućnosti upotrijebite jednu od visokonaponskih metoda. Oni će ispraviti bilo kakvu pogrešnu konfiguraciju, uključujući zvukove koji uključuju izvor takta jer visokonaponske metode pružaju svoj sat AVR-u za programiranje.

  7. Kako mogu uspostaviti vezu s programatorom?
    Koji softver upotrebljavate za sučelje s programatorom, ovisi o vrsti programera koji koristite.
    Za jednostavne "glupe" dongle potreban je softver treće strane, poput PonyProg ili AVRDude. Ovi možda alati za naredbene retke ili GUI - potražite ih na webu, a vi ćete ih prilagoditi svojim potrebama.
    Programeri i pokretači koji se temelje na protokolu AVR910 mogu se koristiti u programu AVRStudio. Na izborniku Alati odaberite opcija "AVRProg" za otvaranje GUIscreen-a za sučelje s vašim programatorom. Kao alternativa, alati trećih strana poput AVRDude također su kompatibilni s AVR910.
    Službeni alati su čvrsto integrirani u AVRStudio, posebno u slučaju inačica za uklanjanje pogrešaka (JTAG / Dragon / itd.). Na izborniku AVRStudioTools odaberite podizbornik "ProgramAVR ..." i kliknite stavku "Poveži". U novom prozoru odaberite svoj alat i njegovo sučelje za povezivanje i kliknite ok.
    Kao što je slučaj s glupim ključevima i programerima AVR910, službeni alati mogu se koristiti i sa softverom za programiranje treće strane.

  8. ol>

    (C) Dean Camera, 2009. Sva prava pridržana. Nije za reprodukciju na bilo kojoj web lokaciji osim na AVRFreaks.net bez prethodnog eksplicitnog odobrenja.

Reproducirano uz prethodno izričito dopuštenje, naravno! Sup >

#3
+5
Kortuk
2009-11-15 14:51:53 UTC
view on stackexchange narkive permalink

Želio bih dodati još jednu stvar u raspravu.

SPI je vrlo često sučelje za čipove. Aluzija na 3-žicu je način SPI-a u kojem se ne koristi pin za odabir čipa.

I2C je glavno natjecanje za sučelje jer koristi samo 2-žice bez obzira na broj čipova, dok SPI zahtijeva drugu žicu po sučelju, ali je sporiji.

Kada predajem, podučavanje o sučeljima smatram jednim od najvažnijih zadataka.

Wiki wiki dostupan za one koji se žele proširiti na moje informacije.

Nikad nisam čuo za I2C koji se koristi kao izvorno sučelje za flash programiranje na mikrokontroleru, iako nema razloga da pretpostavka ne može biti ulazna točka u bootloader ...
@vicatcu, Upravo sam ga dodao kao vrlo često sučelje.
#4
+3
JohnC
2009-11-14 15:36:52 UTC
view on stackexchange narkive permalink

Općenito se ta sučelja razlikuju samo po tome koji ih programeri i koji mikrokontroleri podržavaju. Sve dok imate podudaranje između programera i mikrokontrolera, ne bih se brinuo.

Kako budete ulazili u to više, vidjet ćete da su to igle koje sučelje koristi na mikrokontroleru to je još važnije - ako ove pribadače koristite za senzore, signali mogu ometati programiranje uređaja. Najjednostavnije rješenje kad bi to mogao predstavljati problem je odvojiti senzore tijekom programiranja.

Neka sučelja (uključujući JTAG) omogućuju otklanjanje pogrešaka u uređaju - ali tada vam je potreban programer (i softver za njegovo pokretanje) koji također podržava ovo. U prethodnom pitanju upućen sam na Zmaja za otklanjanje pogrešaka u AVR uređajima - namjeravam ga nabaviti i igrati kad se moj trenutni krug projekata približi završetku.

#5
+2
old_timer
2012-01-17 02:13:28 UTC
view on stackexchange narkive permalink

Kao što spominjete serijski, koriste se spi (2 žice, 3 žice?), usb, jtag, swd itd.

Da, postoje prednosti i nedostaci. Primjerice, Jtag je za sve slučajeve koje znam ugrađen u hardver, izvorno i prvenstveno se koristi za nešto drugo osim za otklanjanje pogrešaka u procesoru, ali slučajno ga koriste i za to. ako je jtag dostupan, to je općenito najbolje sučelje iz tog razloga, ali postoje iznimke. Na primjer, ako pinovi nisu namijenjeni jtagu, mogli biste imati pogrešku u kodu i / ili namjerno upotrijebiti jedan od tih pinova za nešto drugo, što onemogućava pristup čipu pomoću jtaga (ako pokrene softver u flešu koji prenamjenjuje te pribadače). Druga je iznimka ako jezgru procesora može bljeskalica objesiti programska pogreška, a obješena jezgra ne može se otkloniti putem jtaga. Nazvao bih to greškom u dizajnu hardvera, ali nedavno sam se time pozabavio na komercijalnom dijelu.

Na AVR-u, na primjer PDI, koji mislim da ljudi ovdje mogu nazvati spi, možda ne. čini se barem na xmegi da se pdi i vanjski jtag interno uvlače u zajedničko pdi sučelje. Dakle, pdi pinovi vam daju izravan pristup ovome umjesto jtag režijskih troškova. sve dok ovo sučelje radi kad je softver u bljeskalici objesio jezgru, tada bi ovo bilo idealno sučelje za ovu obitelj. Protokol je objavljen i relativno jednostavan te ugrađen u hardver. on ima nedostatak dvosmjerne sabirnice podataka, poput i2c.

Arm ima jtag s manje žica nazvanih swd, koje ne moraju nužno otvoreno objaviti. alati otvorenog koda to ipak provode. ovo je u teoriji serijski jtag, različiti jtag signali se šalju sekvencijalno na jednu žicu, umjesto paralelno na mnoge žice. unutar dijela pretpostavljam da se ponovno paralelizira i hrani normalnu jtag logiku. To je nedostatak ARM-a koji ga želi zadržati polutajnom, a ARM-ovi jtag otklanjači pogrešaka ionako su kraljevska boljka. Dakle, ovo je puno posla. Ako / kad openocd počne raditi, možda je to druga priča. Također se i dalje morate brinuti zbog prenamijenjenih pinova i onoga što se događa s obješenom jezgrom.

Brojni dobavljači koriste rješenje gdje imaju jedno ili više područja flash flash-a, ovisno o tome na koji je pin ili dva ili se povuku tri, ovisi o tome s koje se bljeskalice pokrećete. Dakle, možete pokrenuti sustav s korisničkog bljeskalice, ili možete pokrenuti sustav s bljeskalice koja barem tvornički ima bootloader zasnovan na serijskim priključcima ili onaj koji ima USB bootloader. Za svakog dobavljača, ova softverska rješenja mogu se razlikovati, razlikuju se, serijski se protokol mijenja na suptilan ili više nego suptilan način, USB rješenje može se prilično promijeniti. Dobro i loše je to što neke od ovih bljeskova možete dobiti, pa možete promijeniti serijski pokretački program, ovo je i dobro i loše, dobro u tome što ga možete prilagoditi svom proizvodu, loše što je moguće da ga slučajno izbrišete i zidate dio, barem opečite za to sučelje.

Jtag alati nekada su koštali tisuće dolara, a sada ne, za oko 15 dolara možete dobiti ftdi probojnu ploču i prenamijeniti je s openocd-om. Za 50 dolara plus ili minus neki možete dobiti USB rješenje temeljeno na ftdi-ju koje radi s operativnim sustavom openocd. Nekomercijalni j-link možete dobiti za otprilike 75-80 USD. A tu su i oni od nekoliko tisuća dolara koji su brzi, sigurni, ali uopće ne vrijede novca. Kupujete ih kad ste velika korporacija s puno novca i želite platiti potporu. Kad platite te cijene, dobivate željeni proizvod i odmah dobivate odgovore na pitanja tehničke podrške. Na primjer, poput besplatnog Linux-a protiv Windows-a ili RHEL-a, podrška za Linux je besplatna, ali dobivate ono što dobivate. U svakom slučaju ovo čini jtag mnogo atraktivnijim, budući da je najmoćnije rješenje uopće. Savjetujem vam da ove alate nabavite kad god i gdje možete (gdje je povoljno).

U arsenalu za otklanjanje pogrešaka i razvoj trebali biste imati jtag alate kada i kada tamo gdje povoljno. sparkfun ima USB baziran na ftdi-u na serijske ploče, a ftdi dijelovi se mogu prenamijeniti u velike bangere, a možete ih koristiti za spi ili i2c ili pdi ili jtag ili druga sučelja. Idealno bi bilo dobiti ploče izrađene za autobus / dio koji vas zanima i koristiti besplatni / open source softver koji ide uz njega. Također, koristeći ove serijske ploče, idealno bi bilo imati napajanje od 3,3 V i 5 V (oko 15 USD svaka koja koristite za lillypads i arduino minise itd.) Za povezivanje na serijske portove za razne mikroelemente koji imaju neku vrstu serijskog protokola. Smatram da je lakše napisati vlastiti loader na temelju tih protokola, posebno poput ljudi iz arduino / avr-a gdje je izvor bootloadera objavljen i značajan je podskup od navodnog standarda koji podržavaju. YMMV.

Ukratko, ne postoji jedno dobro rješenje, svi oni imaju prednosti i nedostatke. Budite spremni podržati barem dvoje od njih. usb i serial ili usb i jtag ili jtag i serial itd. Samo položite pločice ili pričvrstite rupe na ploču i ne morate ih popuniti. Za svoj osobni ili laboratorijski razvoj imajte čitav niz alata i budite spremni za prebacivanje s jednog na drugi dok zidate čipove i morate oporavljati ploče ili dok razvijate vlastiti bootloader, USB firmware itd.



Ova pitanja su automatski prevedena s engleskog jezika.Izvorni sadržaj dostupan je na stackexchange-u, što zahvaljujemo na cc by-sa 2.0 licenci pod kojom se distribuira.
Loading...