Kako in zakaj brati podatkovne liste, če so mikrokontrolerji vaš hobi

Kako in zakaj brati podatkovne liste, če so mikrokontrolerji vaš hobi

Mikroelektronika je v zadnjih letih moden hobi zahvaljujoč čarobnemu Arduinu. Ampak tukaj je težava: z dovolj zanimanja lahko hitro prerasteš DigitalWrite(), a kaj storiti naprej, ni povsem jasno. Razvijalci Arduina so vložili veliko truda v znižanje ovire za vstop v njihov ekosistem, a zunaj njega je še vedno temen gozd ostrih vezij, ki je amaterju nedostopen.

Na primer podatkovni listi. Zdi se, da imajo vse, vzemite in uporabite. Toda njihovi avtorji si očitno ne zadajo popularizacije mikrokontrolerjev; včasih se zdida namerno zlorabljajo nerazumljive izraze in okrajšave pri opisovanju preprostih stvari, da bi čim bolj zmedli nepoznavalce. A ni vse tako slabo; po želji se skrinjica odpre.

V tem članku bom delil izkušnjo strokovnjaka za humanistiko, ki komunicira s podatkovnimi listi za hobi. Besedilo je namenjeno amaterjem, ki so zrasli iz Arduino hlač, predvideva nekaj razumevanja principov delovanja mikrokontrolerjev.

Začel bom s tradicionalnim

Utripajoča LED na Arduinu

In takoj koda:

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

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

"Kaj je to? – bo vprašal prefinjeni bralec. – Zakaj nekaj pišete v vnosni register PINB? Samo za branje!" res, Arduino dokumentacija, tako kot večina izobraževalnih člankov na internetu, navaja, da je ta register samo za branje. Tudi sam sem tako mislil, dokler je nisem ponovno prebral podatkovni list na Atmega328p, ki pripravlja ta članek. In tam:

Kako in zakaj brati podatkovne liste, če so mikrokontrolerji vaš hobi

To je razmeroma nova funkcionalnost, ni je bilo na Atmega8, ne vedo vsi zanjo ali pa ni omenjena zaradi združljivosti za nazaj. Vendar je povsem primeren za prikaz ideje, da je vredno prebrati podatkovne liste, da bi izkoristili vse zmogljivosti čipa, vključno z malo znanimi. In to ni edini razlog.

Zakaj sicer brati podatkovne liste?

Običajno inženirji Arduino, ko so se dovolj igrali z LED in AnalogWrites, začnejo na ploščo povezovati vse vrste modulov in čipov, za katere že obstajajo napisane knjižnice. Prej ali slej se pojavi knjižnica, ki ne deluje tako, kot bi morala. Potem ga začne amater prebirati, da bi ga popravil, potem pa ...

In tam se zgodi nekaj popolnoma nerazumljivega, zato morate iti na Google, prebrati številne tutoriale, potegniti dele nekoga primerne kode in končno doseči svoj cilj. To daje močan občutek dosežka, v resnici pa je postopek kot ponovno izumljanje kolesa z obratnim inženiringom motocikla. Poleg tega se razumevanje delovanja tega kolesa ne poveča. Vem, ker sem to sam počel kar dolgo časa.

Če bi namesto te vznemirljive dejavnosti porabil nekaj dni za preučevanje dokumentacije Atmega328, bi prihranil ogromno časa. Navsezadnje je to dokaj preprost mikrokrmilnik.

Zato morate prebrati podatkovne liste vsaj zato, da si predstavljate, kako mikrokrmilnik na splošno deluje in kaj zmore. In še:

  • za preverjanje in optimizacijo knjižnic drugih ljudi. Pogosto jih pišejo isti amaterji, ki na novo izumljajo kolo; ali pa jih avtorji namenoma delajo pretirano varne. Naj bo trikrat večji in počasnejši, vendar bo zagotovo deloval;

  • da bi lahko uporabili čipe v projektu, za katerega nihče ni napisal knjižnice;

  • da si olajšate prehod iz ene linije MK v drugo;

  • da končno optimizirate svojo staro kodo, ki ni ustrezala Arduinu;

  • naučiti se nadzorovati kateri koli čip neposredno prek njegovih registrov, ne da bi se obremenjevali s preučevanjem strukture njegovih knjižnic, če sploh obstajajo.

Zakaj bi pisal neposredno v registre, če obstajata HAL in LL?

Slovar
HAL, plast visoke abstrakcije – knjižnica za krmiljenje mikrokontrolerja z visoko stopnjo abstrakcije. Če morate uporabiti vmesnik SPI1, preprosto konfigurirate in omogočite SPI1, ne da bi razmišljali o tem, kateri registri so odgovorni za kaj.
LL, API nizke ravni – knjižnica, ki vsebuje makre ali strukture z naslovi registrov, kar vam omogoča dostop do njih po imenu. DDRx, PORTx, PINx na Atmega so LL.

Spori na temo "HAL, LL ali registri" se redno pojavljajo v komentarjih na Habréju. Ne da bi zahteval dostop do astralnega znanja, bom preprosto delil svoje amaterske izkušnje in misli.

Ko sem bolj ali manj ugotovil Atmega in prebral članke o čudovitosti STM32, sem kupil pol ducata različnih plošč - Discovery in Blue Pills ter celo samo čipe za svoje domače izdelke. Vsi so dve leti zbirali prah v škatli. Včasih sem si rekel: "to je to, od tega vikenda obvladam STM," sem zagnal CubeMX, ustvaril nastavitev za SPI, pogledal nastalo steno besedila, velikodušno okrašeno z avtorskimi pravicami STM, in se odločil, da je to nekako preveč veliko.

Kako in zakaj brati podatkovne liste, če so mikrokontrolerji vaš hobi

Seveda lahko ugotovite, kaj je CubeMX napisal tukaj. Toda hkrati je jasno, da je nerealno zapomniti vse besedilo in ga nato napisati ročno. In za odpravljanje napak, če pomotoma pozabim označiti polje v kocki, je to povsem v redu.

Dve leti sta minili, še vedno si oblizujem ustnice Iskalnik ST MCU za vse vrste okusnih, vendar presega moje razumevanje, čips, in po naključju naletel čudovit članek, čeprav o STM8. IN nenadoma Spoznal sem, da sem ves ta čas trkal na odprta vrata: registri STM so urejeni na enak način kot kateri koli drug MK in Cube ni potreben za delo z njimi. Je bilo sploh mogoče?..

HAL in posebej STM32CubeMX je orodje za profesionalne inženirje, ki tesno sodelujejo s čipi STM32. Glavna značilnost je visoka stopnja abstrakcije, zmožnost hitrega prehoda iz enega mikrokontrolerja v drugega in celo iz enega jedra v drugega, pri tem pa ostane znotraj linije STM32. Hobisti se redko srečujejo s takšnimi težavami - naša izbira mikrokontrolerjev je praviloma omejena na asortiman AliExpressa in pogosto migriramo med radikalno različnimi čipi - prehajamo iz Atmega na STM, iz STM na ESP ali karkoli novega našega kitajskega prijatelja. vrzi na nas. HAL tukaj ne bo pomagal, njegovo preučevanje pa bo požrlo veliko časa.

LL ostaja - a od njega do registrov je pol koraka. Osebno se mi zdi pisanje makrov z naslovi registrov koristno: natančneje preučim podatkovni list, razmislim, kaj bom potreboval v prihodnosti in česa zagotovo ne, bolje strukturiram svoje programe in na splošno premagovanje pomaga pri pomnjenju .

Poleg tega obstaja niansa s priljubljenim STM32F103 - zanj obstajata dve nezdružljivi različici LL, ena uradna iz STM, druga iz Leaf Labs, uporabljena v projektu STM32duino. Če pišete odprtokodno knjižnico (in imel sem točno taka naloga), morate narediti dve različici ali neposredno dostopati do registrov.

Končno, odprava LL po mojem mnenju olajša selitev, še posebej, če to načrtujete od samega začetka projekta. Pretiran primer: napišimo Arduino blink v Atmel Studio brez 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 ta koda utripala LED na kitajski plošči s STM8 (iz ST Visual Desktop), je dovolj, da v njej spremenite dva naslova:

#define DDR_B 0x5007
#define OUT_B 0x5005

Da, uporabljam funkcijo povezovanja LED na določeno ploščo, utripala bo zelo počasi, vendar se bo zgodilo!

Katere vrste podatkovnih listov obstajajo?

V člankih in na forumih, tako v ruščini kot v angleščini, "podatkovni listi" pomenijo kakršno koli tehnično dokumentacijo za čipe in v tem besedilu počnem enako. Formalno so le ena vrsta take dokumentacije:

Tehnični podatki – Značilnosti delovanja, taktične in tehnične lastnosti. Obvezno za vse elektronske komponente. Informacije o ozadju je koristno imeti pri roki, vendar v njih ni veliko za premišljeno branje. Vendar so enostavnejši čipi pogosto omejeni na podatkovni list, da ne ustvarjajo nepotrebnih dokumentov; v tem primeru Referenčni priročnik je vključeno tukaj.

Referenčni priročnik – sama navodila zdrava knjiga 1000+ strani. Podrobno je opisano delo vsega, kar je stlačeno v čip. Glavni dokument za obvladovanje mikrokontrolerja. Za razliko od Obrazec, navodila so napisana za široko paleto MK, vsebujejo veliko informacij o perifernih napravah, ki niso na voljo v vašem specifičnem modelu.

Priročnik za programiranje ali Priročnik za komplet navodil – navodila za edinstvene ukaze mikrokrmilnika. Zasnovan za tiste, ki programirajo v zbirnem jeziku. Avtorji prevajalnika ga aktivno uporabljajo za optimizacijo kode, tako da ga v splošnem primeru ne bomo potrebovali. Toda pogled sem uporaben za splošno razumevanje, za nekatere posebne ukaze, kot je izhod iz prekinitve, kot tudi za aktivno uporabo razhroščevalnika.

Opomba o prijavi – uporabni nasveti za reševanje specifičnih problemov, pogosto s primeri kode.

List napak – opis primerov nestandardnega obnašanja čipa z možnostmi rešitve, če obstajajo.

Kaj je v podatkovnih listih

Neposredno do Tehnični podatki morda bomo potrebovali naslednje razdelke:

Povzetek naprave – prva stran podatkovnega lista na kratko opisuje napravo. Zelo uporabno v situacijah, ko ste nekje našli čip (videli v trgovini, spajkali, naleteli na omembo) in želite razumeti, kaj je.

Splošen opis – podrobnejši opis zmogljivosti čipov iz linije.

Pinouts – pinout diagrami za vse možne pakete čipov (kateri pin je na kateri nogi).

Opis pin – opis namena in zmožnosti posameznega žebljička.

spomin na zemljevidu – verjetno ne bomo potrebovali zemljevida naslovov v pomnilniku, vendar včasih vključuje tudi tabelo naslovov blokov registrov.

Registriraj zemljevid – tabela naslovov registrskih blokov se praviloma nahaja v podatkovnem listu in v Ref priročnik – samo premiki (naslovni odmiki).

Električne značilnosti – v tem delu nas zanima predvsem absolutne maksimalne ocene, ki navaja največje obremenitve na čip. Za razliko od neuničljivega Atmega328p večina MK-jev ne dovoljuje priključitve resnih obremenitev na zatiče, kar za Arduiniste postane neprijetno presenečenje.

Informacije o paketu – risbe razpoložljivih ohišij, uporabne pri oblikovanju vaših plošč.

Referenčni priročnik strukturno sestoji iz razdelkov, posvečenih določenim perifernim napravam, navedenim v njihovem naslovu. Vsako poglavje lahko razdelimo na tri dele:

Pregled, Uvod, Lastnosti – pregled perifernih zmogljivosti;

Opis delovanja, Vodnik za uporabo ali preprosto glavni blok razdelka - podroben besedilni opis načel periferne naprave in kako jo uporabljati;

Registri – opis kontrolnih registrov. V preprostih primerih, kot sta GPIO ali SPI, je to morda povsem dovolj za začetek uporabe perifernih naprav, a pogosto morate prebrati prejšnje dele.

Kako brati podatkovne liste

Podatkovni listi vas iz navade prestrašijo s svojo količino in obilico nerazumljivih besed. Pravzaprav vse ni tako strašno, če poznate nekaj življenjskih trikov.

Set dober bralnik PDF. Podatkovni listi so napisani v veličastni tradiciji papirnatih navodil; super jih je natisniti, vstaviti s plastičnimi zaznamki in šivati. Hipertekst v njih je opazen v sledovih. Na srečo je vsaj struktura dokumenta zasnovana z zaznamki, zato je primeren bralnik z enostavno navigacijo zelo potreben.

Podatkovni list ni Stroustrupov učbenik; vsebuje ni treba brati vsega. Če ste uporabili prejšnji nasvet, poiščite želeni razdelek v vrstici z zaznamki.

Predvsem podatkovni listi Referenčni priročniki, lahko opiše zmogljivosti ne določenega čipa, ampak celotno linijo. To pomeni, da polovica ali celo dve tretjini informacij ni povezanih z vašim čipom. Preden preučujete registre TIM7, se prijavite Splošen opis, ali ga imaš?

Da vem Angleški dovolj za osnovna raven. Podatkovni listi so polovico sestavljeni iz izrazov, ki jih povprečni materni govorci ne poznajo, polovica pa preprostih povezovalnih struktur. Obstajajo tudi odlični kitajski podatkovni listi v kitajski angleščini, kjer je polovica tudi izrazov, druga polovica pa naključni niz besed.

Če srečate neznana beseda, ne poskušajte prevesti z angleško-ruskim slovarjem. Če ste zmedeni histereza, potem vas prevod "histereza" ne bo ogrel. Uporabite Google, Stack Overflow, Wikipedijo, forume, kjer bo zahtevani koncept razloženo s preprostimi besedami in primeri.

Najboljši način za razumevanje prebranega je preverite v akciji. Zato imejte pri roki ploščo za odpravljanje napak, s katero se seznanjate, ali še bolje dve, če ste še vedno kaj narobe razumeli in videli čarobni dim.

Dobra navada je, da imate svoj podatkovni list vedno pri roki branje vadnice nekoga ali preučevanje knjižnice nekoga drugega. Čisto možno je, da boste v njem našli bolj optimalno rešitev za vaš problem. In obratno - če iz podatkovnega lista ne morete razumeti, kako register dejansko deluje, ga poguglajte: najverjetneje je nekdo že vse opisal s preprostimi besedami ali pustil jasno kodo na GitHubu.

Slovar

Nekaj ​​uporabnih besed in simbolov, ki vam bodo pomagali, da se hitro navadite na podatkovne liste. Kar sem se spomnil v zadnjih nekaj dneh, so dobrodošli dodatki in popravki.

elektrika
VDC, Prav – »plus«, hrana
Vss, Vee – »minus«, zemlja
tok – trenutni
Napetost - Napetost
potopiti tok – delujejo kot "tla" za zunanjo obremenitev
za vir toka – moč zunanje obremenitve
visok umivalnik/izvirni zatič – zatič s povečano "toleranco" na obremenitev

IO
H, Visoko – na zatiču Vcc
L, nizko – na zatiču Vss
Visoka impedanca, Živjo Z, plavajoči – na zatiču ni ničesar, »visoke odpornosti«, zunanjemu svetu je praktično neviden.
šibko poteg navzgor, šibko vlečenje navzdol – vgrajen pull-up/pull-down upor, približno enakovreden 50 kOhm (glejte podatkovni list). Uporablja se na primer za preprečitev, da bi vhodni zatič visel v zraku, kar bi povzročilo lažne pozitivne rezultate. Šibko - ker ga je enostavno "prekiniti".
potisni poteg – pin izhodni način, v katerem preklaplja med visoka и nizka – navaden IZHOD iz Arduina.
odprt odtok – oznaka izhodnega načina, v katerem je lahko pin nizkaAli Visoka impedanca/lebdenje. Poleg tega skoraj vedno to ni "pravi" odprti odtok; obstajajo zaščitne diode, upori in še kaj. To je preprosto oznaka za tlo/brez načina.
res odprt odtok - vendar je to pravi odprt odtok: zatič vodi neposredno v tla, če je odprt, ali ostane v limbu, če je zaprt. To pomeni, da je po potrebi mogoče skozenj prenesti napetost, ki je večja od Vcc, vendar je največja še vedno navedena v podatkovnem listu v razdelku Absolutne največje vrednosti/napetost.

Vmesniki
v seriji – zaporedno povezani
verižiti – sestavite čipe v verigo s serijsko povezavo, s čimer povečate število izhodov.
premik – premik, običajno označuje majhen premik. Oziroma prestaviti noter и premakniti ven – sprejemati in prenašati podatke bit za bit.
zapah – zapah, ki pokriva medpomnilnik, medtem ko se biti premikajo skozenj. Ko je prenos končan, se ventil odpre in nastavki začnejo delovati.
uriti se – izvajati bit-by-bit prenos, premakniti vse bite na prava mesta.
dvojni medpomnilnik, senčni register, register prednalaganja – označbe zgodovine, ko mora biti register sposoben sprejeti nove podatke, vendar jih zadržati do neke točke. Na primer, da bi PWM deloval pravilno, se njegovi parametri (delovni cikel, frekvenca) ne smejo spremeniti, dokler se trenutni cikel ne konča, nove parametre pa je že mogoče prenesti. Skladno s tem se trenutne ohranijo pri senčni register, nove pa spadajo v register prednalaganja, ki se zapiše v ustrezen register čipa.

Vse sorte
preddelilnik – preddelilnik frekvence
malo nastaviti – nastavite bit na 1
da malo počistite/ponastavite – ponastavite bit na 0 (ponastavitev – funkcija podatkovnega lista STM)

Kaj je naslednje?

Na splošno je bil tukaj načrtovan praktični del s predstavitvijo treh projektov na STM32 in STM8, izdelanih posebej za ta članek z uporabo podatkovnih listov, z žarnicami, SPI, časovniki, PWM in prekinitvami:

Kako in zakaj brati podatkovne liste, če so mikrokontrolerji vaš hobi

A besedila je veliko, zato se projekti pošiljajo v drugi del.

Veščina branja podatkovnih listov vam bo pomagala pri vašem hobiju, vendar je malo verjetno, da bo nadomestila živo komunikacijo s kolegi hobisti na forumih in klepetalnicah. Za ta namen morate še vedno izboljšati svojo angleščino. Zato bodo tisti, ki so končali z branjem, prejeli posebno nagrado: dve brezplačni učni uri v Skyeng ob prvem plačilu s kodo HABR2.

Vir: www.habr.com

Kupite zanesljivo gostovanje za strani z DDoS zaščito, VPS VDS strežniki 🔥 Kupite zanesljivo spletno gostovanje z zaščito DDoS, VPS VDS strežniki | ProHoster