Come e perché leggere i datasheet se i microcontrollori sono il tuo hobby

Come e perché leggere i datasheet se i microcontrollori sono il tuo hobby

La microelettronica è un hobby di moda negli ultimi anni grazie al magico Arduino. Ma ecco il problema: con sufficiente interesse, puoi rapidamente diventare troppo grande per DigitalWrite(), ma cosa fare dopo non è del tutto chiaro. Gli sviluppatori di Arduino hanno fatto molti sforzi per abbassare la barriera d'ingresso nel loro ecosistema, ma al di fuori di esso c'è ancora una foresta oscura di circuiti difficili inaccessibili ai dilettanti.

Ad esempio, le schede tecniche. Sembra che abbiano tutto, lo prendono e lo usano. Ma i loro autori chiaramente non si prefiggono il compito di divulgare i microcontrollori; A volte sembrache abusano deliberatamente di termini e abbreviazioni incomprensibili quando descrivono cose semplici per confondere il più possibile i non iniziati. Ma non tutto è così male: se lo si desidera, la bara si apre.

In questo articolo condividerò l'esperienza di uno specialista di discipline umanistiche che comunica con le schede tecniche per scopi hobbistici. Il testo è destinato agli amatori cresciuti con i pantaloni Arduino e presuppone una certa comprensione dei principi di funzionamento dei microcontrollori.

Inizierò con il tradizionale

Lampeggiare un LED su Arduino

E subito il codice:

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

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

"Cos'è questo? – si chiederà un lettore sofisticato. – Perché scrivi qualcosa nel registro di input PINB? È solo per leggere!” Veramente, Documentazione Arduino, come la maggior parte degli articoli didattici su Internet, afferma che questo registro è di sola lettura. L'ho pensato anch'io finché non l'ho riletto scheda dati ad Atmega328p, preparando questo articolo. E lì:

Come e perché leggere i datasheet se i microcontrollori sono il tuo hobby

Questa è una funzionalità relativamente nuova, non era su Atmega8, non tutti la conoscono o non viene menzionata per motivi di compatibilità con le versioni precedenti. Ma è abbastanza adatto per dimostrare l'idea che vale la pena leggere le schede tecniche per utilizzare tutte le funzionalità del chip, comprese quelle poco conosciute. E questo non è l'unico motivo.

Perché altrimenti leggere le schede tecniche?

Di solito, gli ingegneri di Arduino, dopo aver giocato abbastanza con LED e AnalogWrite, iniziano a collegare tutti i tipi di moduli e chip alla scheda, per i quali esistono già librerie scritte. Prima o poi appare una libreria che non funziona come dovrebbe. Poi il dilettante comincia a stuzzicarlo per aggiustarlo, e poi...

E lì succede qualcosa di completamente incomprensibile, quindi devi andare su Google, leggere numerosi tutorial, estrarre parti del codice adatto di qualcuno e finalmente raggiungere il tuo obiettivo. Ciò dà un forte senso di realizzazione, ma in realtà il processo è come reinventare la ruota effettuando il reverse engineering di una motocicletta. Inoltre, la comprensione di come funziona questa bici non aumenta. Lo so, perché l'ho fatto io stesso per parecchio tempo.

Se invece di questa entusiasmante attività avessi passato un paio di giorni a studiare la documentazione di Atmega328, avrei risparmiato un'enorme quantità di tempo. Dopotutto, questo è un microcontrollore abbastanza semplice.

Pertanto, è necessario leggere almeno le schede tecniche per immaginare come funziona generalmente il microcontrollore e cosa può fare. E inoltre:

  • per controllare e ottimizzare le librerie di altre persone. Spesso sono scritti dagli stessi dilettanti che reinventano la ruota; o, al contrario, gli autori li rendono deliberatamente eccessivamente infallibili. Lascia che sia tre volte più grande e più lento, ma funzionerà sicuramente;

  • poter utilizzare i chip in un progetto per il quale nessuno ha scritto una libreria;

  • per rendere più semplice la migrazione da una linea MK all'altra;

  • per ottimizzare finalmente il tuo vecchio codice, che non si adattava ad Arduino;

  • imparare a controllare qualsiasi chip direttamente attraverso i suoi registri, senza preoccuparsi di studiare la struttura delle sue librerie, se presenti.

Perché scrivere direttamente sui registri quando sono presenti HAL e LL?

glossario
HAL, livello di astrazione elevato – una libreria per il controllo di un microcontrollore con un alto livello di astrazione. Se è necessario utilizzare l'interfaccia SPI1, è sufficiente configurare e abilitare SPI1 senza pensare a quali registri sono responsabili di cosa.
LL, API di basso livello – una libreria contenente macro o strutture con indirizzi di registro, che consente di accedervi per nome. DDRx, PORTx, PINx su Atmega sono LL.

Nei commenti su Habré si verificano regolarmente controversie sull'argomento "HAL, LL o registri". Senza rivendicare l'accesso alla conoscenza astrale, condividerò semplicemente la mia esperienza e i miei pensieri amatoriali.

Dopo aver più o meno capito Atmega e aver letto articoli sulla meraviglia di STM32, ho acquistato una mezza dozzina di schede diverse: Discovery e Blue Pills, e persino solo patatine per i miei prodotti fatti in casa. Tutti hanno raccolto la polvere in una scatola per due anni. A volte mi dicevo: "questo è tutto, a partire da questo fine settimana sto padroneggiando STM", ho lanciato CubeMX, ho generato una configurazione per SPI, ho guardato il muro di testo risultante, generosamente aromatizzato con i diritti d'autore di STM, e ho deciso che in qualche modo era troppo tanto.

Come e perché leggere i datasheet se i microcontrollori sono il tuo hobby

Naturalmente, puoi capire cosa ha scritto CubeMX qui. Ma allo stesso tempo è chiaro che ricordare tutte le parole e poi scriverle a mano non è realistico. E per eseguire il debug di questo, se accidentalmente dimentico di selezionare una casella nel Cubo, va benissimo.

Sono passati due anni, mi sto ancora leccando le labbra Cercatore di MCU ST per tutti i tipi di patatine gustose, ma oltre la mia comprensione, e mi sono imbattuto per caso articolo meraviglioso, anche se circa STM8. E improvvisamente Mi sono reso conto che per tutto questo tempo avevo bussato a una porta aperta: i registri dell'STM sono disposti come quelli di qualsiasi altro MK, e il Cubo non è necessario per lavorarci. Era possibile?...

HAL e in particolare STM32CubeMX è uno strumento per ingegneri professionisti che lavorano a stretto contatto con i chip STM32. La caratteristica principale è un alto livello di astrazione, la capacità di migrare rapidamente da un MCU all'altro e anche da un core all'altro, pur rimanendo all'interno della linea STM32. Gli hobbisti incontrano raramente tali problemi: la nostra scelta di microcontrollori, di regola, è limitata all'assortimento di AliExpress e spesso migriamo tra chip radicalmente diversi: passiamo da Atmega a STM, da STM a ESP o qualunque cosa nuova i nostri amici cinesi lanciaci addosso. HAL non aiuterà qui e studiarlo richiederà molto tempo.

Resta LL, ma da esso ai registri c'è mezzo passo. Personalmente trovo utile scrivere le mie macro con gli indirizzi di registro: studio più attentamente il datasheet, penso a cosa mi servirà in futuro e cosa sicuramente non mi servirà, strutturo meglio i miei programmi e in generale il superamento aiuta a memorizzare .

Inoltre, c'è una sfumatura con il popolare STM32F103: ci sono due versioni LL incompatibili, una ufficiale di STM, la seconda di Leaf Labs, utilizzata nel progetto STM32duino. Se scrivi una libreria open source (e avevo esattamente un tale compito), è necessario effettuare due versioni oppure accedere direttamente ai registri.

Infine, eliminare LL, secondo me, semplifica la migrazione, soprattutto se la si prevede fin dall'inizio del progetto. Esempio esagerato: scriviamo Arduino flick in Atmel Studio senza 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++);
    } 
}

Affinché questo codice faccia lampeggiare il LED su una scheda cinese con STM8 (da ST Visual Desktop), è sufficiente modificare due indirizzi al suo interno:

#define DDR_B 0x5007
#define OUT_B 0x5005

Sì, utilizzo la funzione di collegamento del LED su una scheda specifica, lampeggerà molto lentamente, ma accadrà!

Che tipi di schede tecniche esistono?

Negli articoli e nei forum, sia in russo che in inglese, per “schede tecniche” si intende qualsiasi documentazione tecnica relativa ai chip, e faccio lo stesso in questo testo. Formalmente, sono solo un tipo di tale documentazione:

Datasheet – Caratteristiche prestazionali, caratteristiche tattiche e tecniche. Obbligatorio per qualsiasi componente elettronico. È utile tenere a portata di mano le informazioni di base, ma non c'è molto da leggere in modo ponderato. Tuttavia, i chip più semplici sono spesso limitati a una scheda tecnica per non produrre documenti non necessari; in questo caso Manuale di riferimento è incluso qui.

Manuale di riferimento – le istruzioni stesse, un bel libro di oltre 1000 pagine. Il lavoro di tutto ciò che è stipato nel chip è descritto in dettaglio. Il documento principale per padroneggiare il microcontrollore. A differenza di scheda tecnica, le istruzioni sono scritte per un'ampia gamma di MK; contengono molte informazioni sulle periferiche che non sono disponibili nel tuo modello specifico.

Manuale di programmazione o Manuale del set di istruzioni – istruzioni per comandi univoci del microcontrollore. Progettato per chi programma in linguaggio Assembly. Gli autori dei compilatori lo utilizzano attivamente per ottimizzare il codice, quindi in generale non ne avremo bisogno. Ma guardare qui è utile per una comprensione generale, per alcuni comandi specifici come l'uscita da un interrupt, nonché per l'utilizzo attivo del debugger.

Nota applicativa – suggerimenti utili per risolvere problemi specifici, spesso con esempi di codice.

Foglio di errata – descrizione dei casi di comportamento non standard del chip con eventuali soluzioni alternative.

Cosa c'è nelle schede tecniche

Direttamente a Datasheet potremmo aver bisogno delle seguenti sezioni:

Riepilogo dispositivo – la prima pagina della scheda tecnica descrive brevemente il dispositivo. Molto utile in situazioni in cui hai trovato un chip da qualche parte (lo hai visto in un negozio, lo hai saldato, hai trovato una menzione) e vuoi capire di cosa si tratta.

Descrizione generale – una descrizione più dettagliata delle capacità dei chip della linea.

pinouts – diagrammi di piedinatura per tutti i possibili pacchetti di chip (quale pin è su quale gamba).

Descrizione pin – descrizione dello scopo e delle capacità di ciascun pin.

Memory Map – difficilmente avremo bisogno di una mappa degli indirizzi in memoria, ma a volte include anche una tabella di indirizzi dei blocchi di registri.

Registrati Mappa – la tabella degli indirizzi dei blocchi di registri, di regola, si trova nella scheda tecnica, e in Manuale di riferimento – solo turni (offset degli indirizzi).

Caratteristiche elettriche – in questa sezione ci interessano principalmente Valutazioni massime assolute, elencando i carichi massimi per chip. A differenza dell'indistruttibile Atmega328p, la maggior parte dei MK non consente di collegare carichi gravi ai pin, il che diventa una spiacevole sorpresa per gli arduinisti.

Informazioni sul pacchetto – disegni delle custodie disponibili, utili per progettare le vostre schede.

Manuale di riferimento è strutturalmente costituito da sezioni dedicate a specifiche periferiche indicate nel titolo. Ogni capitolo può essere diviso in tre parti:

Panoramica, Introduzione, Caratteristiche – panoramica delle capacità periferiche;

descrizione funzionale, Guida all'uso o semplicemente il blocco principale della sezione: una descrizione testuale dettagliata dei principi del dispositivo periferico e di come utilizzarlo;

registri – descrizione dei registri di controllo. In casi semplici come GPIO o SPI, questo può essere sufficiente per iniziare a utilizzare le periferiche, ma spesso è necessario leggere ancora le parti precedenti.

Come leggere le schede tecniche

Le schede tecniche, per abitudine, ti spaventano con il loro volume e l'abbondanza di parole incomprensibili. In effetti, non tutto è così spaventoso se conosci alcuni trucchetti.

Set buon lettore PDF. Le schede tecniche sono scritte secondo la gloriosa tradizione delle istruzioni cartacee; ​​sono fantastiche da stampare, inserire con segnalibri di plastica e cucire. L'ipertesto in essi è osservato in tracce. Fortunatamente, almeno la struttura del documento è progettata con segnalibri, quindi è molto necessario un lettore adatto con una facile navigazione.

La scheda tecnica non è il libro di testo di Stroustrup; contiene non c'è bisogno di leggere tutto. Se hai utilizzato il consiglio precedente, basterà individuare la sezione desiderata nella barra dei preferiti.

Schede tecniche, soprattutto Manuali di riferimento, può descrivere le capacità non di un chip specifico, ma l'intera linea. Ciò significa che metà o addirittura due terzi delle informazioni non sono rilevanti per il tuo chip. Prima di studiare i registri TIM7, fai il check-in Descrizione generale, ce l'hai?

Sapere Inglese abbastanza per livello di base. Le schede tecniche sono costituite per metà da termini non familiari al madrelingua medio e per l'altra metà da semplici strutture di collegamento. Esistono anche eccellenti schede tecniche cinesi in inglese cinese, dove metà sono anch'esse termini e la seconda metà è un insieme casuale di parole.

Se incontri parola sconosciuta, non provare a tradurlo utilizzando un dizionario inglese-russo. Se sei confuso isteresi, allora la traduzione "isteresi" non ti renderà più caldo. Utilizza Google, Stack Overflow, Wikipedia, forum, dove sarà il concetto richiesto spiegato in parole semplici con esempi.

Il modo migliore per capire quello che leggi è controllare in azione. Tenete quindi a portata di mano la scheda di debug con cui state prendendo confidenza, o meglio ancora due, nel caso abbiate ancora frainteso qualcosa e abbiate visto un fumo magico.

È una buona abitudine tenere la scheda tecnica a portata di mano quando leggere il tutorial di qualcuno o studiare la biblioteca di qualcun altro. È del tutto possibile che troverai una soluzione più ottimale al tuo problema. E viceversa, se dalla scheda tecnica non riuscite a capire come funziona effettivamente il registro, cercatelo su Google: molto probabilmente qualcuno ha già descritto tutto in parole semplici o ha lasciato codice chiaro su GitHub.

glossario

Alcune parole e simboli utili per aiutarti ad abituarti rapidamente alle schede tecniche. Ciò che ho ricordato negli ultimi giorni, sono benvenute aggiunte e correzioni.

elettricità
Vcc, Vero – “più”, cibo
Vss, Vee – “meno”, terra
corrente - attuale
voltaggio - voltaggio
assorbire corrente – funzionare come “terra” per il carico esterno
per generare corrente – alimentare il carico esterno
perno sink/source alto – perno con “tolleranza” maggiorata al carico

IO
H,Alto – sul pin Vcc
L,Basso – sul pin Vss
Alta impedenza, Ciao-Z, galleggiante – sul perno non c'è nulla, “alta resistenza”, è praticamente invisibile all'esterno.
tirare su debole, debole trazione verso il basso – resistenza pull-up/pull-down incorporata, equivalente a circa 50 kOhm (vedi scheda tecnica). Viene utilizzato, ad esempio, per evitare che il pin di ingresso penzoli in aria, provocando falsi positivi. Debole - perché è facile “interromperlo”.
spingere tirare – modalità di uscita pin, in cui commuta tra Alta и Basso – OUTPUT regolare da Arduino.
Scarico aperto – designazione della modalità di uscita in cui il pin può trovarsi BassoO Alta impedenza/flottante. Inoltre, quasi sempre non si tratta di un "vero" open drain; ci sono diodi protettivi, resistori e quant'altro. Questa è semplicemente una designazione per la modalità terra/nessuna.
vero drenaggio aperto - ma questo è un vero e proprio scarico aperto: il perno porta direttamente a terra se è aperto, oppure rimane nel limbo se è chiuso. Ciò significa che, in caso di necessità, può far passare attraverso di esso una tensione superiore a Vcc, ma il massimo è comunque specificato nel datasheet nella sezione Valori nominali/tensione massimi assoluti.

Interfacce
in serie – collegati in serie
incatenare – assemblare i chip in una catena utilizzando una connessione seriale, aumentando il numero di uscite.
spostamento – spostamento, di solito denota un piccolo spostamento. Rispettivamente, spostarsi dentro и spostarsi fuori – ricevere e trasmettere dati bit per bit.
chiavistello – un dispositivo di chiusura che copre il buffer mentre i bit vengono spostati al suo interno. Una volta completato il trasferimento, la valvola si apre e le punte iniziano a funzionare.
timbrare il cartellino – esegui un trasferimento bit per bit, sposta tutti i bit nei posti giusti.
doppio tampone, registro delle ombre, registro di precarico – designazioni storiche, quando il registro deve essere in grado di accettare nuovi dati, ma trattenerli fino a un certo punto. Ad esempio, affinché PWM funzioni correttamente, i suoi parametri (ciclo di lavoro, frequenza) non dovrebbero cambiare fino al termine del ciclo corrente, ma è già possibile trasferire nuovi parametri. Di conseguenza, quelli attuali vengono mantenuti registro delle ombre, e ne cadono di nuovi registro di precarico, essendo scritto nel registro del chip corrispondente.

Ogni sorta di cose
prescalatore – prescaler di frequenza
per sistemare un po' – imposta il bit a 1
per cancellare/reimpostare un po' – resettare il bit a 0 (azzerare – Funzionalità scheda tecnica STM)

Cosa c'è Next

In generale qui è stata prevista una parte pratica con la dimostrazione di tre progetti su STM32 e STM8, realizzati appositamente per questo articolo utilizzando datasheet, con lampadine, SPI, timer, PWM e interrupt:

Come e perché leggere i datasheet se i microcontrollori sono il tuo hobby

Ma c'è molto testo, quindi i progetti vengono inviati alla seconda parte.

La capacità di leggere le schede tecniche ti aiuterà con il tuo hobby, ma è improbabile che possa sostituire la comunicazione dal vivo con altri hobbisti su forum e chat. A tal fine, devi prima di tutto migliorare il tuo inglese. Pertanto, chi avrà terminato la lettura riceverà un premio speciale: due lezioni gratuite di Skyeng con il primo pagamento tramite codice HABR2.

Fonte: habr.com

Aggiungi un commento