Ako a prečo čítať dátové listy, ak sú mikrokontroléry vaším koníčkom

Ako a prečo čítať dátové listy, ak sú mikrokontroléry vaším koníčkom

Mikroelektronika je v posledných rokoch módnym koníčkom vďaka magickému Arduinu. Ale tu je problém: s dostatočným záujmom môžete rýchlo prekonať DigitalWrite (), ale čo robiť ďalej, nie je úplne jasné. Vývojári Arduina vynaložili veľa úsilia na zníženie bariéry vstupu do ich ekosystému, ale mimo neho stále existuje temný les drsných obvodov, ktorý je pre amatéra neprístupný.

Napríklad dátové listy. Zdá sa, že majú všetko, vezmite si to a použite to. Ale ich autori si zjavne nekladú za úlohu popularizovať mikrokontroléry; Niekedy zdá saže pri opise jednoduchých vecí zámerne zneužívajú nezrozumiteľné výrazy a skratky, aby čo najviac zmiatli nezasvätených. Ale nie všetko je také zlé, ak je to žiaduce, rakva sa otvorí.

V tomto článku sa podelím o skúsenosti humanitného špecialistu komunikujúceho s datasheetmi pre hobby účely. Text je určený pre amatérov, ktorí vyrástli z nohavíc Arduino, predpokladá určité pochopenie princípov fungovania mikrokontrolérov.

Začnem tradične

Bliká LED na Arduine

A hneď kód:

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

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

"Čo to je? – spýta sa sofistikovaný čitateľ. – Prečo píšete niečo do vstupného registra PINB? Je to len na čítanie!" naozaj, Arduino dokumentácia, ako väčšina vzdelávacích článkov na internete uvádza, že tento register je len na čítanie. Sám som si to myslel, kým som si to neprečítal dátový hárok na Atmega328p pri príprave tohto článku. A tam:

Ako a prečo čítať dátové listy, ak sú mikrokontroléry vaším koníčkom

Ide o relatívne novú funkcionalitu, na Atmega8 nebola, nie každý o nej vie alebo nie je spomenutá z dôvodu spätnej kompatibility. Je však celkom vhodný na demonštráciu myšlienky, že údajové listy sa oplatí prečítať, aby ste mohli využiť všetky možnosti čipu, vrátane tých málo známych. A to nie je jediný dôvod.

Prečo inak čítať dátové listy?

Inžinieri Arduino, ktorí sa dostatočne hrali s LED a AnalogWrites, zvyčajne začnú pripájať všetky druhy modulov a čipov k doske, pre ktorú už existujú napísané knižnice. Skôr či neskôr sa objaví knižnica, ktorá nefunguje tak, ako by mala. Potom sa amatér začne do toho hrabať, aby to opravil, a potom...

A stane sa tam niečo úplne nepochopiteľné, takže musíte ísť na Google, prečítať si množstvo tutoriálov, vytiahnuť časti niekoho vhodného kódu a nakoniec dosiahnuť svoj cieľ. To dáva silný pocit úspechu, ale v skutočnosti je tento proces ako znovuobjavenie kolesa reverzným inžinierstvom motocykla. Navyše pochopenie toho, ako tento bicykel funguje, sa nezvýši. Viem, lebo sám som to robil dosť dlho.

Keby som namiesto tejto vzrušujúcej činnosti strávil pár dní štúdiom dokumentácie Atmega328, ušetril by som obrovské množstvo času. Koniec koncov, ide o pomerne jednoduchý mikrokontrolér.

Preto si musíte aspoň prečítať dátové listy, aby ste si predstavili, ako mikrokontrolér vo všeobecnosti funguje a čo dokáže. A ďalej:

  • kontrolovať a optimalizovať knižnice iných ľudí. Často ich píšu tí istí amatéri, ktorí znovu vynašli koleso; alebo naopak, autori ich schválne robia prehnane bezchybnými. Nech je to trikrát väčšie a pomalšie, ale určite to pôjde;

  • mať možnosť použiť čipy v projekte, pre ktorý nikto nenapísal knižnicu;

  • aby ste si uľahčili migráciu z jednej linky MK na druhú;

  • konečne optimalizovať váš starý kód, ktorý sa nezmestil do Arduina;

  • naučiť sa ovládať akýkoľvek čip priamo cez jeho registre bez toho, aby ste sa museli obťažovať štúdiom štruktúry jeho knižníc, ak nejaké existujú.

Prečo písať priamo do registrov, keď existuje HAL a LL?

glosár
HAL, vrstva vysokej abstrakcie – knižnica na ovládanie mikrokontroléra s vysokou úrovňou abstrakcie. Ak potrebujete použiť rozhranie SPI1, jednoducho nakonfigurujete a povolíte SPI1 bez premýšľania o tom, ktoré registre sú za čo zodpovedné.
LL, Low Level API – knižnica obsahujúca makrá alebo štruktúry s adresami registrov, ktoré vám umožňujú pristupovať k nim podľa názvu. DDRx, PORTx, PINx na Atmega sú LL.

V komentároch na Habré sa pravidelne objavujú spory na tému „HAL, LL alebo registre“. Bez nároku na prístup k astrálnemu poznaniu sa jednoducho podelím o svoje amatérske skúsenosti a myšlienky.

Keď som už viac-menej prišiel na Atmegu a prečítal som si články o úžasnosti STM32, kúpil som si pol tucta rôznych dosiek – Discovery a Blue Pills a dokonca len čipsy pre moje domáce produkty. Všetci dva roky zbierali prach v krabici. Niekedy som si povedal: „To je ono, tento víkend ovládam STM,“ spustil CubeMX, vygeneroval nastavenie pre SPI, pozrel sa na výslednú stenu textu, veľkoryso ochutený autorskými právami STM, a rozhodol sa, že toto je už akosi priveľa. .

Ako a prečo čítať dátové listy, ak sú mikrokontroléry vaším koníčkom

Samozrejme, môžete prísť na to, čo napísal CubeMX tu. No zároveň je jasné, že zapamätať si všetky formulácie a následne ich písať rukou je nereálne. A aby som to odladil, ak náhodou zabudnem zaškrtnúť políčko v kocke, je to úplne v poriadku.

Prešli dva roky, stále si olizujem pery Vyhľadávač ST MCU pre všetky druhy chutné, ale mimo môjho chápania, čipsy, a náhodou natrafili úžasný článok, aj keď o STM8. A zrazu Uvedomil som si, že celý ten čas som klopal na otvorené dvere: registre STM sú usporiadané rovnako ako u každého iného MK a kocka s nimi nie je potrebná. Bolo to vôbec možné?...

HAL a konkrétne STM32CubeMX je nástroj pre profesionálnych inžinierov, ktorí úzko spolupracujú s čipmi STM32. Hlavnou črtou je vysoká úroveň abstrakcie, schopnosť rýchlo migrovať z jedného MCU do druhého a dokonca z jedného jadra do druhého, pričom zostáva v rámci línie STM32. Hobby sa s takýmito problémami stretávajú len zriedkavo - náš výber mikrokontrolérov je spravidla obmedzený na sortiment AliExpress a často migrujeme medzi radikálne odlišnými čipmi - prechádzame z Atmega na STM, od STM k ESP alebo čokoľvek nové, naši čínski priatelia hodiť na nás. HAL tu nepomôže a jeho štúdium zaberie veľa času.

LL zostáva - ale od neho do registrov je pol kroku. Osobne považujem písanie svojich makier s adresami registra za užitočné: pozornejšie študujem datasheet, premýšľam, čo budem v budúcnosti potrebovať a čo určite nie, lepšie si štruktúrujem programy a vo všeobecnosti mi prekonávanie pomáha zapamätať si .

Okrem toho existuje nuansa s populárnym STM32F103 - existujú preň dve nekompatibilné verzie LL, jedna oficiálna od STM, druhá od Leaf Labs, použitá v projekte STM32duino. Ak napíšete knižnicu s otvoreným zdrojovým kódom (a ja som mal presne takúto úlohu), musíte buď vytvoriť dve verzie, alebo priamo vstúpiť do registrov.

Nakoniec, odstránenie LL podľa môjho názoru zjednodušuje migráciu, najmä ak s ňou plánujete od samého začiatku projektu. Prehnaný príklad: napíšme Arduino blink v Atmel Studio 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++);
    } 
}

Aby tento kód blikal LED na čínskej doske s STM8 (od ST Visual Desktop), stačí v ňom zmeniť dve adresy:

#define DDR_B 0x5007
#define OUT_B 0x5005

Áno, používam funkciu pripojenia LED na konkrétnej doske, bude blikať veľmi pomaly, ale stane sa to!

Aké typy údajových listov existujú?

V článkoch a na fórach, v ruštine aj angličtine, „datasheets“ znamená akúkoľvek technickú dokumentáciu pre čipy a ja robím to isté v tomto texte. Formálne sú len jedným typom takejto dokumentácie:

Dátový hárok – Výkonnostné, taktické a technické vlastnosti. Povinné pre všetky elektronické komponenty. Základné informácie je užitočné mať po ruke, ale nie je v nich veľa na premyslené čítanie. Jednoduchšie čipy sú však často obmedzené na údajový list, aby sa nevyrábali zbytočné dokumenty; v tomto prípade Referenčná príručka je tu zahrnuté.

Referenčná príručka – samotný návod, zdravá kniha s 1000+ stranami. Podrobne je popísaná práca všetkého, čo je v čipe vtesnané. Hlavný dokument na zvládnutie mikrokontroléra. Na rozdiel od dátový hárok, návody sú napísané pre širokú škálu MK, obsahujú množstvo informácií o perifériách, ktoré nie sú dostupné vo vašom konkrétnom modeli.

Programovací manuál alebo Návod na súpravu pokynov – inštrukcie pre jedinečné príkazy mikrokontroléra. Navrhnuté pre tých, ktorí programujú v jazyku symbolických inštrukcií. Autori kompilátorov ho aktívne používajú na optimalizáciu kódu, takže vo všeobecnom prípade ho nebudeme potrebovať. Pohľad sem je však užitočný pre všeobecné pochopenie, pre niektoré špecifické príkazy, ako je ukončenie prerušenia, ako aj pre aktívne používanie debuggera.

Aplikačná poznámka – užitočné tipy na riešenie konkrétnych problémov, často s príkladmi kódu.

Errata Sheet – popis prípadov neštandardného správania čipu s možnosťami riešenia, ak existujú.

Čo je v technických listoch

Priamo na Dátový hárok možno budeme potrebovať nasledujúce sekcie:

Súhrn zariadení – prvá strana údajového listu stručne popisuje zariadenie. Veľmi užitočné v situáciách, keď ste niekde našli čip (videli ste ho v obchode, spájkovali ste ho, narazili na zmienku) a chcete pochopiť, čo to je.

Všeobecný popis – podrobnejší popis schopností čipov z linky.

Pinouty – schémy pinoutov pre všetky možné balíčky čipov (ktorý kolík je na ktorej nohe).

Popis špendlíka – popis účelu a možností každého kolíka.

pamäť Mapa – je nepravdepodobné, že budeme potrebovať mapu adries v pamäti, ale niekedy obsahuje aj tabuľku adries blokov registrov.

Registrovať mapu – tabuľka adries registrových blokov sa spravidla nachádza v údajovom liste a v Referenčný manuál - iba zmeny (posuny adries).

Elektrické vlastnosti – v tejto časti nás primárne zaujíma aboslútne maximálne hodnotenie, s uvedením maximálneho zaťaženia na čip. Na rozdiel od nezničiteľného Atmega328p vám väčšina MK neumožňuje pripojiť vážne záťaže na kolíky, čo sa pre Arduinistov stáva nepríjemným prekvapením.

Informácie o balíku – výkresy dostupných puzdier, užitočné pri navrhovaní vašich dosiek.

Referenčná príručka štrukturálne pozostáva z častí venovaných špecifickým perifériám uvedeným v ich názve. Každá kapitola môže byť rozdelená do troch častí:

Prehľad, úvod, Vlastnosti – prehľad periférnych schopností;

Popis funkcie, Sprievodca použitím alebo jednoducho hlavný blok sekcie - podrobný textový popis princípov periférneho zariadenia a spôsobu jeho používania;

registre – popis riadiacich registrov. V jednoduchých prípadoch, ako je GPIO alebo SPI, to môže úplne stačiť na to, aby ste začali používať periférie, ale často si stále musíte prečítať predchádzajúce diely.

Ako čítať dátové listy

Datasheety vás zo zvyku vystrašia objemom a množstvom nezrozumiteľných slov. V skutočnosti nie je všetko také strašidelné, ak poznáte niekoľko životných trikov.

Sada dobrá čítačka PDF. Technické listy sú napísané v slávnej tradícii papierových návodov, skvele sa dajú vytlačiť, vložiť s plastovými záložkami a zošiť. Hypertext v nich je pozorovaný v stopových množstvách. Našťastie je aspoň štruktúra dokumentu navrhnutá so záložkami, takže vhodná čítačka s jednoduchou navigáciou je veľmi potrebná.

Datasheet nie je Stroustrupova učebnica; obsahuje netreba všetko čítať. Ak ste použili predchádzajúcu radu, stačí nájsť požadovanú sekciu na paneli so záložkami.

Najmä dátové listy Referenčné príručky, dokáže popísať schopnosti nie konkrétneho čipu, ale celý riadok. To znamená, že polovica alebo dokonca dve tretiny informácií nie sú pre váš čip relevantné. Pred štúdiom registrov TIM7 sa prihláste Všeobecný popis, máš to?

Vedieť Angličtina dosť na Základná úroveň. Datasheety pozostávajú z polovice z výrazov, ktoré priemerný rodený hovorca nepozná, a z polovice z jednoduchých spojovacích štruktúr. Existujú tiež vynikajúce čínske dátové listy v čínskej angličtine, kde polovica sú tiež pojmy a druhá polovica je náhodný súbor slov.

Ak sa stretnete neznáme slovo, nepokúšajte sa to preložiť pomocou anglicko-ruského slovníka. Ak ste zmätení hysteréza, potom vás preklad „hysteréza“ neohreje. Použite Google, Stack Overflow, Wikipedia, fóra, kde bude požadovaný koncept vysvetlené jednoduchými slovami s príkladmi.

Najlepší spôsob, ako pochopiť, čo čítate, je check in action. Majte preto po ruke ladiacu dosku, s ktorou sa oboznamujete, alebo ešte lepšie dve, pre prípad, že by ste predsa len niečo nepochopili a videli čarovný dym.

Je dobrým zvykom mať svoj údajový list vždy po ruke čítanie niekoho tutoriálu alebo študovať knižnicu niekoho iného. Je dosť možné, že v ňom nájdete optimálnejšie riešenie vášho problému. A naopak – ak z datasheetu neviete pochopiť, ako vlastne register funguje, vygooglite si ho: s najväčšou pravdepodobnosťou už niekto všetko opísal jednoduchými slovami alebo zanechal jasný kód na GitHub.

glosár

Niekoľko užitočných slov a symbolov, ktoré vám pomôžu rýchlo si zvyknúť na údajové listy. Čo som si za posledných pár dní spomenul, doplnenia a opravy sú vítané.

elektrina
VDC, Pravda – „plus“, jedlo
Vss, Vee – „mínus“, zem
prúd – aktuálny
Napätie - Napätie
potopiť prúd – pracovať ako „zem“ pre vonkajšie zaťaženie
na zdroj prúdu – napájanie externej záťaže
vysoký drez/zdrojový kolík – čap so zvýšenou „toleranciou“ na zaťaženie

IO
H, Vysoká – na kolíku Vcc
L, Nízka – na kolíku Vss
Vysoká impedancia, Ahoj-Z, plávajúce – na kolíku nie je nič, „vysoký odpor“, je prakticky neviditeľný pre vonkajší svet.
slabý ťah hore, slabé stiahnuť – vstavaný pull-up/pull-down rezistor, približne ekvivalentný 50 kOhm (pozri technický list). Používa sa napríklad na zabránenie tomu, aby vstupný kolík visel vo vzduchu a spôsoboval falošné poplachy. Slabý - pretože je ľahké ho „prerušiť“.
tlačiť ťahať – režim výstupu pin, v ktorom sa prepína vysoký и Nízky – bežný VÝSTUP z Arduina.
otvorený odtok – označenie výstupného režimu, v ktorom môže byť pin buď NízkyAlebo Vysoká impedancia/plávajúca. Navyše to takmer vždy nie je „skutočný“ otvorený odtok; existujú ochranné diódy, odpory a podobne. Toto je jednoducho označenie pre režim zem/žiadny.
skutočný otvorený odtok - ale toto je skutočný otvorený odtok: kolík vedie priamo k zemi, ak je otvorený, alebo zostáva v limbu, ak je zatvorený. To znamená, že v prípade potreby ním môže prejsť napätie väčšie ako Vcc, ale maximum je stále uvedené v údajovom liste v časti Absolútne maximálne hodnoty/napätie.

Rozhranie
v sérii – zapojené do série
reťaziť – zostaviť čipy do reťazca pomocou sériového pripojenia, čím sa zvýši počet výstupov.
posun – posun, zvyčajne označuje bitový posun. resp. zaradiť sa и vysunúť sa – prijímať a odosielať dáta bit po bite.
závora – západka, ktorá zakrýva vyrovnávaciu pamäť, kým sa cez ňu presúvajú bity. Po dokončení prenosu sa ventil otvorí a bity začnú pracovať.
načasovať sa – vykonajte prenos bit po bite, posuňte všetky bity na správne miesta.
dvojitý nárazník, tieňový register, predbežné načítanie registra – označenie histórie, kedy register musí byť schopný prijímať nové údaje, ale do určitého bodu ich uchovávať. Napríklad, aby PWM fungovalo správne, jeho parametre (pracovný cyklus, frekvencia) by sa nemali meniť, kým sa aktuálny cyklus neskončí, ale nové parametre sa už dajú preniesť. V súlade s tým sa súčasné ponechávajú na tieňový registera nové spadajú do predbežné načítanie registra, ktorý sa zapíše do príslušného registra čipu.

Všelijaké veci
preddeličku – frekvenčná preddelička
trochu nastaviť – nastavte bit na 1
trochu vymazať/resetovať – resetujte bit na 0 (obnoviť – funkcia údajového listu STM)

čo ďalej

Vo všeobecnosti tu bola naplánovaná praktická časť s ukážkou troch projektov na STM32 a STM8, vyrobených špeciálne pre tento článok pomocou datasheetov, so žiarovkami, SPI, časovačmi, PWM a prerušeniami:

Ako a prečo čítať dátové listy, ak sú mikrokontroléry vaším koníčkom

Ale textu je veľa, takže projekty sa posielajú do druhej časti.

Zručnosť čítania údajových listov vám pomôže s vaším koníčkom, ale je nepravdepodobné, že by nahradila živú komunikáciu s ostatnými fanúšikmi na fórach a chatoch. Na tento účel si ešte musíte v prvom rade zlepšiť angličtinu. Preto tí, ktorí dočítali, získajú špeciálnu cenu: dve bezplatné lekcie v Skyeng s prvou platbou pomocou kódu HABR2.

Zdroj: hab.com

Pridať komentár