Hoe en waarom datasheets lezen als microcontrollers je hobby zijn

Hoe en waarom datasheets lezen als microcontrollers je hobby zijn

Micro-elektronica is de laatste jaren een modieuze hobby dankzij de magische Arduino. Maar hier is het probleem: bij voldoende belangstelling kun je DigitalWrite() snel ontgroeien, maar wat je vervolgens moet doen is niet helemaal duidelijk. Arduino-ontwikkelaars hebben veel moeite gestoken in het verlagen van de toegangsbarrière tot hun ecosysteem, maar daarbuiten is er nog steeds een donker woud van harde circuits dat ontoegankelijk is voor de amateur.

Bijvoorbeeld datasheets. Het lijkt alsof ze alles hebben, het pakken en gebruiken. Maar de auteurs ervan hebben zichzelf duidelijk niet tot taak gesteld microcontrollers te populariseren; Soms het lijkt eropdat ze bij het beschrijven van eenvoudige dingen opzettelijk onbegrijpelijke termen en afkortingen misbruiken om niet-ingewijden zoveel mogelijk in verwarring te brengen. Maar niet alles is zo erg: desgewenst gaat de kist open.

In dit artikel deel ik de ervaring van een geesteswetenschapper die voor hobbydoeleinden met datasheets communiceert. De tekst is bedoeld voor amateurs die zijn opgegroeid met een Arduino-broek; het veronderstelt enig begrip van de werkingsprincipes van microcontrollers.

Ik zal beginnen met het traditionele

Knippert een LED op Arduino

En meteen de code:

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

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

"Wat is dit? – Een ervaren lezer zal het vragen. – Waarom schrijft u iets naar het PINB-invoerregister? Het is alleen om te lezen!” Echt, Arduino-documentatie, zoals de meeste educatieve artikelen op internet, staat dat dit register alleen-lezen is. Dat dacht ik zelf ook, totdat ik het herlas data papier aan Atmega328p, die dit artikel voorbereidt. En daar:

Hoe en waarom datasheets lezen als microcontrollers je hobby zijn

Dit is een relatief nieuwe functionaliteit, deze zat niet op Atmega8, niet iedereen kent het of wordt niet genoemd vanwege achterwaartse compatibiliteit. Maar het is heel geschikt om het idee te demonstreren dat datasheets de moeite waard zijn om te lezen om alle mogelijkheden van de chip te kunnen gebruiken, inclusief de weinig bekende. En dit is niet de enige reden.

Waarom anders datasheets lezen?

Meestal beginnen Arduino-ingenieurs, nadat ze genoeg met LED's en AnalogWrites hebben gespeeld, allerlei modules en chips op het bord aan te sluiten, waarvoor er al geschreven bibliotheken zijn. Vroeg of laat verschijnt er een bibliotheek die niet naar behoren werkt. Dan begint de amateur eraan te prutsen om het te repareren, en dan...

En daar gebeurt iets volkomen onbegrijpelijks, dus je moet naar Google gaan, talloze tutorials lezen, delen van iemands geschikte code eruit halen en uiteindelijk je doel bereiken. Dit geeft een krachtig gevoel van voldoening, maar in werkelijkheid lijkt het proces op het opnieuw uitvinden van het wiel door een motorfiets reverse-engineeren. Bovendien neemt het inzicht in hoe deze fiets werkt niet toe. Ik weet het, want ik heb dit zelf ook een hele tijd gedaan.

Als ik in plaats van deze opwindende activiteit een paar dagen de Atmega328-documentatie had bestudeerd, zou ik enorm veel tijd hebben bespaard. Dit is tenslotte een vrij eenvoudige microcontroller.

U moet dus op zijn minst de datasheets lezen om u voor te stellen hoe de microcontroller in het algemeen werkt en wat deze kan doen. En verder:

  • om de bibliotheken van anderen te controleren en te optimaliseren. Ze zijn vaak geschreven door dezelfde amateurs die het wiel opnieuw uitvinden; of, integendeel, de auteurs maken ze opzettelijk buitensporig onfeilbaar. Laat het drie keer groter en langzamer zijn, maar het zal zeker werken;

  • chips kunnen gebruiken in een project waarvoor niemand een bibliotheek heeft geschreven;

  • om het voor uzelf gemakkelijker te maken om van de ene MK-lijn naar de andere te migreren;

  • om eindelijk je oude code, die niet in Arduino paste, te optimaliseren;

  • om te leren hoe je een chip rechtstreeks via de registers kunt besturen, zonder je druk te maken over het bestuderen van de structuur van de eventuele bibliotheken.

Waarom rechtstreeks naar registers schrijven als er HAL en LL bestaan?

woordenlijst
HAL, Hoge Abstractielaag – een bibliotheek voor het aansturen van een microcontroller met een hoog abstractieniveau. Als u de SPI1-interface moet gebruiken, configureert en schakelt u eenvoudig SPI1 in zonder na te denken over welke registers waarvoor verantwoordelijk zijn.
LL, API op laag niveau – een bibliotheek met macro's of structuren met registeradressen, zodat u ze op naam kunt openen. DDRx, PORTx, PINx op Atmega zijn LL.

Geschillen over het onderwerp “HAL, LL of registers” komen regelmatig voor in reacties op Habré. Zonder toegang te claimen tot astrale kennis, zal ik eenvoudigweg mijn amateurervaringen en gedachten delen.

Nadat ik Atmega min of meer had ontdekt en artikelen had gelezen over de wonderbaarlijkheid van STM32, kocht ik een half dozijn verschillende borden: Discovery en Blue Pills, en zelfs alleen maar chips voor mijn zelfgemaakte producten. Twee jaar lang verzamelden ze allemaal stof in een doos. Soms zei ik tegen mezelf: "dat is het, vanaf dit weekend beheers ik STM", lanceerde CubeMX, genereerde een setup voor SPI, bekeek de resulterende tekstmuur, rijkelijk op smaak gebracht met STM-copyrights, en besloot dat dit op de een of andere manier te veel was veel.

Hoe en waarom datasheets lezen als microcontrollers je hobby zijn

Natuurlijk kun je erachter komen wat CubeMX hier heeft geschreven. Maar tegelijkertijd is het duidelijk dat het onrealistisch is om alle bewoordingen te onthouden en ze vervolgens met de hand op te schrijven. En om dit op te lossen: als ik per ongeluk vergeet een vakje in de Kubus aan te vinken, is dat prima.

Twee jaar zijn verstreken, ik lik nog steeds mijn lippen ST MCU-zoeker voor allerlei soorten lekkers, maar buiten mijn begrip, chips, en per ongeluk tegengekomen prachtig artikel, zij het over STM8. EN plotseling Ik realiseerde me dat ik al die tijd op een open deur had geklopt: de registers van de STM zijn op dezelfde manier gerangschikt als die van elke andere MK, en de Cube is niet nodig om ermee te werken. Zou het überhaupt mogelijk zijn?..

HAL en specifiek STM32CubeMX is een tool voor professionele ingenieurs die nauw samenwerken met STM32-chips. Het belangrijkste kenmerk is een hoog abstractieniveau, de mogelijkheid om snel van de ene MCU naar de andere en zelfs van de ene kern naar de andere te migreren, terwijl je binnen de STM32-lijn blijft. Hobbyisten komen zelden dergelijke problemen tegen - onze keuze aan microcontrollers is in de regel beperkt tot het AliExpress-assortiment, en we migreren vaak tussen radicaal verschillende chips - we gaan van Atmega naar STM, van STM naar ESP, of wat voor nieuw ding dan ook onze Chinese vrienden naar ons gooien. HAL zal hier niet helpen, en het bestuderen ervan zal veel tijd opslokken.

LL blijft - maar van daaruit naar de registers is er een halve stap. Persoonlijk vind ik het schrijven van mijn macro's met registeradressen nuttig: ik bestudeer de datasheet zorgvuldiger, ik denk na over wat ik in de toekomst nodig zal hebben en wat ik zeker niet zal doen, ik structureer mijn programma's beter, en in het algemeen helpt overwinnen bij het onthouden .

Bovendien is er een nuance met de populaire STM32F103 - er zijn twee incompatibele LL-versies voor, één officieel van STM, de tweede van Leaf Labs, gebruikt in het STM32duino-project. Als je een open-sourcebibliotheek schrijft (en ik had precies zo'n taak), moet u twee versies maken of rechtstreeks toegang krijgen tot de registers.

Ten slotte vereenvoudigt het elimineren van LL naar mijn mening de migratie, vooral als je dit vanaf het allereerste begin van het project plant. Overdreven voorbeeld: laten we Arduino blink schrijven in Atmel Studio zonder 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++);
    } 
}

Om ervoor te zorgen dat deze code de LED op een Chinees bord met STM8 (van ST Visual Desktop) laat knipperen, volstaat het om twee adressen erin te wijzigen:

#define DDR_B 0x5007
#define OUT_B 0x5005

Ja, ik gebruik een functie om de LED op een specifiek bord aan te sluiten, deze zal heel langzaam knipperen, maar het zal gebeuren!

Welke soorten datasheets zijn er?

In artikelen en op forums, zowel in het Russisch als in het Engels, bedoelen ‘datasheets’ alle technische documentatie voor chips, en ik doe hetzelfde in deze tekst. Formeel zijn ze slechts één type van dergelijke documentatie:

Data papier – Prestatiekenmerken, tactische en technische kenmerken. Verplicht voor elk elektronisch onderdeel. Achtergrondinformatie is handig om bij de hand te houden, maar er valt niet veel in te lezen. Eenvoudigere chips zijn echter vaak beperkt tot een datasheet om geen onnodige documenten te produceren; in dit geval Naslaggids is hier opgenomen.

Naslaggids – de instructies zelf, een gezond boek van meer dan 1000 pagina's. Het werk van alles wat in de chip zit, wordt gedetailleerd beschreven. Het belangrijkste document voor het beheersen van de microcontroller. in tegenstelling tot datasheet, zijn er instructies geschreven voor een breed scala aan MK's; deze bevatten veel informatie over randapparatuur die niet beschikbaar is in uw specifieke model.

Programmeerhandleiding of Instructieset Handleiding – instructies voor unieke microcontrolleropdrachten. Ontworpen voor degenen die programmeren in Assembleertaal. Auteurs van compilers gebruiken het actief om code te optimaliseren, dus in het algemeen hebben we het niet nodig. Maar hier kijken is nuttig voor een algemeen begrip, voor enkele specifieke opdrachten, zoals het afsluiten van een interrupt, en voor het actief gebruiken van de debugger.

Toepassingsnotitie – handige tips voor het oplossen van specifieke problemen, vaak met codevoorbeelden.

Errata-blad – beschrijving van gevallen van niet-standaard chipgedrag met eventuele oplossingen.

Wat staat er in de datasheets

Direct naar Data papier Mogelijk hebben we de volgende secties nodig:

Apparaatoverzicht – de eerste pagina van het gegevensblad beschrijft het apparaat kort. Erg handig in situaties waarin je ergens een chip hebt gevonden (in een winkel gezien, gesoldeerd, een vermelding tegengekomen) en wilt begrijpen wat het is.

Algemene beschrijving – een meer gedetailleerde beschrijving van de mogelijkheden van de chips uit de lijn.

pinouts – pinoutdiagrammen voor alle mogelijke chippakketten (welke pin zit op welke poot).

Pin Beschrijving – beschrijving van het doel en de mogelijkheden van elke pin.

Geheugen Kaart – het is onwaarschijnlijk dat we een adreskaart in het geheugen nodig hebben, maar soms bevat deze ook een tabel met registerblokadressen.

Registreer kaart – de tabel met adressen van registerblokken bevindt zich in de regel in het gegevensblad en in Raadpleeg handleiding – alleen verschuivingen (adrescompensaties).

Elektrische kenmerken – in deze sectie zijn we vooral geïnteresseerd absolute maximale beoordelingen, met vermelding van de maximale belastingen per chip. In tegenstelling tot de onverwoestbare Atmega328p, laten de meeste MK's je niet toe om serieuze belastingen op de pinnen aan te sluiten, wat een onaangename verrassing wordt voor Arduinisten.

Pakketinformatie – tekeningen van beschikbare koffers, handig bij het ontwerpen van uw planken.

Naslaggids bestaat structureel uit secties gewijd aan specifieke randapparatuur, aangegeven in de titel. Elk hoofdstuk kan in drie delen worden verdeeld:

Overzicht, Introductie, Voordelen – overzicht van randmogelijkheden;

Functiebeschrijving, Handleiding of gewoon het hoofdblok van de sectie: een gedetailleerde tekstbeschrijving van de principes van het randapparaat en hoe u het kunt gebruiken;

registers – beschrijving van controleregisters. In eenvoudige gevallen zoals GPIO of SPI kan dit voldoende zijn om de randapparatuur te gaan gebruiken, maar vaak moet je nog de voorgaande delen lezen.

Hoe gegevensbladen te lezen

Datasheets maken u uit gewoonte bang met hun volume en overvloed aan onbegrijpelijke woorden. In feite is alles niet zo eng als je een paar lifehacks kent.

Ingesteld goede pdf-lezer. Datasheets zijn geschreven in de glorieuze traditie van papieren instructies; ze zijn geweldig om uit te printen, in te voegen met plastic bladwijzers en te naaien. Hypertekst daarin wordt in sporenhoeveelheden waargenomen. Gelukkig is in ieder geval de structuur van het document ontworpen met bladwijzers, dus een geschikte reader met gemakkelijke navigatie is zeer noodzakelijk.

De datasheet is niet het leerboek van Stroustrup; het bevat het is niet nodig om alles te lezen. Als u het vorige advies heeft gevolgd, zoekt u gewoon het gewenste gedeelte op in de bladwijzerbalk.

Vooral datasheets Referentiehandleidingen, kan de mogelijkheden van niet een specifieke chip beschrijven, maar de hele lijn. Dit betekent dat de helft of zelfs tweederde van de informatie niet relevant is voor uw chip. Voordat u de TIM7-registers bestudeert, dient u zich in te checken Algemene beschrijving, heb je het?

Weten Engels genoeg voor basis niveau. Datasheets bestaan ​​voor de helft uit termen die de gemiddelde moedertaalspreker niet kent, en voor de helft uit eenvoudige verbindingsstructuren. Er zijn ook uitstekende Chinese datasheets in het Chinees-Engels, waarbij de helft ook termen zijn, en de tweede helft een willekeurige reeks woorden.

Als je elkaar ontmoet onbekend woord, probeer het niet te vertalen met behulp van een Engels-Russisch woordenboek. Als je in de war bent hysteresis, dan zal de vertaling “hysteresis” je niet warmer maken. Gebruik Google, Stack Overflow, Wikipedia, forums, waar het vereiste concept zal zijn in eenvoudige woorden uitgelegd met voorbeelden.

De beste manier om te begrijpen wat je leest is check-in actie. Houd daarom het debugbord waarmee u vertrouwd raakt bij de hand, of beter nog twee, voor het geval u nog steeds iets verkeerd heeft begrepen en een magische rook hebt gezien.

Het is een goede gewoonte om uw gegevensblad bij de hand te houden wanneer u iemands tutorial lezen of het bestuderen van de bibliotheek van iemand anders. Het is heel goed mogelijk dat u daarin een meer optimale oplossing voor uw probleem vindt. En omgekeerd - als je uit de datasheet niet kunt begrijpen hoe het register eigenlijk werkt, google het dan: hoogstwaarschijnlijk heeft iemand alles al in eenvoudige woorden beschreven of duidelijke code op GitHub achtergelaten.

woordenlijst

Enkele nuttige woorden en symbolen waarmee u snel aan de datasheets kunt wennen. Wat ik me de afgelopen dagen herinnerde, aanvullingen en correcties zijn welkom.

Электричество
VCC, Klopt – “plus”, eten
VSS, Vee – “min”, aarde
actueel - huidig
spanning - Spanning
stroom laten zinken – werken als “grond” voor externe belasting
om stroom te genereren – voeding externe belasting
hoge gootsteen/bronpin – pin met verhoogde “tolerantie” voor belasting

IO
H, Hoog – op de Vcc-pin
L, Laag – op de Vss-pin
Hoge impedantie, Hallo-Z, drijvend – er staat niets op het pinnetje, “hoge weerstand”, het is vrijwel onzichtbaar voor de buitenwereld.
zwak optrekken, zwakke neerwaartse beweging – ingebouwde pull-up/pull-down-weerstand, ongeveer gelijk aan 50 kOhm (zie gegevensblad). Het wordt bijvoorbeeld gebruikt om te voorkomen dat de ingangspin in de lucht bungelt en valse positieven veroorzaakt. Zwak - omdat het gemakkelijk is om hem te ‘onderbreken’.
duwen trekken – pin-uitvoermodus, waarin wordt geschakeld tussen Hoge и Laag – reguliere UITVOER van Arduino.
open afvoer – aanduiding van de uitvoermodus waarin de pin zich kan bevinden LaagOf Hoge impedantie/zwevend. Bovendien is dit bijna altijd geen “echte” open afvoer; er zijn beschermende diodes, weerstanden en dergelijke. Dit is eenvoudigweg een aanduiding voor de grond/geen-modus.
echte open afvoer - maar dit is een echte open afvoer: de pin leidt rechtstreeks naar de grond als deze open is, of blijft in het ongewisse als deze gesloten is. Dit betekent dat er indien nodig een spanning groter dan Vcc doorheen kan worden geleid, maar het maximum staat nog steeds vermeld in de datasheet in de sectie Absoluut maximale waarden/spanning.

Interfaces
in series – in serie geschakeld
ketenen – chips samenvoegen tot een keten met behulp van een seriële verbinding, waardoor het aantal uitgangen toeneemt.
verschuiving – verschuiving, duidt meestal op een beetje verschuiving. Respectievelijk, inschuiven и uit te schuiven – gegevens bit voor bit ontvangen en verzenden.
klink – een grendel die de buffer bedekt terwijl bits er doorheen worden geschoven. Wanneer de overdracht is voltooid, gaat de klep open en beginnen de bits te werken.
om in te klokken – voer een bit-voor-bit overdracht uit, verplaats alle bits naar de juiste plaatsen.
dubbele buffer, schaduw register, register vooraf laden – historische aanduidingen, waarbij het register nieuwe gegevens moet kunnen accepteren, maar deze tot een bepaald punt moet vasthouden. Om PWM bijvoorbeeld correct te laten werken, mogen de parameters (werkcyclus, frequentie) niet veranderen totdat de huidige cyclus eindigt, maar nieuwe parameters kunnen al worden overgedragen. Dienovereenkomstig worden de huidige gehandhaafd schaduw register, en nieuwe vallen erin register vooraf laden, geschreven naar het overeenkomstige chipregister.

Allerlei dingen
voorschaler – frequentievoorschaler
een beetje in te stellen – zet bit op 1
om een ​​beetje te wissen/resetten – bit opnieuw instellen op 0 (opnieuw in te stellen – STM-gegevensbladfunctie)

What's Next

Over het algemeen was hier een praktisch gedeelte gepland met een demonstratie van drie projecten op STM32 en STM8, speciaal voor dit artikel gemaakt met behulp van datasheets, met gloeilampen, SPI, timers, PWM en interrupts:

Hoe en waarom datasheets lezen als microcontrollers je hobby zijn

Maar er is veel tekst, dus de projecten worden naar het tweede deel gestuurd.

De vaardigheid om datasheets te lezen zal je helpen bij je hobby, maar het is onwaarschijnlijk dat het live communicatie met collega-hobbyisten op forums en chats zal vervangen. Hiervoor moet je eerst nog je Engels verbeteren. Daarom ontvangen degenen die klaar zijn met lezen een speciale prijs: twee gratis lessen in Skyeng bij de eerste betaling met behulp van de code HABR2.

Bron: www.habr.com

Voeg een reactie