Kako i zašto čitati datasheet-ove ako su mikrocontroleri vaš hobi

Kako i zašto čitati datasheet-ove ako su mikrocontroleri vaš hobi

Mikroelektronika je postala popularni hobi posljednjih godina zahvaljujući čarobnom Arduinu. No, ima jedna stvar: uz dovoljno interesa, vrlo brzo se pređe na DigitalWrite(), a što dalje - nije baš jasno. Razvijači Arduina puno su se trudili smanjiti ulaznu barijeru u svoju ekosustav, ali izvan nje i dalje se nalazi mračna šuma stroge elektronike koja nije lako dostupna entuzijastima.

Na primjer, datasheetovi. Izgledaju kao da sadrže sve što vam treba, samo uzmite i koristite. No, njihovi autori očigledno ne postavljaju sebi zadatak popularizacije mikrokontrolera; ponekad se čini, kao da namjerno koriste nejasne pojmove i kraticu pri opisivanju jednostavnih stvari kako bi maksimalno zbunili neupućenog. No, nije sve tako loše, uz malo želje sve će se razjasniti.

U ovom ću članku podijeliti iskustvo humanista koji se bavi datasheetovima u hobističke svrhe. Tekst je namijenjen onima koji su odrasli s Arduinom, i predviđa određeno razumijevanje osnovnih principa rada mikrokontrolera.

Počet ću s tradicionalnim

Treptanjem LED-a na Arduinu

I odmah kod:

void setup() {
DDRB |= (1<<5);
}

void loop() {
PINB = (1<<5);
for (volatile uint32_t k=0; k<100000; k++);
}

"Što je ovo?" - upitat će iskusni čitatelj. "Zašto nešto pišeš u ulazni registar PINB? On je samo za čitanje!" Zaista, dokumentacija Arduina, kao i većina obrazovnih članaka na internetu, tvrdi da je ovaj registar samo za čitanje. I sam sam to mislio sve dok nisam ponovno pregledao datashit Atmega328p, pripremajući ovaj članak. A tu se kaže:

Kako i zašto čitati datasheet-ove ako su mikrocontroleri vaš hobi

To je relativno nova funkcionalnost, nije je bilo na Atmega8, o njoj ne znaju svi ili je ne spominju zbog povratne kompatibilnosti. No, sasvim je korisno za demonstraciju misli da se datasheetovi trebaju čitati kako bi se iskoristile sve mogućnosti čipa, uključujući one koje su malo poznate. I to nije jedini razlog.

Zašto još čitati datasheetove

Obično, ljubitelji Arduina, nakon igranja sa LED diodama i AnalogWrite-ovima, počinju povezivati različite module i čipove na ploču za koje već postoje napisane biblioteke. Rano ili kasno, naiđu na biblioteku koja ne funkcionira kako treba. Tada entuzijast počinje kopati po njoj kako bi je popravio, a tu…

Tamo se događa nešto potpuno nejasno, zbog čega je potrebno krenuti na Google, čitati brojne tutorijale, povlačiti dijelove nečijeg prikladnog koda i konačno ostvariti svoje. To donosi snažan osjećaj postignuća, ali zapravo proces više nalikuje izmišljanju bicikla putem reverznog inženjerstva motocikla. A ni razumijevanje kako taj bicikl funkcionira ne postaje veće. Znam, jer sam se time bavio dovoljno dugo.

Da sam umjesto ovog zanimljivog zadatka potrošio nekoliko dana na proučavanje dokumentacije za Atmega328, uštedio bih ogromnu količinu vremena. Na kraju krajeva, to je prilično jednostavan mikrokontroler.

Stoga bi bilo dobro čitati datasheetove barem kako bismo imali predstavu o tome kako je mikrokontroler uopće konstruiran i što sve može raditi. I još:

  • kako bismo provjeravali i optimizirali tuđe biblioteke. Često ih pišu isti entuzijasti koji izmišljaju bicikl; ili, s druge strane, autori namjerno dodaju višak zaštite od gluposti. Neka bude tri puta sporije, ali neka sigurno funkcionira;

  • kako bismo imali mogućnost koristiti čipove za koje nitko nije napisao biblioteku;

  • kako bismo olakšali sebi zadatak migracije s jednog modela mikrokontrolera na drugi;

  • kako bismo konačno optimizirali svoj stari kod koji nije mogao stati u Arduinu;

  • kako bismo naučili upravljati bilo kojim čipom izravno preko njegovih registara, ne zamarajući se proučavanjem strukture njegovih biblioteka, ako takve uopće postoje.

Zašto pisati izravno u registre, kada postoje HAL i LL?

Rječnik
HAL, High Abstraction Layer – biblioteka za upravljanje mikrokontrolerom s visokim razinama apstrakcije. Ako trebate koristiti SPI1 sučelje, jednostavno ga postavite i aktivirajte, ne razmišljajući o tome koji registri za što odgovaraju.
LL, Low Level API – biblioteka koja sadrži makroe ili strukture s adresama registara, omogućujući pristup njima po imenu. DDRx, PORTx, PINx na Atmegi – to je LL.

Rasprave o temi „HAL, LL ili registri“ redovito se nalaze u komentarima na Habru. Ne pretendirajući na pristup astralnom znanju, samo ću podijeliti svoje amatersko iskustvo i razmišljanja.

Nakon što sam se manje-više upoznao s Atmegom i pročitao mnogo članaka o čarima STM32, kupio sam pola tuceta različitih ploča – i Discovery, i 'Plave Tablete', pa čak i same čipove za svoje projekte. Sve to je dvije godine skupljalo prašinu u kutiji. Ponekad sam si govorio: 'To je to, od ovog vikenda počinjem s STM-om', pokretao CubeMX, generirao postavke za SPI, gledao na zid teksta začinjenog copyrightima STM-a, te odlučio da je to nekako previše.

Kako i zašto čitati datasheet-ove ako su mikrocontroleri vaš hobi

Naravno, moguće je shvatiti što je CubeMX ovdje napisao. No, jasno je i da je nepraktično zapamtiti sve formulacije da bih ih kasnije mogao pisati rukama. A debagiranje toga, ako slučajno zaboravim označiti neku opciju u Kubem, to je pravo mučenje.

Prošlo je dvije godine, a ja još uvijek uživam u ST MCU Finder raznim ukusnim, ali za moje razumijevanje nedostupnim čipovima, i slučajno sam naletio na izvrsnu stavku, iako o STM8. I iznenada shvatio sam da sam tokom cijelog ovog vremena kucao na otvorena vrata: registri kod STM-a su postavljeni slično kao kod bilo kojeg drugog mikrocontroller-a, i za rad s njima Cube nije obavezan. Što, da li je to bilo moguće?..

HAL i konkretno STM32CubeMX – alat za profesionalne inženjere koji intenzivno rade s STM32 čipovima. Glavna prednost je visok nivo apstrakcije, mogućnost brze migracije s jednog mikrocontroller-a na drugi, pa čak i s jedne jezgre na drugu, ostajući unutar STM32 linije. Hobi inženjeri se s takvim zadacima rijetko susreću – naš izbor mikrocontroller-a je obično ograničen na asortiman s AliExpress-a, i češće migriramo između radikalno različitih čipova – prelazimo s Atmega na STM, iz STM na ESP, ili što god novo donesu naši kineski prijatelji. HAL ovdje ne pomaže, a učenje mu uzima mnogo vremena.

Preostaje LL – ali od njega do registara je samo korak. Osobno smatram da je korisno pisati svoje makroe s adresama registara: pažljivije proučavam datasheet, razmišljam o tome što će mi trebati u budućnosti, a što sigurno ne, bolje strukturiram svoje programe, a i općenito, prevazilaženje pomaže pamćenju.

Osim toga, postoji nijansa s popularnim STM32F103 – za njega postoje dvije nespojive verzije LL, jedna službena od STM-a, druga od Leaf Labs, koja se koristi u projektu STM32duino. Ako želite pisati open-source biblioteku (a ja sam imao upravo takav zadatak), potrebno je ili napraviti dvije verzije, ili se obratiti registrima direktno.

Na kraju, odustajanje od LL, po mom mišljenju, olakšava migraciju, posebno ako se na to računa od samog početka rada na projektu. Ekstreman primjer: napisat ćemo Arduinov blink u Atmel Studiju bez LL:

#include <stdint.h>

#define _REG(addr) (*(volatile uint8_t*)(addr))

#define DDR_B 0x24
#define OUT_B 0x25

int main(void)
{
    volatile uint32_t k;

    _REG(DDR_B) |= (1<<5);

    while(1)
    {
        _REG(OUT_B) |= (1<<5);
        for (k=0; k<50000; k++);
        _REG(OUT_B) &= ~(1<<5);
        for (k=0; k<50000; k++);
    } 
}

Da bi ovaj kod trepće LED diodom na kineskoj ploči s STM8 (iz ST Visual Desktop), dovoljno je promijeniti samo dvije adrese:

#define DDR_B 0x5007
#define OUT_B 0x5005

Da, koristim posebnost povezivanja LED diode na određenoj ploči, treptat će vrlo sporo, ali hoće!

Koje vrste datasheeta postoje

U članicama i na forumima, i na ruskom i na engleskom jeziku, pod "datasheetovima" podrazumijevaju se svi tehnički dokumenti za čipove, a tako se ponašam i u ovom tekstu. Formalno, oni su samo jedna vrsta takve dokumentacije:

Datasheet – tehnički podaci, taktičko-tehničke karakteristike. Obavezno prisutni kod svakog elektroničkog sastavnog dijela. Referentna informacija, korisno je imati pri ruci, ali nema mnogo smisla detaljno je čitati. Ipak, jednostavniji čipovi često se ograničavaju na datasheet kako ne bi stvarali suvišne dokumente; u tom slučaju Referentni priručnik uključuje se ovdje.

Referentni priručnik – sama instrukcija, opširna knjiga od 1000+ stranica. Detaljno objašnjava rad svega što je ugrađeno u čip. Glavni dokument za učenje mikro kontrolera. Za razliku od datasheet, instrukcije se pišu za široku seriju MK, sadrže mnogo informacija o perifernim uređajima koji nedostaju u vašem konkretnom modelu.

Programming Manual ili Priručnik za set instrukcija – upute za jedinstvene komande mikro kontrolera. Namijenjeno je onima koji programiraju u Assembleru. Autori kompajlera aktivno ga koriste za optimizaciju koda, stoga nam obično neće biti potrebna. Međutim, korisno je zaviriti ovdje za opće razumijevanje, posebno kod određenih specifičnih komandi poput izlaza iz prekida, kao i pri aktivnoj upotrebi debagera.

Bilješka o aplikaciji – korisni savjeti za rješavanje specifičnih zadataka, često s primjerima koda.

Ispravak lista – opis slučajeva nestandardnog ponašanja čipa s mogućim rješenjima, ako ih ima.

Što je sve u datasheetovima

Izravno u Datasheet možemo zatrebati takve sekcije:

Sažetak uređaja – prva stranica datasheeta ukratko govori o uređaju. Veoma je korisna u situacijama kada ste negdje pronašli čip (vidjeli u trgovini, izvadili iz uređaja, naišli na spominjanje) i želite razumjeti o čemu se radi.

Opšti opis – detaljan opis mogućnosti čipova iz serije.

Priključci – sheme priključaka za sve moguće kućište čipa (na kojoj nozi se nalazi koji pin).

Pin Description – opis svrhe i mogućnosti svakog pina.

Memorijska mapa – mapa adresa u memoriji možda nam neće biti potrebna, ali ponekad uključuje i tabelu adresa registarskih blokova.

Registri – tabela adresa registarskih blokova obično se nalazi u tehničkoj dokumentaciji, a u Uputstvu – samo pomaci (adrese pomaka).

Električne karakteristike – u ovom delu nas prvenstveno zanimaju maksimalnim ocjenama, koja navodi maksimalne opterećenja na čip. Za razliku od neuništivog Atmega328p, većina mikrokontrolera ne dopušta povezivanje ozbiljnih opterećenja na pinove, što postaje neugodno iznenađenje za Arduino entuzijaste.

Informacije o paketu – crteži dostupnih kućišta, korisni prilikom projektovanja vlastitih ploča.

Referentni priručnik strukturalno se sastoji od sekcija posvećenih konkretnoj periferiji naznačenoj u njihovim naslovima. Svako poglavlje može se uslovno podeliti na tri dela:

Overview, Uvod, Karakteristike – pregled mogućnosti periferije;

Funkcionalni opis, Vodič za upotrebu ili jednostavno glavni deo sekcije – detaljan tekstualni opis principa rada periferije i načina njene upotrebe;

Registri – opis upravljačkih registara. U jednostavnim slučajevima kao što su GPIO ili SPI, to može biti sasvim dovoljno za početak korišćenja periferije, ali često ipak treba pročitati i prethodne delove.

Kako čitati tehničke dokumente

Tehnički dokumenti mogu zastrašivati svojim obimom i obiljem nepoznatih reči. U stvarnosti nije tako strašno, ako znate nekoliko saveta.

Instalirajte dobru PDF čitač. Tehnički dokumenti se pišu u slavnim tradicijama papirnih uputstava, sjajno je štampati ih, obeležiti plastičnim oznakama i povezati. Hipertekst u njima je prisutan u minimalnim količinama. Na sreću, barem struktura dokumenta je prikazana oznakama, tako da je dobar čitač s lako dostupnom navigacijom veoma potreban.

Tehnički dokument nije knjiga Stroustrupa, u njemu ne treba čitati sve redom. Ako ste iskoristili prethodni savet – jednostavno pronađite potrebnu sekciju u panelu oznaka.

Tehnički dokumenti, posebno Reference Manual, mogu opisivati mogućnosti ne konkretnog čipa, već cela serija. To znači da polovina, a ponekad i dve trećine informacija nemaju veze s vašim čipom. Pre nego što proučite registre TIM7, proverite u Opšti opis, imate li ga?

Znać engleski dovoljno na osnovnoj razini. Tehnički opisi napola se sastoje od termina nepoznatih prosječnom govorniku jezika, a napola - od jednostavnih povezujućih konstrukcija. Ponekad postoje divni kineski tehnički opisi na kineskom engleskom, gdje je polovica također izraza, a druga polovica - nasumični skup riječi.

Ako naiđete na nepoznatu riječ, nemojte pokušavati prevesti je pomoću englesko-ruskog rječnika. Ako vas zbunjuje histerezis, prijevod „histereza” neće vam ništa pomoći. Koristite Google, Stack Overflow, Wikipediju, forume gdje će biti objašnjeno jednostavnim riječima s primjerima.

Najbolji način da razumijete pročitano je provjeriti u praksi. Stoga, imajte pri ruci razvojnu ploču koju istražujete, i još bolje dvije - u slučaju da nešto ne razumijete i ugledate čarobni dim.

Praktično je imati tehnički opis pri ruci kada pročitate nečiji vodič ili istražujete tuđu biblioteku. Sasvim je moguće da ćete u njemu pronaći optimalnije rješenje za vaš problem. I obrnuto - ako iz tehničkog opisa ne uspijevate shvatiti kako zapravo radi registrator, pretražite ga: vjerojatno je netko već sve opisao jednostavnim riječima ili ostavio razumljiv kod na GitHubu.

Rječnik

Malo korisnih riječi i oznaka koje pomažu bržem snalaženju u tehničkim opisima. Ono što sam se sjetio u posljednjih nekoliko dana, dodatke i ispravke su dobrodošli.

Elektricitet
Vcc, Vdd – „plus”, napajanje
Vss, Vee – „minus”, zemlja
current – struja
napon – napon
da povuče struju – raditi „zemljom“ za vanjsko opterećenje
da napaja struju – napajati vanjsko opterećenje
visoki sink/source pin – pin s povećanom „tolerancijom” na opterećenje

IO
H, Visoko – na pinu Vcc
L, Nisko – na pinu Vss
Visoka impedancija, Hi-Z, floating – na pinu nema ništa, „visoka impedancija”, zapravo je nevidljiv vanjskom svijetu.
slaba povratna, slaba povratna – ugrađeni povlačeći/potiskujući otpornik, približno ekvivalent 50 kΩ (vidi tehnički opis). Koristi se, na primjer, da ulazni pin ne visi u zraku, uzrokujući lažne okidanje. Slaba – jer je lako „nadjačati”.
push pull – izlazni način rada pina, u kojem se prebacuje između Visoko i Nisko – obični OUTPUT s Arduinom.
open drain – oznaka izlaznog načina rada, u kojem pin može biti ili Nisko, ili Visoka impedancija / Floating. U većini slučajeva to nije „pravi“ otvoreni odvod, postoje zaštitne diodne, otpornici i sve ostalo. To je samo oznaka načina rada zemlja/nothing.
pravi otvoreni odvod – a ovo je pravi otvoreni odvod: pin se direktno povezuje na zemlju kada je otvoren, ili ostaje u suspendovanom stanju kada je zatvoren. To znači da se kroz njega može propuštati naponski nivo veći od Vcc, ali maksimum je i dalje naveden u specifikaciji u odeljku Apsolutna maksimalna naponska ograničenja.

Sučelja
u seriji – povezani u seriji
u lanac – povezati čipove u lanac serijskim povezivanjem, povećavajući broj izlaza.
pomak – pomeranje, obično označava pomeranje bitova. Shodno tome, za pomeranje unutra i za pomeranje napolje – prihvatiti i prenositi podatke po bitovima.
zavjesa – klapna, koja pokriva bafer dok se bitovi pomeraju kroz njega. Kada je prenos završen, klapna se otvara, bitovi počinju sa radom.
za klokan u – izvršiti prenos po bitovima, pomeriti sve bitove na potrebna mesta.
dupli bafer, senka registrova, prelazni registar – oznake istorije, kada registar treba da može primati nove podatke, ali ih zadržava do nekog trenutka. Na primer, za pravilno funkcionisanje PWM-a njegove karakteristike (dužina, frekvencija) ne bi trebale da se menjaju dok se ne završi trenutni ciklus, ali novi parametri mogu već biti preneseni. Tako da se trenutni drže u senka registrova, a novi idu u prelazni registar, budući da su zapisani u odgovarajući registar čipa.

Razno
preddelitelj frekvencije – postaviti bit
– postaviti bit na 1 za čišćenje/resetovanje bita
– resetovati bit na 0 ( resetovati– χαρακτηριστικό του STM datasheets) Uopšte, planirana je praktična sesija s demonstracijom tri projekta na STM32 i STM8, urađena posebno za ovaj članak uz pomoć specifikacija, sa lampama, SPI, tajmerima, PWM-om i prekidima:

Što dalje

Ali tekst je postao predug, tako da projekti idu u drugi deo.

Kako i zašto čitati datasheet-ove ako su mikrocontroleri vaš hobi

Veština čitanja specifikacija pomoći će vam u vašem hobiju, ali malo verovatno da će zameniti ličnu komunikaciju sa kolegama sa sličnim interesovanjima na forumima i u čatovima. Zbog toga je prvo potrebno unaprediti engleski jezik. Stoga, onima koji su došli do kraja – posebno nagradno: dva besplatna časa u Skyeng-u uz prvu uplatu uz kod

HABR2 Mikroelektronika..

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster