Com i per què llegir fulls de dades si els microcontroladors són la vostra afició

Com i per què llegir fulls de dades si els microcontroladors són la vostra afició

La microelectrònica és un hobby de moda en els últims anys gràcies al màgic Arduino. Però aquí hi ha el problema: amb prou interès, podeu superar ràpidament DigitalWrite(), però què fer a continuació no està del tot clar. Els desenvolupadors d'Arduino s'han esforçat molt a reduir la barrera d'entrada al seu ecosistema, però fora d'ell encara hi ha un bosc fosc de circuits durs que és inaccessible per a l'aficionat.

Per exemple, fulls de dades. Sembla que ho tenen tot, agafeu-lo i feu-lo servir. Però és evident que els seus autors no es plantegen la tasca de popularitzar els microcontroladors; De vegades semblaque abusin deliberadament de termes i abreviatures incomprensibles a l'hora de descriure coses senzilles per tal de confondre al màxim els no iniciats. Però no tot és tan dolent; si es vol, s'obre l'arca.

En aquest article compartiré l'experiència d'un especialista en humanitats que es comunica amb fitxes de dades per a hobby. El text està pensat per a aficionats que han crescut amb els pantalons Arduino; suposa una certa comprensió dels principis de funcionament dels microcontroladors.

Començaré pel tradicional

Parpelleig d'un LED a Arduino

I de seguida el codi:

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

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

"Què és això? – Preguntarà un lector sofisticat. – Per què escriviu alguna cosa al registre d'entrada PINB? És només per llegir!" Realment, Documentació Arduino, com la majoria d'articles educatius a Internet, afirma que aquest registre és només de lectura. Jo mateix ho vaig pensar fins que el vaig rellegir fitxa de dades a Atmega328p, preparant aquest article. I allà:

Com i per què llegir fulls de dades si els microcontroladors són la vostra afició

Aquesta és una funcionalitat relativament nova, no estava a Atmega8, no tothom la coneix o no s'esmenta per raons de compatibilitat enrere. Però és molt adequat per demostrar la idea que val la pena llegir els fulls de dades per utilitzar totes les capacitats del xip, incloses les poc conegudes. I aquest no és l'únic motiu.

Per què més llegir fulls de dades?

Normalment, els enginyers d'Arduino, havent jugat prou amb LED i AnalogWrites, comencen a connectar tot tipus de mòduls i xips a la placa, per a la qual ja hi ha biblioteques escrites. Tard o d'hora apareix una biblioteca que no funciona com hauria de ser. Llavors l'aficionat comença a buscar-ho per arreglar-ho, i després...

I allà passa alguna cosa completament incomprensible, així que has d'anar a Google, llegir nombrosos tutorials, treure parts del codi adequat d'algú i finalment aconseguir el teu objectiu. Això dóna una poderosa sensació d'assoliment, però en realitat el procés és com reinventar la roda fent enginyeria inversa d'una motocicleta. A més, la comprensió de com funciona aquesta bicicleta no augmenta. Ho sé, perquè ho vaig fer jo mateix durant força temps.

Si en comptes d'aquesta activitat apassionant m'hagués passat un parell de dies estudiant la documentació d'Atmega328, m'hauria estalviat molt de temps. Després de tot, aquest és un microcontrolador bastant senzill.

Per tant, cal llegir les fitxes com a mínim per imaginar com funciona generalment el microcontrolador i què pot fer. I més enllà:

  • per comprovar i optimitzar les biblioteques d'altres persones. Sovint són escrits pels mateixos aficionats que reinventen la roda; o, per contra, els autors els fan deliberadament excessivament infal·libles. Que sigui tres vegades més gran i més lent, però segur que funcionarà;

  • poder utilitzar xips en un projecte per al qual ningú ha escrit una biblioteca;

  • per facilitar-vos la migració d'una línia MK a una altra;

  • per optimitzar finalment el vostre codi antic, que no encaixava amb Arduino;

  • per aprendre a controlar qualsevol xip directament a través dels seus registres, sense preocupar-se d'estudiar l'estructura de les seves biblioteques, si n'hi ha.

Per què escriure directament als registres quan hi ha HAL i LL?

Diccionari
HAL, High Abstraction Layer – una biblioteca per controlar un microcontrolador amb un alt nivell d'abstracció. Si necessiteu utilitzar la interfície SPI1, simplement configureu i habiliteu SPI1 sense pensar en quins registres són responsables de què.
LL, API de baix nivell – una biblioteca que conté macros o estructures amb adreces de registre, que us permeten accedir-hi pel nom. DDRx, PORTx, PINx a Atmega són LL.

Les disputes sobre el tema "HAL, LL o registres" es produeixen regularment als comentaris a Habré. Sense reclamar l'accés al coneixement astral, simplement compartiré la meva experiència i pensaments d'aficionat.

Després d'haver descobert Atmega més o menys i d'haver llegit articles sobre la meravella de STM32, vaig comprar mitja dotzena de taulers diferents: Discovery i Blue Pills, i fins i tot només xips per als meus productes casolans. Tots van recollir pols en una caixa durant dos anys. De vegades em deia a mi mateix: "Això és tot, a partir d'aquest cap de setmana estic dominant STM", vaig llançar CubeMX, vaig generar una configuració per a SPI, vaig mirar el mur de text resultant, generosament aromatitzat amb els drets d'autor de STM, i vaig decidir que això també era d'alguna manera. molt.

Com i per què llegir fulls de dades si els microcontroladors són la vostra afició

Per descomptat, podeu esbrinar què va escriure CubeMX aquí. Però al mateix temps és evident que recordar totes les paraules i després escriure-les a mà no és realista. I per depurar això, si accidentalment oblido marcar una casella al Cube, està totalment bé.

Han passat dos anys, encara em llepe els llavis Cercador ST MCU per a tot tipus de saboroses, però més enllà de la meva comprensió, patates fregides, i accidentalment es va trobar meravellós article, encara que sobre STM8. I de sobte Em vaig adonar que durant tot aquest temps havia estat trucant a una porta oberta: els registres de l'STM estan disposats de la mateixa manera que els de qualsevol altre MK, i el Cube no és necessari per treballar-hi. Fins i tot era possible?...

HAL i específicament STM32CubeMX és una eina per a enginyers professionals que treballen estretament amb xips STM32. La característica principal és un alt nivell d'abstracció, la capacitat de migrar ràpidament d'un MCU a un altre i fins i tot d'un nucli a un altre, mentre es manté dins de la línia STM32. Els aficionats poques vegades es troben amb aquests problemes: la nostra elecció de microcontroladors, per regla general, es limita a l'assortiment d'AliExpress i sovint migrem entre xips radicalment diferents; passem d'Atmega a STM, de STM a ESP, o qualsevol cosa nova dels nostres amics xinesos. llança'ns. L'HAL no ajudarà aquí, i estudiar-lo es consumirà molt de temps.

LL queda, però d'ell als registres hi ha mig pas. Personalment, trobo útil escriure les meves macros amb adreces de registre: estudio el full de dades amb més atenció, penso què necessitaré en el futur i què definitivament no, estructuro millor els meus programes i, en general, la superació ajuda a memoritzar .

A més, hi ha un matís amb el popular STM32F103: hi ha dues versions LL incompatibles, una oficial de STM, la segona de Leaf Labs, utilitzada al projecte STM32duino. Si escriviu una biblioteca de codi obert (i jo tenia exactament tal tasca), heu de fer dues versions o accedir directament als registres.

Finalment, eliminar LL, al meu entendre, simplifica la migració, sobretot si la planifiqueu des del principi del projecte. Exemple exagerat: escrivim Arduino blink a Atmel Studio sense 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++);
    } 
}

Perquè aquest codi parpellegi el LED d'una placa xinesa amb STM8 (de ST Visual Desktop), n'hi ha prou amb canviar-hi dues adreces:

#define DDR_B 0x5007
#define OUT_B 0x5005

Sí, faig servir una funció de connectar el LED a una placa específica, parpellejarà molt lentament, però passarà!

Quins tipus de fitxes hi ha?

En articles i en fòrums, tant en rus com en anglès, "fulls de dades" significa qualsevol documentació tècnica per a xips, i faig el mateix en aquest text. Formalment, són només un tipus d'aquest tipus de documentació:

Fitxa de Dades – Característiques de rendiment, característiques tàctiques i tècniques. Obligatori per a qualsevol component electrònic. La informació de fons és útil per tenir-la a mà, però no hi ha gaire que llegir-hi detingudament. Tanmateix, els xips més simples sovint es limiten a un full de dades per no produir documents innecessaris; en aquest cas Manual de referència s'inclou aquí.

Manual de referència – les instruccions en si, un llibre saludable de més de 1000 pàgines. El treball de tot el que està amuntegat al xip es descriu amb detall. El document principal per dominar el microcontrolador. A diferència fitxa tècnica, les instruccions estan escrites per a una àmplia gamma de MK; contenen molta informació sobre perifèrics que no estan disponibles al vostre model específic.

Manual de programació o Manual del conjunt d'instruccions – instruccions per a ordres úniques del microcontrolador. Dissenyat per a aquells que programen en llenguatge assemblador. Els autors del compilador l'utilitzen activament per optimitzar el codi, de manera que en el cas general no el necessitarem. Però mirar aquí és útil per a una comprensió general, per a algunes ordres específiques, com ara sortir d'una interrupció, així com per utilitzar activament el depurador.

Nota d'aplicació – consells útils per resoldre problemes específics, sovint amb exemples de codi.

Full d'errates – descripció de casos de comportament del xip no estàndard amb opcions de solució, si n'hi ha.

Què hi ha a les fitxes

Directament a Fitxa de Dades potser necessitem les seccions següents:

Resum del dispositiu – la primera pàgina del full de dades descriu breument el dispositiu. Molt útil en situacions en què heu trobat un xip en algun lloc (l'heu vist en una botiga, l'heu soldat, heu trobat una menció) i voleu entendre què és.

Descripció general – una descripció més detallada de les capacitats dels xips de la línia.

Pinouts – diagrames de fixació per a tots els paquets de xip possibles (quina agulla és a quina cama).

Descripció del pin – descripció de la finalitat i les capacitats de cada pin.

Mapa de memòria – És poc probable que necessitem un mapa d'adreces a la memòria, però de vegades també inclou una taula d'adreces de bloc de registre.

Registra't Mapa – la taula d'adreces dels blocs de registre, per regla general, es troba al full de dades i a Ref Manual - només torns (desplaçaments d'adreces).

Característiques elèctriques - en aquesta secció ens interessa principalment qualificacions màximes absolutes, enumerant les càrregues màximes per xip. A diferència de l'indestructible Atmega328p, la majoria dels MK no us permeten connectar càrregues greus als pins, cosa que es converteix en una sorpresa desagradable per als arduinistes.

Informació sobre paquets – dibuixos dels casos disponibles, útils a l'hora de dissenyar els vostres taulers.

Manual de referència estructuralment consta d'apartats dedicats a perifèrics específics indicats en el seu títol. Cada capítol es pot dividir en tres parts:

Descripció, introducció, Característiques – visió general de les capacitats perifèriques;

Descripció funcional, Guia d’ús o simplement el bloc principal de la secció: una descripció de text detallada dels principis del dispositiu perifèric i com utilitzar-lo;

Registres – descripció dels registres de control. En casos senzills com GPIO o SPI, això pot ser suficient per començar a utilitzar els perifèrics, però sovint encara cal llegir les parts anteriors.

Com llegir fulls de dades

Les fitxes, per costum, t'espanten amb el seu volum i l'abundància de paraules incomprensibles. De fet, no tot fa tanta por si coneixeu alguns trucs de la vida.

Instal·lar bon lector de PDF. Els fulls de dades estan escrits seguint la gloriosa tradició de les instruccions en paper; són excel·lents per imprimir, inserir amb marcadors de plàstic i cosir. Hipertext en ells s'observa en quantitats traces. Afortunadament, almenys l'estructura del document està dissenyada amb marcadors, per la qual cosa és molt necessari un lector adequat i fàcil de navegar.

El full de dades no és el llibre de text de Stroustrup; conté no cal llegir-ho tot. Si heu utilitzat els consells anteriors, només heu de trobar la secció desitjada a la barra d'adreces d'interès.

Fulls de dades, sobretot Manuals de referència, pot descriure les capacitats no d'un xip específic, però tota la línia. Això vol dir que la meitat, o fins i tot dos terços de la informació no és rellevant per al vostre xip. Abans d'estudiar els registres TIM7, registreu-vos Descripció general, ho tens?

Saber Anglès prou per nivell bàsic. Els fulls de dades consisteixen en la meitat de termes desconeguts per al parlant nadiu mitjà i la meitat en estructures de connexió senzilles. També hi ha excel·lents fulls de dades xinesos en anglès xinès, on la meitat també són termes i la segona meitat són un conjunt de paraules aleatòries.

Si et trobes paraula desconeguda, no intenteu traduir-lo amb un diccionari anglès-rus. Si estàs confós histèresi, aleshores la traducció "histèresi" no et farà més càlid. Utilitzeu Google, Stack Overflow, Viquipèdia, fòrums, on hi haurà el concepte requerit explicat amb paraules senzilles amb exemples.

La millor manera d'entendre el que llegeixes és comprovar en acció. Per tant, tingueu a mà el tauler de depuració amb el qual us esteu familiaritzant, o millor encara dos, per si encara heu entès malament alguna cosa i veieu un fum màgic.

És un bon hàbit tenir el full de dades a mà quan ho feu llegint el tutorial d'algú o estudiant la biblioteca d'una altra persona. És molt possible que hi trobeu una solució més òptima al vostre problema. I a l'inrevés: si no podeu entendre des del full de dades com funciona realment el registre, busqueu-lo a Google: el més probable és que algú ja ho hagi descrit tot amb paraules senzilles o hagi deixat codi clar a GitHub.

Diccionari

Algunes paraules i símbols útils per ajudar-vos a acostumar-vos ràpidament als fulls de dades. El que he recordat els darrers dies, les addicions i correccions són benvingudes.

Electricitat
Vcc, És cert – “més”, menjar
vss, vee – “menys”, terra
corrent – actual
voltatge - voltatge
per enfonsar el corrent – treballar com a “terra” per a càrrega externa
a font de corrent - Potència de càrrega externa
pica d'alta / font – passador amb “tolerància” augmentada a la càrrega

IO
H, alt - al pin Vcc
L, baix - al pin Vss
Alta impedància, Hola-Z, flotant – no hi ha res al pin, "alta resistència", és pràcticament invisible per al món exterior.
tirar cap amunt feble, tirar cap avall feble – Resistència pull-up/pull-down incorporada, aproximadament equivalent a 50 kOhm (vegeu el full de dades). S'utilitza, per exemple, per evitar que el pin d'entrada pengi a l'aire, provocant falses alarmes. Feble - perquè és fàcil "interrompre'l".
push pull – Mode de sortida de pins, en què canvia entre alt и Sota - SORTIDA normal d'Arduino.
desguàs obert – designació del mode de sortida en què es pot trobar el pin SotaO Alta impedància / flotant. A més, gairebé sempre no es tracta d'un drenatge obert "real"; hi ha díodes de protecció, resistències, etc. Aquesta és simplement una designació per al mode terra/cap.
veritable desguàs obert - però aquest és un veritable desguàs obert: el passador porta directament a terra si està obert, o roman en el llimb si està tancat. Això vol dir que, si cal, es pot passar per ella una tensió superior a Vcc, però el màxim encara s'especifica a la fitxa tècnica de l'apartat Valoracions màximes absolutes/tensió.

Interfícies
en sèrie - connectat en sèrie
encadenar – Muntar xips en una cadena mitjançant una connexió en sèrie, augmentant el nombre de sortides.
canviar – shift, normalment denota una mica de canvi. Respectivament, canviar-hi и desplaçar-se fora - rebre i transmetre dades bit a bit.
pestell – un pestell que cobreix la memòria intermèdia mentre hi passen bits. Quan s'ha completat la transferència, la vàlvula s'obre i els bits comencen a funcionar.
per entrar – Realitzeu una transferència bit a bit, desplaceu tots els bits als llocs adequats.
doble buffer, registre d'ombra, registre de precàrrega – designacions d'historial, quan el registre ha de poder acceptar dades noves, però mantenir-les fins a algun moment. Per exemple, perquè PWM funcioni correctament, els seus paràmetres (cicle de treball, freqüència) no haurien de canviar fins que finalitzi el cicle actual, però ja es poden transferir nous paràmetres. En conseqüència, es mantenen les actuals registre d'ombra, i en cauen de nous registre de precàrrega, essent escrit al registre de xip corresponent.

Tot tipus de coses
preescalador - preescalador de freqüència
posar una mica - Posa el bit a 1
per esborrar/reiniciar una mica - restableix el bit a 0 (reset - Característica del full de dades STM)

Què és el següent

En general, aquí es va planificar una part pràctica amb una demostració de tres projectes sobre STM32 i STM8, fets específicament per a aquest article mitjançant fitxes, amb bombetes, SPI, temporitzadors, PWM i interrupcions:

Com i per què llegir fulls de dades si els microcontroladors són la vostra afició

Però hi ha molt de text, així que els projectes s'envien a la segona part.

L'habilitat de llegir fulls de dades us ajudarà amb la vostra afició, però és poc probable que substitueixi la comunicació en directe amb altres aficionats als fòrums i xats. Per a això, encara has de millorar el teu anglès abans que res. Per tant, els que acabin de llegir rebran un premi especial: dues classes gratuïtes a Skyeng amb el primer pagament mitjançant el codi HABR2.

Font: www.habr.com

Afegeix comentari