Taula de continguts:

Bare Metal Raspberry Pi 3: LED parpellejant: 8 passos
Bare Metal Raspberry Pi 3: LED parpellejant: 8 passos

Vídeo: Bare Metal Raspberry Pi 3: LED parpellejant: 8 passos

Vídeo: Bare Metal Raspberry Pi 3: LED parpellejant: 8 passos
Vídeo: BTT GTR v1.0/M5 v1.0 - Basics 2024, Juliol
Anonim
Bare Metal Raspberry Pi 3: LED parpellejant
Bare Metal Raspberry Pi 3: LED parpellejant

Per moldypizza Segueix-ne més per l'autor:

Polsador Raspberry Pi amb LEDs de metall nu
Polsador Raspberry Pi amb LEDs de metall nu
Polsador Raspberry Pi amb LEDs de metall nu
Polsador Raspberry Pi amb LEDs de metall nu
Caixes
Caixes
Caixes
Caixes
Com fer una talla de socors per al dia dels veterans
Com fer una talla de socors per al dia dels veterans
Com fer una talla de socors per al dia dels veterans
Com fer una talla de socors per al dia dels veterans

Quant a:.oO0Oo. Més informació sobre moldypizza »

Benvingut al tutorial de LED intermitent de BARE METAL pi 3!

En aquest tutorial passarem pels passos, de principi a fi, per aconseguir que un LED parpellegi mitjançant un Raspberry PI 3, una placa de control, una resistència, un led i una targeta SD en blanc.

Llavors, què és BARE METAL? BARE METAL no és una programació senzilla. El metall nu significa que tenim el control total del que farà l'ordinador fins al punt. Per tant, bàsicament vol dir que el codi s’escriurà completament en muntatge, mitjançant el conjunt d’instruccions Arm. Al final, haurem creat un programa que parpellejarà un LED accedint a l'adreça física d'un dels pins GPIO del Raspberry Pi i configurant-lo per a la sortida i després activant-lo i apagant-lo. Intentar aquest projecte és una manera fantàstica d’iniciar-se amb la programació incrustada i esperem que pugui entendre millor el funcionament d’un ordinador.

Què necessites?

Maquinari

  • Raspberry PI 3
  • Targeta SD precarregada amb una imatge d'arrencada
  • Taula de pa
  • Cavallers masculins femenins
  • Cavalls masculins de pont masculí
  • LED
  • Resistència de 220 ohms (no ha de ser exactament de 220 ohms, la majoria de qualsevol resistència funcionarà)
  • targeta mini sd
  • targeta mini SD carregada prèviament amb el sistema operatiu raspberry pi (normalment inclòs amb el pi)

Programari

  • Compilador de GCC
  • Cadena d’eines incrustada de GNU
  • editor de text
  • formatador de targeta sd

Molt bé, COMENÇA!

Pas 1: CONFIGURAR COSES / COSES

CONFIGURACIÓ DE COSES / COSES
CONFIGURACIÓ DE COSES / COSES

D'acord, doncs … el primer pas és adquirir maquinari. Podeu comprar les peces per separat o hi ha un kit que inclou més de prou peces. ENLLAÇ

Aquest kit inclou tot el necessari per configurar el raspberry pi 3 i més. l'únic que no s'inclou en aquest kit és una targeta mini sd addicional. Espera! Encara no en compreu un altre. Si no teniu previst utilitzar la instal·lació de Linux precarregada a la targeta, només cal que copieu el contingut de la targeta mini sd inclosa per més endavant i torneu a formatar la targeta (més informació més endavant). NOTA IMPORTANT: assegureu-vos de conservar els fitxers a la targeta inclosa, els necessitareu per a més endavant.

A continuació, és hora de configurar el programari. Aquest tutorial no inclourà instruccions detallades sobre com instal·lar el programari. Hi ha molts recursos i tutorials en línia sobre com instal·lar-los:

USUARIS DE WINDOWS:

Descarregueu i instal·leu gcc

A continuació, descarregueu i instal·leu la cadena d'eines incrustada de GNU ARM

LINUX / MAC

  • Les distribucions Linux vénen amb gcc preinstal·lat
  • Descarregueu i instal·leu la cadena d'eines incrustada de GNU ARM.

D'acord, doncs, si tot va bé, hauríeu de poder obrir el terminal (linux / mac) o la línia cmd (windows) i provar d'escriure

arm-none-eabi-gcc

La sortida hauria de ser similar a la primera imatge. Això és només per verificar que s’instal·la correctament.

Ara bé, ja que els requisits previs estan fora del camí, és hora de començar amb les coses divertides.

Pas 2: CIRCUIT

CIRCUIT
CIRCUIT
CIRCUIT
CIRCUIT
CIRCUIT
CIRCUIT

Temps del circuit! El circuit per a això és senzill. Connectarem un led a GPIO 21 (pin 40) a pi (vegeu la imatge 2 i 3). També es connecta una resistència en sèrie per evitar que es danyi el led. La resistència estarà connectada a la columna negativa de la placa que es connectarà a GND (pin 39) del pi. Quan connecteu el led, assegureu-vos de connectar l'extrem curt al costat negatiu. Veure la darrera imatge

Pas 3: BOOTABLE Mini SD

BOOTABLE Mini SD
BOOTABLE Mini SD
BOOTABLE Mini SD
BOOTABLE Mini SD
BOOTABLE Mini SD
BOOTABLE Mini SD

Hi ha tres passos perquè el vostre pi 3 reconegui la vostra mini targeta SD en blanc. Hem de trobar i copiar bootcode.bin, start.elf i fixup.dat. Podeu obtenir aquests fitxers a la mini targeta SD inclosa si heu comprat el canakit o feu una targeta SD arrencable per al pi 3 amb una distribució Linux. De qualsevol manera, aquests fitxers són necessaris per permetre que el pi reconegui la targeta sd com a dispositiu d'arrencada. A continuació, formateu el mini sd a fat32 (la majoria de les mini targetes SD tenen el format fat32. He utilitzat una mini targeta SD barata de sandisk), moveu bootcode.bin, start.elf, fixup.dat a la targeta sd. I el vostre fet! D'acord una vegada més i en l'ordre de les imatges els passos són:

  1. Cerqueu bootcode.bin, start.elf, fixup.dat.
  2. Assegureu-vos que la vostra targeta SD tingui el format de fat32.
  3. Moveu bootcode.bin, start.elf i fixup.dat a la targeta SD formatada.

Així és com ho he entès, enllaç.

Pas 4: COMPROVEU Mini SD

CHECK Mini SD
CHECK Mini SD
CHECK Mini SD
CHECK Mini SD

Molt bé, tenim una mini targeta SD d’arrencada i, amb sort, teniu una pi 3 en aquest moment. Per tant, ara hauríem de provar-la per assegurar-nos que el pi 3 reconeix la mini targeta SD com a arrencable.

Al pi, prop del port mini USB hi ha dos leds petits. Un és vermell. Aquest és l’indicador d’alimentació. Quan el pi rep energia, aquest llum hauria d'estar encès. Per tant, si connecteu el pi en aquest moment sense targeta mini sd, hauria d’il·luminar-se de vermell. Molt bé, desconnecteu el pi i poseu la vostra mini targeta SD d'arrencada creada al pas anterior i connecteu el pi. Veieu una altra llum? Hi hauria d’haver un llum verd, just al costat del vermell, que indiqui que està llegint la targeta sd. Aquest led es diu ACT led. S'il·luminarà quan hi hagi una targeta SD viable inserida. Parpellejarà quan accedeixi a la vostra targeta mini sd.

D'acord, de manera que haurien d'haver passat dues coses després d'haver inserit la mini targeta SD d'arrencada i connectar el pi:

  1. El led vermell s’ha d’il·luminar per indicar la recepció de l’alimentació
  2. El led verd s’ha d’il·luminar indicant que s’ha arrencat a la mini targeta SD

Si s'ha produït un error, intenteu repetir els passos anteriors o feu clic a l'enllaç següent per obtenir més informació.

L’enllaç aquí és una bona referència.

Pas 5: CODI1

Aquest projecte està escrit en llenguatge ensamblador ARM. En aquest tutorial s’assumeix una comprensió bàsica del muntatge ARM, però aquí teniu algunes coses que heu de saber:

.equ: assigna un valor a un símbol, és a dir, abc.equ 5 abc ara representa cinc

  • ldr: càrregues de memòria
  • str: escriu a la memòria
  • cmp: compara dos valors realitzant una resta. Estableix banderes.
  • b: branca per etiquetar
  • afegir: realitza aritmètica

Si no teniu experiència amb el muntatge del braç, mireu aquest vídeo. Us proporcionarà una bona comprensió del llenguatge assemblador del braç.

Molt bé, ara mateix tenim un circuit connectat al nostre raspberry pi 3 i tenim una targeta SD que el pi reconeix, de manera que la nostra següent tasca és esbrinar com interactuar amb el circuit carregant el pi amb un programa executable. En general, el que hem de fer és dir al pi que emeti una tensió des de GPIO 21 (pin connectat al fil vermell). A continuació, necessitem una manera de commutar el led perquè parpellegi. Per fer-ho necessitem més informació. En aquest moment no tenim ni idea de com indicar a GPIO 21 la sortida, motiu pel qual hem de llegir el full de dades. La majoria dels microcontroladors tenen fulls de dades que especifiquen exactament com funciona tot. Malauradament, el pi 3 no té documentació oficial. No obstant això, hi ha un full de dades no oficial. Aquí hi ha dos enllaços:

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

D’acord en aquest moment, hauríeu de passar uns minuts abans de passar al següent pas per mirar el full de dades i veure quina informació podeu trobar.

Pas 6: CODI2: Turn_Led_ON

CODI2: Turn_Led_ON
CODI2: Turn_Led_ON
CODI2: Turn_Led_ON
CODI2: Turn_Led_ON
CODI2: Turn_Led_ON
CODI2: Turn_Led_ON

El raspberry pi 3 53 es registra per controlar els pins de sortida / entrada (perifèrics). Els pins s’agrupen i cada grup s’assigna a un registre. Per a GPIO hem de poder accedir als registres SELECT, SET i CLEAR. Per accedir a aquests registres necessitem l'adreça física d'aquests registres. Quan llegiu el full de dades, només voleu notar el desplaçament de l'adreça (lo byte) i afegir-lo a l'adreça base. Heu de fer-ho perquè el full de dades llista l'adreça virtual de Linux que bàsicament són valors que assignen els sistemes operatius. No fem servir un sistema operatiu, per tant, hem d’accedir a aquests registres directament mitjançant l’adreça física. Per a això, necessiteu la informació següent:

  • Adreça base dels perifèrics: 0x3f200000. El pdf (pàgina6) diu que l'adreça base és 0x3f000000, però, aquesta adreça no funcionarà. Utilitzeu 0x3f200000
  • Desplaçament de FSEL2 (SELECT) no l'adreça completa del registre. El pdf llista FSEL2 a 0x7E20008, però aquesta adreça fa referència a l'adreça virtual de Linux. El desplaçament serà el mateix, de manera que això és el que volem tenir en compte. 0x08
  • Desplaçament de GPSET0 (SET): 0x1c
  • Desplaçament de GPCLR0 (CLEAR): 0x28

Per tant, probablement es va adonar que el full de dades llista 4 registres SELECT, 2 registres SET i 2 registres CLEAR, per què he escollit els que he fet? Això es deu al fet que volem utilitzar GPIO 21 i FSEL2 controla GPIO 20-29, SET0 i CLR0 controla GPIO 0-31. Els registres FSEL assignen tres bits per a cada pin GPIO. Com que estem fent servir FSEL2, això significa que els bits 0-2 controlen GPIO 20, i els bits 3-5 controlen GPIO 21, etc. Els registres Set i CLR assignen un sol bit a cada pin. Per exemple, el bit 0 a SET0 i CLR0 controla GPIO 1. Per controlar GPIO 21, definiríeu el bit 21 a SET0 i CLR0.

D'acord, així que hem parlat de com accedir a aquests registres, però què significa tot això?

  • El registre FSEL2 s'utilitzarà per configurar GPIO 21 a la sortida. Per configurar un pin a la sortida, heu d’establir el bit d’ordre dels tres bits a 1. Per tant, si els bits 3-5 controlen GPIO 21 això vol dir que hem d’establir el primer bit, el bit 3 a 1. Això dirà a la pi que volem utilitzar GPIO 21 com a sortida. Per tant, si miréssim els 3 bits de GPIO 21, haurien de ser així després de configurar-lo a la sortida, b001.
  • GPSET0 indica al pi que engegui el pin (emet un voltatge). Per fer-ho, només cal canviar el bit que correspon amb el pin GPIO que volem. En el nostre cas, bit 21.
  • GPCLR0 indica al pi que apague el pin (sense tensió). Per apagar el pin, configureu el bit al pin GPIO corresponent. En el nostre cas bit 21

Abans d’arribar a un led parpellejant, primer fem un programa senzill que simplement l’encengui.

Per començar, hem d’afegir dues directives a la part superior del nostre codi font.

  • .section.init indica a pi on posar el codi
  • .global _start

A continuació, hem de dissenyar totes les adreces que farem servir. Utilitzeu.equ per assignar símbols llegibles als valors.

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

Ara crearem màscares per configurar els bits que hem d’establir.

  • .equ SET_BIT3, 0x08 Això establirà el bit tres 0000_1000
  • .equ SET_BIT21, 0x200000

A continuació, hem d’afegir la nostra etiqueta _start

_començar:

Carregueu l'adreça base al registre

ldr r0, = BASE

Ara hem d’establir el bit3 de GPFSEL2

  • ldr r1, SET_BIT3
  • str r1, [r0, # GPFSEL2] Aquesta instrucció diu que cal escriure el bit 0x08 a l'adreça de GPFSEL2

Finalment, hem d’activar GPIO 21 configurant el bit 21 al registre GPSET0

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

El producte final hauria de ser semblant al codi de la imatge.

El següent pas és compilar el codi i crear un fitxer.img que el pi pugui executar.

  • Baixeu-vos el fitxer makefile adjunt i kernel.ld i, si voleu, el codi font turn_led_on.s.
  • Col·loqueu tots els fitxers a la mateixa carpeta.
  • Si feu servir el vostre propi codi font, editeu el fitxer makefile i substituïu el codi = turn_led_on.s per codi =.s
  • Deseu el fitxer de canvi.
  • Utilitzeu el terminal (linux) o la finestra cmd (windows) per anar a la carpeta que conté els fitxers i escriviu make i premeu enter
  • El fitxer make hauria de generar un fitxer anomenat kernel.img
  • Copieu kernel.img a la vostra mini targeta SD. El contingut de les vostres targetes hauria de ser el que es mostra a la imatge (foto 3): bootcode.bin, start.elf, fixup.dat i kernel.img.
  • Expulseu la mini targeta SD i introduïu-la al pi
  • Connecteu pi a la font d'alimentació
  • El LED s’hauria d’encendre !!!

NOTA POC IMPORTANT: Aparentment els instructables tenien un problema amb el fitxer makefile que no tenia cap extensió, així que el vaig tornar a penjar amb una extensió.txt. Elimineu l'extensió quan la baixeu perquè funcioni correctament.

Recomanat: