Jak a proč číst datasheety, pokud jsou mikrořadiče vaším koníčkem

Jak a proč číst datasheety, pokud jsou mikrořadiče vaším koníčkem

Mikroelektronika se stala módním koníčkem posledních let díky kouzelnému Arduinu. Ale ouha: při dostatečném zájmu se DigitalWrite() rychle překoná a co dál – to už není úplně jasné. Vývojáři Arduina vynaložili značné úsilí na snížení prahu vstupu do svého ekosystému, ale za jeho hranicemi se stále rozkládá temný les drsné elektroniky, který je pro nadšence těžko přístupný.

Například datasheety. Připadá to, že v nich je všechno, co potřebujete – stačí vzít a používat. Ale jejich autoři se nezdají, že by si kladli za cíl popularizovat mikrořadiče; někdy to vypadá, že úmyslně zneužívají nejasné termíny a zkratky při popisu jednoduchých věcí, aby maximálně zmátli nevědomého. Ale není to tak zlé, s trochou snahy se larčík otevře.

V tomto článku se podělím o zkušenosti гуманитария s datasheety pro hobby účely. Text je určen pro ty, kteří vyrostli z legín Arduina, a předpokládá určité znalosti o principu fungování mikrořadičů.

Začnu s tradičním

Blikání LED diodou na Arduinu

A hned kód:

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

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

„Co to je? – zeptá se zkušený čtenář. – Proč něco píšeš do vstupního registru PINB? Vždyť je to jen pro čtení!“ Oprávněně, dokumentace Arduina, jako většina vzdělávacích článků na internetu, tvrdí, že tento registr je pouze pro čtení. I já jsem si to myslel, dokud jsem znovu nepřečetl datový list datasheet k Atmega328p, abych připravil tento článek. A tam:

Jak a proč číst datasheety, pokud jsou mikrořadiče vaším koníčkem

To je relativně nová funkce, na Atmega8 nebyla a ne všichni o ní ví nebo ji nezmiňují z hlediska zpětné kompatibility. Ale je to docela dobré pro předvedení myšlenky, že datasheety je třeba číst, abyste využili všechny možnosti čipu, včetně méně známých. A to není jediný důvod.

Proč ještě číst datasheety

Obvykle se arduino nadšenci, poté co si hráli se svítilnami a AnalogWrite, začínají připojovat k desce různé moduly a čipy, pro které jsou již napsány knihovny. Dříve či později se objeví knihovna, která nefunguje tak, jak má. Tehdy se nadšenec začne vrtat do ní, aby ji opravil, a tam…

Tam se děje něco naprosto nepochopitelného, a proto musím vyrazit na Google, číst nespočet tutoriálů, stahovat kousky něčího užitečného kódu a nakonec si vybojovat své. To dává silný pocit úspěchu, ale ve skutečnosti proces připomíná vynalézání kola pomocí reverzního inženýrství motocyklu. A pochopení, jak toto kolo funguje, se nijak nezlepšuje. Vím to, protože jsem se tím zabýval docela dlouho.

Kdybych místo tohoto vzrušujícího koníčka strávil pár dní studiem dokumentace k Atmega328, ušetřil bych obrovské množství času. Nakonec je to docela jednoduchý mikrořadič.

Tím pádem je nutné číst datasheety alespoň proto, abychom měli představu o tom, jak mikrořadič vlastně funguje a co všechno umí. A ještě:

  • abychom mohli kontrolovat a optimalizovat cizí knihovny. Často je píší stejní nadšenci, kteří vynalézají kolo; nebo naopak, autoři záměrně dělají složitou ochranu proti hloupým chybám. Ať už je to třikrát větší a pomalejší, hlavně, že to určitě funguje;

  • abychom mohli použít v projektu čipy, pro které nikdo nenapsal knihovnu;

  • abychom si usnadnili úkol přechodu z jedné řady mikrořadičů na jinou;

  • abychom nakonec optimalizovali svůj starý kód, který se nikam do Arduina nevešel;

  • abychom se naučili řídit jakýkoli čip přímo pomocí jeho registrů, aniž bychom museli studovat strukturu jeho knihoven, pokud vůbec nějaké jsou.

Proč psát do registrů přímo, když existuje HAL a LL?

Slovníček
HAL, High Abstraction Layer – knihovna pro řízení mikrořadiče s vysokou úrovní abstrahce. Pokud je potřeba použít rozhraní SPI1, stačí nastavit a zapnout SPI1, aniž bychom se zamýšleli, které registry za co odpovídají.
LL, Low Level API – knihovna, která obsahuje makra nebo struktury s adresami registrů, umožňující přístup k nim podle názvu. DDRx, PORTx, PINx na Atmeze – to je LL.

Diskuse na téma „HAL, LL nebo registry“ se pravidelně objevují v komentářích na Habru. Nechci si nárokovat přístup k astrálnímu vědění, jen se podělím o své amatérské zkušenosti a úvahy.

Poté, co jsem se více-méně seznámil s Atmegou a přečetl si články o výhodách STM32, jsem si koupil půl tuctu různých desek – jak Discovery, tak "Modré tabletky", a dokonce i jednoduše čipy pro své vlastní projekty. Všechny tyto desky se dva roky prášily v krabici. Někdy jsem si říkal: „Tak a teď začnu s STM,“ spustil jsem CubeMX, generoval nastavení pro SPI, podíval se na tu hromadu textu, bohatě okořeněnou copyrighty STM, a usoudil, že to je nějak příliš.

Jak a proč číst datasheety, pokud jsou mikrořadiče vaším koníčkem

Rozumět tomu, co CubeMX napsal, je sice možné. Ale zároveň je jasné, že zapamatovat si všechny formulace, abych je pak mohl psát rukama, je nerealistické. A debuggovat to, pokud omylem zapomenu v Cube něco zaškrtnout, je úplně jiná pohádka.

Uplynuly dva roky a já se stále dívám na ST MCU Finder na různé lákavé, ale pro mě nedostupné čipy a náhodně jsem narazil na skvělý článek, i když o STM8. A náhle pochopil jsem, že celou dobu jsem klepal na otevřené dveře: registry u STM jsou uspořádány stejně jako u jakéhokoli jiného MCU, a pro práci s nimi není Cube nezbytný. Cože, to šlo? ..

HAL a konkrétně STM32CubeMX jsou nástroj pro profesionální inženýry, kteří úzce spolupracují s čipy STM32. Hlavní výhodou je vysoká úroveň abstrakce, možnost rychlé migrace z jednoho MCU na jiný a dokonce i mezi různými jádry, zůstávajíc v rámci řady STM32. Hobbisté se s takovými úkoly setkávají zřídka – náš výběr MCU je obvykle omezen sortimentem z AliExpress, a častěji migrujeme mezi radikálně odlišnými čipy – přecházíme z Atmegy na STM, ze STM na ESP, nebo co nám nového naservírují naši čínští přátelé. HAL zde nepomůže, a čas na jeho studium zabere hodně.

Zůstává LL – ale od něj k registrům je to kousek. Osobně mi příprava vlastních maker s adresami registrů připadá užitečná: pozorněji studuji datasheet, přemýšlím, co budu potřebovat v budoucnu, a co určitě ne, lépe strukturuji své programy, no a překonávání překážek přispívá k zapamatování.

Kromě toho existuje nuance s populárním STM32F103 – pro něj existují dvě nekompatibilní verze LL, jedna oficiální od STM, druhá – od Leaf Labs, která se používá v projektu STM32duino. Pokud píšu open-source knihovnu (a přesně takový byl úkol), je třeba buď vytvořit dvě verze, nebo se obrátit přímo na registry.

Nakonec, podle mého názoru, zrušení LL usnadňuje migraci, zejména pokud na ni přistoupíte hned od začátku práce na projektu. Extrémní příklad: napíšeme Arduino blink v Atmel Studiu 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 rozblikával LED na čínské desce s STM8 (ze ST Visual Desktop), stačí změnit dvě adresy:

#define DDR_B 0x5007
#define OUT_B 0x5005

Ano, používám specifickou funkci připojení LED na konkrétní desce, bude blikat velmi pomalu, ale bude to!

Jaké jsou datové listy

V článcích a na fórech, jak rusky, tak anglicky, se pod "datovými listy" rozumí jakákoli technická dokumentace k čipům, a já to takto chápu i v tomto textu. Formálně jsou to pouze jeden typ takové dokumentace:

Datasheet – TTD, takticko-technické údaje. Musí být k dispozici pro jakoukoli elektronickou součástku. Referenční informace, je užitečné mít je po ruce, ale příliš se nad nimi zamýšlet není třeba. Nicméně, jednodušší čipy často zůstávají pouze u datového listu, aby se nevytvářely zbytečné dokumenty; v tomto případě Reference Manual se započítává sem.

Reference Manual – samotný návod, rozsáhlá kniha o více než 1000 stránkách. Podrobně popisuje fungování všeho, co je v čipu. Hlavní dokument pro osvojení mikrokontroléru. Na rozdíl od datasheet, instrukce jsou psány pro širokou řadu MČ, obsahují mnoho informací o periferii, která může chybět ve vaší konkrétní verzi.

Programming Manual nebo Instruction Set Manual – příručka k unikátním příkazům mikrokontroléru. Určeno pro ty, kteří programují v assembleru. Autoři kompilátorů ji aktivně používají k optimalizaci kódu, takže obvykle ji nebudeme potřebovat. Nicméně, je užitečné nahlédnout sem pro obecné porozumění, zejména pro některé specifické příkazy, jako je výstup z přerušení, a také při aktivním použití debugggera.

Application Note – užitečné tipy na řešení konkrétních úloh, často s příklady kódu.

Errata Sheet – popis případů nestandardního chování čipu s možnostmi obcházení, pokud existují.

Co se nachází v datových listech

Přímo v Datasheet budeme potřebovat takové sekce:

Device Summary – první stránka datového listu stručně informuje o zařízení. Velmi užitečné v situacích, kdy jste někde našli čip (viděli v obchodě, odstranili součástku, narazili na zmínku) a chcete pochopit, co to je.

General Description – podrobnější popis funkcí čipů z řady.

Pinouts – schémata pinout pro všechny možné pouzdra čipu (který pin je na které noze).

Popis pinů – popis účelu a funkcí každého pinu.

Paměťová mapa – mapa adres v paměti pravděpodobně nebude potřeba, ale někdy obsahuje také tabulku adres bloků registrů.

Mapa registrů – tabulka adres bloků registrů se obvykle nachází právě v datovém listu, a v Ref Manual – pouze posuny (adresové offsety).

Elektrické vlastnosti – v této sekci nás především zajímají absolutní maximální zatížení, vyjmenovávající maximální zatížení čipu. Na rozdíl od nezničitelné Atmega328p většina mikrořadičů nedovoluje připojovat k pinům vážná zatížení, což se stává nepříjemným překvapením pro arduino nadšence.

Informace o balení – nákresy dostupných pouzder, užitečné při navrhování vlastních desek.

Reference Manual struktura se skládá z oddílů, věnovaných konkrétní periferii uvedené v jejich nadpisech. Každou kapitolu lze podmíněně rozdělit na tři části:

Přehled, Úvod, Vlastnosti – přehled vlastností periferie;

Funkční popis, Návod k použití nebo jednoduše hlavní blok sekce – podrobný textový popis fungování periferie a způsobů jejího použití;

Registry – popis ovládacích registrů. V jednoduchých případech, jako jsou GPIO nebo SPI, to může být zcela dostatečné pro začátek používání periferie, ale často je třeba číst i předchozí části.

Jak číst datové listy

Datové listy mohou zprvu odradit svým objemem a množstvím nejasných slov. Ve skutečnosti to není tak hrozné, pokud znáte pár triků.

Nainstalujte dobrý PDF čtečka. Datové listy se píší v krásných tradicích papírových instrukcí, je skvělé je vytisknout, vložit do plastových záložek a sešít. Hypertext v nich prakticky nenajdete. Naštěstí alespoň struktura dokumentu je provedena pomocí záložek, takže dobrá čtečka s pohodlnou navigací je velmi užitečná.

Datový list není učebnice Stroustrupa, v něm není třeba číst všechno. Pokud jste využili předchozí radu – jednoduše najděte v panelu záložek požadovanou sekci.

Datové listy, zejména Reference Manuals, mohou popisovat možnosti nejen konkrétního čipu, ale celé řadyTo znamená, že polovina, ne-li dvě třetiny informací, nemají žádný vztah k vašemu čipu. Předtím, než začnete zkoumat registry TIM7, zkontrolujte, General Descriptionzda ho máte.

Znalost angličtiny je dostatečná na základní úrovni.Datasheety se skládají z poloviny z termínů, které průměrnému mluvčímu nejsou známé, a z poloviny z jednoduchých propojujících konstrukcí. Existují také skvělé čínské datasheety v angličtině zvané 'čínská angličtina', kde polovina tvoří termíny a druhá polovina je náhodná sada slov.

Pokud narazíte na neznámé slovo,nesnažte se ho přeložit pomocí anglicko-ruského slovníku. Pokud vám slovo hysteresisnepomůže, překladem 'hysteresí' se vám tepleji určitě nestane. Používejte Google, Stack Overflow, Wikipedii, fóra, kde se požadovaný pojem bude vysvětlen jednoduchými slovy s příklady..

Nejlepší způsob, jak porozumět tomu, co jste přečetli, je přezkoumat v praxi. Proto mějte po ruce debuggovací desku, se kterou se seznamujete, a raději dvě – pro případ, že byste něco špatně pochopili a viděli kouř.Užitečné je mít po ruce datasheet, když čtete něčí tutoriál

nebo zkoumáte cizí knihovnu. Je možné, že v něm najdete optimálnější řešení svého úkolu. A naopak – pokud z datasheetu vůbec nepochopíte, jak funguje registr, zkuste ho vyhledat: pravděpodobně už to někdo popsal jednoduchými slovy nebo zanechal srozumitelný kód na GitHubu. Několik užitečných slov a označení, které pomohou rychleji se zorientovat v datasheetech. To, co mě napadlo za poslední dva dny, doplnění a opravy jsou vítány. Elektrický

Slovníček

Vcc

Vdd
– 'plus', napájení, Vss Vee
– 'minus', zem, current – proud
voltage – napětí
to sink current – pracovat jako 'zem' pro externí zátěž
to source current – napájet externí zátěž
high sink/source pin – pin s vyšší 'tolerancí' k zátěži
H, High – na pinu Vcc

IO
L, Low – na pinu Vss
High Impedance Hi-Z
floating, – na pinu není nic, 'vysoký odpor', ve skutečnosti je pro vnější svět neviditelný., weak pull up weak pull down
– vestavěný pull-up/pull-down odpor, přibližný ekvivalent 50 kΩ (viz datasheet). Používá se například, aby vstupní pin nebyl 've vzduchu', což může způsobit falešné aktivace., Weak – protože ho lze snadno 'překonat'. push pull – režim výstupu pinu, v němž se přepíná mezi
push pull – stav pinu, ve kterém přepíná mezi High a Low – běžný OUTPUT s Arduinem.
open drain – označení výstupního režimu, ve kterém může být pin buď Low, nebo High Impedance / Floating. V tomto režimu to většinou není „opravdový“ otevřený dren, existují ochranné diody, rezistory a další. Je to jen označení stavu země / nic.
true open drain – a tohle už je opravdový otevřený dren: pin je přímo připojen k zemi, pokud je otevřený, nebo se nachází v plovoucím stavu, pokud je zavřený. To znamená, že skrze něj lze potřebovat posílat napětí vyšší než Vcc, ale maximální hodnota je stejně uvedena v datovém listu v sekci Absolute Maximum Ratings / Voltage.

Rozhraní
in series – připojené sériově
to chain – sestavit čipy do řetězce sériovým připojením, čímž se zvyšuje počet výstupů.
shift – posun, obvykle označuje posun bitů. Odpovídajícím způsobem, to shift in a to shift out – přijímat a předávat data po bitech.
latch – záklopka, kryjící vyrovnávací paměť, dokud se přes ni posunují bity. Když je přenos dokončen, záklopka se otevírá a bity začnou pracovat.
to clock in – provést bitový přenos, posunout všechny bity na požadované pozice.
double buffer, shadow register, preload register – označení historie, když musí registr umět přijímat nová data, ale držet je do určitého okamžiku. Například pro správnou funkčnost PWM nesmí jeho parametry (duty cycle, frekvence) měnit, dokud neskončí aktuální cyklus, ale nové parametry už mohou být předány. Aktuální jsou tedy uchovávány v shadow register, a nové přicházejí do preload register, zapisovány do odpovídajícího registru čipu.

Všechny
prescaler – dělič frekvence
to set a bit – nastavit bit na 1
to clear/reset a bit – resetovat bit na 0 (reset – funkce datových listů STM)

Co dál

Celkově byl plánovaný praktický blok se třemi projekty na STM32 a STM8, provedenými speciálně pro tento článek pomocí datových listů, s lampičkami, SPI, časovači, PWM a přerušeními:

Jak a proč číst datasheety, pokud jsou mikrořadiče vaším koníčkem

Ale textu je zatím příliš, proto projekty přechází do druhé části.

Dovednost čtení datových listů vám pomůže s vaším koníčkem, ale sotva nahradí živou interakci s kolegy na fórech a chatech. Je nutné se předně zaměřit na zlepšení anglického jazyka. Proto pro ty, kteří dočetli – speciální odměna: dvě bezplatné hodiny v Skyeng při prvním placení s kódem HABR2.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster