Sommario:

Bare Metal Raspberry Pi 3: LED lampeggiante: 8 passaggi
Bare Metal Raspberry Pi 3: LED lampeggiante: 8 passaggi

Video: Bare Metal Raspberry Pi 3: LED lampeggiante: 8 passaggi

Video: Bare Metal Raspberry Pi 3: LED lampeggiante: 8 passaggi
Video: Blink LED in C/C++ on the Raspberry Pi Pico [Linux SDK Setup] 2024, Dicembre
Anonim
Bare Metal Raspberry Pi 3: LED lampeggiante
Bare Metal Raspberry Pi 3: LED lampeggiante

Di moldypizzaSegui di più dell'autore:

Pulsante Raspberry Pi con LED Bare Metal
Pulsante Raspberry Pi con LED Bare Metal
Pulsante Raspberry Pi con LED Bare Metal
Pulsante Raspberry Pi con LED Bare Metal
casse
casse
casse
casse
Come realizzare una scultura in rilievo per il giorno dei veterani
Come realizzare una scultura in rilievo per il giorno dei veterani
Come realizzare una scultura in rilievo per il giorno dei veterani
Come realizzare una scultura in rilievo per il giorno dei veterani

Informazioni su:.oO0Oo. Maggiori informazioni su Moldypizza »

Benvenuti nel tutorial BARE METAL pi 3 LED lampeggianti!

In questo tutorial seguiremo i passaggi, dall'inizio alla fine, per far lampeggiare un LED utilizzando un Raspberry PI 3, una breadboard, un resistore, un led e una scheda SD vuota.

Allora, cos'è il BARE METAL? BARE METAL è una programmazione senza fronzoli. Bare metal significa che abbiamo il pieno controllo di ciò che il computer farà fino all'ultimo. Quindi sostanzialmente significa che il codice verrà scritto completamente in assembly, utilizzando il set di istruzioni Arm. Alla fine avremo creato un programma che farà lampeggiare un LED accedendo all'indirizzo fisico di uno dei pin GPIO del Raspberry Pi e configurandolo per l'output e quindi attivandolo e disattivandolo. Tentare questo progetto è un ottimo modo per iniziare con la programmazione incorporata e, si spera, fornire una migliore comprensione di come funziona un computer.

Di che cosa hai bisogno?

Hardware

  • Lampone PI 3
  • Scheda SD precaricata con un'immagine avviabile
  • tagliere
  • Cavi jumper maschio femmina
  • Cavi ponticello maschio maschio
  • GUIDATO
  • Resistenza da 220 ohm (non deve essere esattamente 220 ohm, la maggior parte delle resistenze funzionerà)
  • mini scheda sd
  • mini sd card precaricata con sistema operativo raspberry pi (di solito inclusa con il pi)

Software

  • Compilatore GCC
  • Toolchain integrato GNU
  • editor di testo
  • formattatore di schede SD

Bene, iniziamo!

Passaggio 1: IMPOSTAZIONE DELLE COSE/STUFF UP

IMPOSTAZIONE DELLE COSE/COMPLEMENTI
IMPOSTAZIONE DELLE COSE/COMPLEMENTI

Ok, quindi… il primo passo è acquisire l'hardware. Potresti acquistare le parti separatamente o c'è un kit che viene fornito con parti più che sufficienti. COLLEGAMENTO

Questo kit viene fornito con tutto il necessario per configurare il raspberry pi 3 e altro! l'unica cosa non inclusa in questo kit è una mini scheda SD extra. Aspettare! Non comprarne ancora un altro. Se non hai intenzione di utilizzare l'installazione di Linux precaricata sulla scheda, copia semplicemente il contenuto della scheda mini sd inclusa per dopo e formatta nuovamente la scheda (ne parleremo più avanti). NOTA IMPORTANTE: assicurati di conservare i file sulla scheda inclusa, ne avrai BISOGNO per dopo!

Quindi è il momento di configurare il software. Questo tutorial non includerà istruzioni dettagliate su come installare il software. Ci sono molte risorse e tutorial online su come installarli:

UTENTI WINDOWS:

Scarica e installa gcc

Quindi, scarica e installa la toolchain incorporata GNU ARM

LINUX/MAC

  • Le distribuzioni Linux vengono fornite con gcc preinstallato
  • Scarica e installa la toolchain incorporata GNU ARM.

Ok, quindi se tutto va bene, dovresti essere in grado di aprire il terminale (linux/mac) o la riga cmd (Windows) e provare a digitare

arm-none-eabi-gcc

L'output dovrebbe essere simile alla prima immagine. Questo è solo per verificare che sia installato correttamente.

Bene, ora che i prerequisiti sono stati eliminati, è ora di iniziare con le cose divertenti.

Fase 2: CIRCUITO

CIRCUITO
CIRCUITO
CIRCUITO
CIRCUITO
CIRCUITO
CIRCUITO

Tempo di circuito! Il circuito per questo è semplice. Collegheremo un led a GPIO 21 (pin 40) su pi (vedi foto 2 e 3). In serie è collegata anche una resistenza per evitare che il led si danneggi. La resistenza sarà collegata alla colonna negativa sulla breadboard che sarà collegata a GND (pin 39) sul pi. Quando si collega il led assicurarsi di collegare l'estremità corta al lato negativo. Guarda l'ultima foto

Passaggio 3: Mini SD AVVIABILE

AVVIABILE Mini SD
AVVIABILE Mini SD
AVVIABILE Mini SD
AVVIABILE Mini SD
AVVIABILE Mini SD
AVVIABILE Mini SD

Ci sono tre passaggi per far riconoscere al tuo pi 3 la tua mini scheda SD vuota. Dobbiamo trovare e copiare bootcode.bin, start.elf e fixup.dat. Puoi ottenere questi file sulla mini scheda SD inclusa se hai acquistato il canakit o creare una scheda SD avviabile per il pi 3 con una distribuzione Linux. In entrambi i casi questi file sono necessari per consentire al pi di riconoscere la scheda SD come dispositivo avviabile. Quindi, formatta la mini sd in fat32 (la maggior parte delle mini sd viene formattata in fat32. Ho usato una mini sd economica di sandisk), sposta bootcode.bin, start.elf, fixup.dat sulla scheda SD. E hai finito! Va bene ancora una volta e nell'ordine delle immagini i passaggi sono:

  1. Trova bootcode.bin, start.elf, fixup.dat.
  2. Assicurati che la tua scheda SD sia formattata in fat32.
  3. Sposta bootcode.bin, start.elf e fixup.dat sulla scheda SD formattata.

Ecco come l'ho capito, link.

Passaggio 4: VERIFICA Mini SD

VERIFICA Mini SD
VERIFICA Mini SD
VERIFICA Mini SD
VERIFICA Mini SD

Bene, abbiamo una mini scheda SD avviabile e, si spera, hai un pi 3 a questo punto. Quindi ora dovremmo testarlo per assicurarci che pi 3 riconosca la scheda mini sd come avviabile.

Sul pi, vicino alla porta mini usb ci sono due piccoli led. Uno è rosso. Questo è l'indicatore di alimentazione. Quando il pi riceve alimentazione, questa spia dovrebbe essere accesa. Quindi, se colleghi il tuo pi in questo momento senza scheda mini sd, dovrebbe accendersi in rosso. Ok, ora scollega il tuo pi e inserisci la tua mini scheda SD avviabile che è stata creata nel passaggio precedente e collega il pi. Vedi un'altra luce? Dovrebbe esserci una luce verde, proprio accanto a quella rossa, che indica che sta leggendo la scheda SD. Questo led è chiamato led ACT. Si accenderà quando è inserita una scheda SD valida. Lampeggerà quando accede alla tua scheda mini sd.

Va bene, quindi dovrebbero essere successe due cose dopo aver inserito la scheda mini sd avviabile e collegato il pi:

  1. Il led rosso dovrebbe essere acceso indicando la ricezione dell'alimentazione
  2. Il led verde dovrebbe essere acceso indicando che è stato avviato nella scheda mini sd

Se qualcosa è andato storto, prova a ripetere i passaggi precedenti o fai clic sul collegamento sottostante per ulteriori informazioni.

Il link qui è un buon riferimento.

Passaggio 5: CODICE 1

Questo progetto è scritto in linguaggio assembly ARM. In questo tutorial si presume una conoscenza di base dell'assieme ARM, ma ecco alcune cose che dovresti sapere:

.equ: assegna un valore a un simbolo, ad esempio abc.equ 5 abc ora rappresenta cinque

  • ldr: carica dalla memoria
  • str: scrive in memoria
  • cmp: confronta due valori eseguendo una sottrazione. Imposta le bandiere.
  • b: ramo da etichettare
  • aggiungi: esegue l'aritmetica

Se non hai esperienza con l'assemblaggio del braccio, guarda questo video. Ti darà una buona comprensione del linguaggio di assemblaggio di Arm.

Ok, ora abbiamo un circuito collegato al nostro raspberry pi 3 e abbiamo una scheda SD che il pi riconosce, quindi il nostro prossimo compito è capire come interagire con il circuito caricando il pi con un programma eseguibile. In generale, ciò che dobbiamo fare è dire al pi di emettere una tensione da GPIO 21 (pin collegato al filo rosso). Quindi abbiamo bisogno di un modo per attivare il led per farlo lampeggiare. Per fare questo abbiamo bisogno di più informazioni. A questo punto non abbiamo idea di come dire a GPIO 21 di produrre output, motivo per cui dobbiamo leggere il datasheet. La maggior parte dei microcontrollori ha schede tecniche che specificano esattamente come funziona tutto. Purtroppo il pi 3 non ha documentazione ufficiale! Tuttavia, esiste una scheda tecnica non ufficiale. Ecco due link ad esso:

  1. github.com/raspberrypi/documentation/files…
  2. web.stanford.edu/class/cs140e/docs/BCM2837…

Ok, a questo punto, dovresti dedicare qualche minuto prima di passare al passaggio successivo per esaminare la scheda tecnica e vedere quali informazioni riesci a trovare.

Passaggio 6: CODE2: Accendi_Led_ON

CODE2:Accendi_Led_ON
CODE2:Accendi_Led_ON
CODE2:Accendi_Led_ON
CODE2:Accendi_Led_ON
CODE2:Accendi_Led_ON
CODE2:Accendi_Led_ON

Il raspberry pi 3 53 registra per controllare i pin di output/input (periferiche). I pin sono raggruppati insieme e ogni gruppo è assegnato a un registro. Per GPIO dobbiamo essere in grado di accedere al registro SELECT, al registro SET e ai registri CLEAR. Per accedere a questi registri abbiamo bisogno dell'indirizzo fisico di questi registri. Quando stai leggendo la scheda tecnica, vuoi solo annotare l'offset dell'indirizzo (lo byte) e aggiungerlo all'indirizzo di base. Devi farlo perché il foglio dati elenca l'indirizzo virtuale di Linux che sono fondamentalmente valori assegnati dai sistemi operativi. Non stiamo utilizzando un sistema operativo quindi abbiamo bisogno di accedere a questi registri direttamente utilizzando l'indirizzo fisico. A tal fine sono necessarie le seguenti informazioni:

  • Indirizzo di base delle periferiche: 0x3f200000. Il pdf (pagina6) dice che l'indirizzo di base è 0x3f000000, tuttavia, questo indirizzo non funzionerà. Usa 0x3f200000
  • Offset di FSEL2(SELECT) non l'indirizzo completo del registro. Il pdf elenca FSEL2 a 0x7E20008 ma questo indirizzo si riferisce all'indirizzo virtuale di Linux. L'offset sarà lo stesso, quindi questo è ciò che vogliamo notare. 0x08
  • Offset di GPSET0(SET):0x1c
  • Offset di GPCLR0(CLEAR):0x28

Quindi probabilmente hai notato che la scheda tecnica elenca 4 registri SELECT, 2 registri SET e 2 registri CLEAR, quindi perché ho scelto quelli che ho fatto? Questo perché vogliamo usare i controlli GPIO 21 e FSEL2 GPIO 20-29, SET0 e controlli CLR0 GPIO 0-31. I registri FSEL assegnano tre bit per ogni pin GPIO. Poiché stiamo usando FSEL2, ciò significa che i bit 0-2 controllano GPIO 20 e i bit 3-5 controllano GPIO 21 e così via. I registri Set e CLR assegnano un singolo bit ad ogni pin. Ad esempio, il bit 0 in SET0 e CLR0 controlla GPIO 1. Per controllare GPIO 21 dovresti impostare il bit 21 in SET0 e CLR0.

Ok, abbiamo parlato di come accedere a questi registri, ma cosa significa tutto questo?

  • Il registro FSEL2 verrà utilizzato per impostare l'uscita GPIO 21. Per impostare un pin per l'output è necessario impostare il bit di ordine lo dei tre bit su 1. Quindi se i bit 3-5 controllano GPIO 21 significa che dobbiamo impostare il primo bit, bit 3 su 1. Questo dirà al pi che vogliamo usare GPIO 21 come output. Quindi, se dovessimo guardare i 3 bit per GPIO 21, dovrebbero apparire così dopo averlo impostato sull'output, b001.
  • GPSET0 dice al pi di accendere il pin (emette una tensione). Per fare questo basta attivare il bit che corrisponde al pin GPIO che vogliamo. Nel nostro caso bit 21.
  • GPCLR0 dice al pi di spegnere il pin (nessuna tensione). Per disattivare il pin impostare il bit sul pin GPIO corrispondente. Nel nostro caso bit 21

Prima di arrivare a un led lampeggiante, per prima cosa facciamo un semplice programma che accenderà semplicemente il led.

Per iniziare dobbiamo aggiungere due direttive all'inizio del nostro codice sorgente.

  • .section.init dice al pi dove mettere il codice
  • .global _start

Successivamente, dobbiamo disporre tutti gli indirizzi che utilizzeremo. Utilizzare.equ per assegnare simboli leggibili ai valori.

  • .equ GPFSEL2, 0x08
  • .equ GPSET0, 0x1c
  • .equ GPCLR0, 0x28
  • .equ BASE, 0x3f200000

Ora creeremo maschere per impostare i bit che dobbiamo impostare.

  • .equ SET_BIT3, 0x08 Questo imposterà il bit tre 0000_1000
  • .equ SET_BIT21, 0x200000

Quindi dobbiamo aggiungere la nostra etichetta _start

_cominciare:

Carica l'indirizzo di base nel registro

ldr r0, =BASE

Ora dobbiamo impostare il bit3 di GPFSEL2

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Questa istruzione dice di riscrivere il bit 0x08 all'indirizzo di GPFSEL2

Infine dobbiamo attivare GPIO 21 impostando il bit 21 nel registro GPSET0

  • ldr r1, =SET_BIT21
  • str r1, [r0, #GPSET0]

Il prodotto finale dovrebbe assomigliare al codice nella foto.

Il prossimo passo è compilare il codice e creare un file.img che il pi può eseguire.

  • Scarica il makefile allegato e kernel.ld e se vuoi il codice sorgente turn_led_on.s.
  • Metti tutti i file nella stessa cartella.
  • Se stai usando il tuo codice sorgente, modifica il makefile e sostituisci il codice = turn_led_on.s con il codice =.s
  • Salva il makefile.
  • Usa il terminale (linux) o la finestra cmd (Windows) per navigare nella cartella contenente i file e digita make e premi invio
  • Il file make dovrebbe generare un file chiamato kernel.img
  • Copia kernel.img sulla tua mini scheda SD. Il contenuto delle tue carte dovrebbe essere come nella foto (foto 3): bootcode.bin, start.elf, fixup.dat e kernel.img.
  • Espellere la scheda mini sd e inserirla nel pi
  • Collega pi alla fonte di alimentazione
  • Il LED dovrebbe accendersi!!!

NOTA LEGGERMENTE IMPORTANTE: Apparentemente instructables ha avuto un problema con il makefile che non aveva un'estensione, quindi l'ho ricaricato con un'estensione.txt. Rimuovi l'estensione quando la scarichi affinché funzioni correttamente.

Consigliato: