Tabla de contenido:

Bare Metal Raspberry Pi 3: LED parpadeante: 8 pasos
Bare Metal Raspberry Pi 3: LED parpadeante: 8 pasos

Video: Bare Metal Raspberry Pi 3: LED parpadeante: 8 pasos

Video: Bare Metal Raspberry Pi 3: LED parpadeante: 8 pasos
Video: Placa didáctica para programar Raspberry Pi en Bare Metal 2024, Noviembre
Anonim
Bare Metal Raspberry Pi 3: LED parpadeante
Bare Metal Raspberry Pi 3: LED parpadeante

Por moldypizzaSeguir más por el autor:

Pulsador Raspberry Pi con LEDs Bare Metal
Pulsador Raspberry Pi con LEDs Bare Metal
Pulsador Raspberry Pi con LEDs Bare Metal
Pulsador Raspberry Pi con LEDs Bare Metal
Cajas
Cajas
Cajas
Cajas
Cómo hacer un tallado en relieve para el Día de los Veteranos
Cómo hacer un tallado en relieve para el Día de los Veteranos
Cómo hacer un tallado en relieve para el Día de los Veteranos
Cómo hacer un tallado en relieve para el Día de los Veteranos

Acerca de:.oO0Oo. Más sobre moldypizza »

¡Bienvenido al tutorial de LED parpadeante de BARE METAL pi 3!

En este tutorial, repasaremos los pasos, de principio a fin, para que un LED parpadee usando una Raspberry PI 3, una placa de pruebas, una resistencia, un LED y una tarjeta SD en blanco.

Entonces, ¿qué es el METAL DESNUDO? BARE METAL es una programación sencilla. El metal desnudo significa que tenemos el control total de lo que hará la computadora hasta el último detalle. Básicamente, significa que el código se escribirá completamente en ensamblador, utilizando el conjunto de instrucciones Arm. Al final, habremos creado un programa que hará parpadear un LED al acceder a la dirección física de uno de los pines GPIO de la Raspberry Pi y configurarlo para que salga y luego encenderlo y apagarlo. Intentar este proyecto es una excelente manera de comenzar con la programación integrada y, con suerte, proporcionar una mejor comprensión de cómo funciona una computadora.

¿Que necesitas?

Hardware

  • Frambuesa PI 3
  • Tarjeta SD precargada con una imagen de arranque
  • Tablero de circuitos
  • Cables de puente macho hembra
  • Cables de puente macho macho
  • DIRIGIÓ
  • Resistencia de 220 ohmios (no tiene que ser exactamente 220 ohmios, la mayoría de las resistencias funcionarán)
  • tarjeta mini sd
  • tarjeta mini sd precargada con el sistema operativo raspberry pi (generalmente incluido con el pi)

Software

  • Compilador GCC
  • Cadena de herramientas incorporada GNU
  • editor de texto
  • formateador de tarjetas sd

¡Muy bien, comencemos!

Paso 1: CONFIGURAR COSAS / COSAS

CONFIGURAR COSAS / COSAS
CONFIGURAR COSAS / COSAS

De acuerdo … el primer paso es adquirir hardware. Puede comprar las piezas por separado o hay un kit que viene con piezas más que suficientes. ENLACE

¡Este kit viene con todo lo necesario para configurar el raspberry pi 3 y más! lo único que no se incluye en este kit es una tarjeta mini sd adicional. ¡Esperar! No compre otro todavía. Si no planea usar la instalación de Linux precargada en la tarjeta, simplemente copie el contenido de la tarjeta mini sd incluida para más tarde y vuelva a formatear la tarjeta (más sobre eso más adelante). NOTA IMPORTANTE: asegúrese de guardar los archivos en la tarjeta incluida, ¡los NECESITA para más adelante!

A continuación, es el momento de configurar el software. Este tutorial no incluirá instrucciones detalladas sobre cómo instalar el software. Hay muchos recursos y tutoriales en línea sobre cómo instalarlos:

USUARIOS DE WINDOWS:

Descargue e instale gcc

A continuación, descargue e instale la cadena de herramientas integrada GNU ARM

LINUX / MAC

  • Las distribuciones de Linux vienen con gcc preinstalado
  • Descargue e instale la cadena de herramientas integrada GNU ARM.

De acuerdo, si todo va bien, entonces debería poder abrir la terminal (linux / mac) o la línea cmd (windows) e intentar escribir

brazo-ninguno-eabi-gcc

La salida debe verse similar a la primera imagen. Esto es solo para verificar que esté instalado correctamente.

Bien, ahora que los requisitos previos están fuera del camino, es hora de comenzar con las cosas divertidas.

Paso 2: CIRCUITO

CIRCUITO
CIRCUITO
CIRCUITO
CIRCUITO
CIRCUITO
CIRCUITO

¡Hora del circuito! El circuito para esto es simple. Conectaremos un led a GPIO 21 (pin 40) en pi (ver imagen 2 y 3). También se conecta una resistencia en serie para evitar que el led se dañe. La resistencia se conectará a la columna negativa en la placa de pruebas que se conectará a GND (pin 39) en el pi. Al conectar el led, asegúrese de conectar el extremo corto al lado negativo. Ver la ultima foto

Paso 3: Mini SD ARRANQUEABLE

ARRANQUE Mini SD
ARRANQUE Mini SD
ARRANQUE Mini SD
ARRANQUE Mini SD
ARRANQUE Mini SD
ARRANQUE Mini SD

Hay tres pasos para que su pi 3 reconozca su tarjeta mini SD en blanco. Necesitamos encontrar y copiar bootcode.bin, start.elf y fixup.dat. Puede obtener estos archivos en la tarjeta mini sd incluida si compró el canakit o si crea una tarjeta sd de arranque para el pi 3 con una distribución de Linux. De cualquier manera, estos archivos son necesarios para permitir que pi reconozca la tarjeta sd como un dispositivo de arranque. A continuación, formatee el mini sd a fat32 (la mayoría de las tarjetas mini sd vienen formateadas en fat32. Usé una tarjeta mini sd barata de sandisk), mueva bootcode.bin, start.elf, fixup.dat a la tarjeta sd. ¡Y listo! Vale una vez más y en el orden de las imágenes los pasos son:

  1. Busque bootcode.bin, start.elf, fixup.dat.
  2. Asegúrese de que su tarjeta SD esté formateada en fat32.
  3. Mueva bootcode.bin, start.elf y fixup.dat a la tarjeta SD formateada.

Así es como descubrí esto, enlace.

Paso 4: COMPROBAR Mini SD

VERIFICAR Mini SD
VERIFICAR Mini SD
VERIFICAR Mini SD
VERIFICAR Mini SD

Muy bien, tenemos una tarjeta mini SD de arranque y, con suerte, tienes una pi 3 en este momento. Así que ahora deberíamos probarlo para asegurarnos de que pi 3 reconozca la tarjeta mini sd como de arranque.

En el pi, cerca del puerto mini usb, hay dos leds pequeños. Uno es rojo. Este es el indicador de encendido. Cuando el pi recibe energía, esta luz debe estar encendida. Entonces, si conecta su pi ahora mismo sin una tarjeta mini sd, debería encenderse en rojo. Bien, ahora desconecte su pi y coloque su tarjeta mini SD de arranque que se creó en el paso anterior y conecte la pi. ¿Ve otra luz? Debe haber una luz verde, justo al lado de la roja, que indica que está leyendo la tarjeta SD. Este led se llama led ACT. Se iluminará cuando haya una tarjeta SD viable insertada. Parpadeará cuando acceda a su tarjeta mini sd.

Bien, entonces deberían haber sucedido dos cosas después de insertar la tarjeta mini sd de arranque y enchufar el pi:

  1. El LED rojo debe iluminarse indicando la recepción de energía.
  2. El LED verde debe iluminarse para indicar que se ha iniciado en la tarjeta mini sd.

Si algo salió mal, intente repetir los pasos anteriores o haga clic en el enlace a continuación para obtener más información.

El enlace aquí es una buena referencia.

Paso 5: CÓDIGO1

Este proyecto está escrito en lenguaje ensamblador ARM. En este tutorial se asume una comprensión básica del ensamblaje ARM, pero aquí hay algunas cosas que debe saber:

.equ: asigna un valor a un símbolo, es decir, abc.equ 5 abc ahora representa cinco

  • ldr: carga desde la memoria
  • str: escribe en la memoria
  • cmp: compara dos valores realizando una resta. Establece banderas.
  • b: rama a etiqueta
  • agregar: realiza aritmética

Si no tiene ninguna experiencia con el montaje de brazos, mire este video. Le dará una buena comprensión del lenguaje ensamblador de Arm.

Bien, ahora tenemos un circuito que está conectado a nuestra raspberry pi 3 y tenemos una tarjeta sd que el pi reconoce, por lo que nuestra próxima tarea es averiguar cómo interactuar con el circuito cargando el pi con un programa ejecutable. En general, lo que tenemos que hacer es decirle al pi que emita un voltaje de GPIO 21 (pin conectado al cable rojo). Entonces necesitamos una forma de alternar el led para que parpadee. Para hacer esto, necesitamos más información. En este punto, no tenemos idea de cómo decirle a GPIO 21 que genere la salida, por lo que debemos leer la hoja de datos. La mayoría de los microcontroladores tienen hojas de datos que especifican exactamente cómo funciona todo. Desafortunadamente, ¡el pi 3 no tiene documentación oficial! Sin embargo, hay una hoja de datos no oficial. Aquí hay dos enlaces a él:

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

Bien, en este punto, debe tomarse unos minutos antes de pasar al siguiente paso para revisar la hoja de datos y ver qué información puede encontrar.

Paso 6: CÓDIGO2: Turn_Led_ON

CÓDIGO2: Turn_Led_ON
CÓDIGO2: Turn_Led_ON
CÓDIGO2: Turn_Led_ON
CÓDIGO2: Turn_Led_ON
CÓDIGO2: Turn_Led_ON
CÓDIGO2: Turn_Led_ON

La raspberry pi 3 53 se registra para controlar los pines de salida / entrada (periféricos). Los pines se agrupan y cada grupo se asigna a un registro. Para GPIO, necesitamos poder acceder al registro SELECT, al registro SET y a los registros CLEAR. Para acceder a estos registros, necesitamos las direcciones físicas de estos registros. Cuando está leyendo la hoja de datos, solo desea anotar el desplazamiento de la dirección (lo byte) y agregarlo a la dirección base. Debe hacer esto porque la hoja de datos enumera la dirección virtual de Linux, que son básicamente valores que asignan los sistemas operativos. No estamos utilizando un sistema operativo, por lo que debemos acceder a estos registros directamente utilizando la dirección física. Para ello necesita la siguiente información:

  • Dirección base de periféricos: 0x3f200000. El pdf (página 6) dice que la dirección base es 0x3f000000, sin embargo, esta dirección no funcionará. Utilice 0x3f200000
  • Desplazamiento de FSEL2 (SELECT) no es la dirección completa del registro. El pdf enumera FSEL2 en 0x7E20008 pero esta dirección se refiere a la dirección virtual de Linux. El desplazamiento será el mismo, así que eso es lo que queremos señalar. 0x08
  • Desplazamiento de GPSET0 (SET): 0x1c
  • Desplazamiento de GPCLR0 (CLEAR): 0x28

Entonces probablemente notó que la hoja de datos enumera 4 registros SELECT, 2 registros SET y 2 registros CLEAR, entonces, ¿por qué elegí los que hice? Esto se debe a que queremos usar GPIO 21 y FSEL2 controles GPIO 20-29, SET0 y CLR0 controles GPIO 0-31. Los registros FSEL asignan tres bits para cada pin GPIO. Como estamos usando FSEL2, eso significa que los bits 0-2 controlan GPIO 20, y los bits 3-5 controlan GPIO 21 y así sucesivamente. Los registros Set y CLR asignan un solo bit a cada pin. Por ejemplo, el bit 0 en SET0 y CLR0 controla GPIO 1. Para controlar GPIO 21, debe establecer el bit 21 en SET0 y CLR0.

De acuerdo, hemos hablado sobre cómo acceder a estos registros, pero ¿qué significa todo esto?

  • El registro FSEL2 se utilizará para configurar GPIO 21 como salida. Para establecer un pin en la salida, debe establecer el bit de orden bajo de los tres bits en 1. Entonces, si los bits 3-5 controlan GPIO 21, eso significa que debemos establecer el primer bit, el bit 3 en 1. Esto le dirá al pi que queremos usar GPIO 21 como salida. Entonces, si tuviéramos que mirar los 3 bits para GPIO 21, deberían verse así después de configurarlo como salida, b001.
  • GPSET0 le dice al pi que encienda el pin (emite un voltaje). Para hacer esto, simplemente cambiamos el bit que corresponde con el pin GPIO que queremos. En nuestro caso, bit 21.
  • GPCLR0 le dice al pi que apague el pin (sin voltaje). Para desactivar el pin, establezca el bit en el pin GPIO correspondiente. En nuestro caso bit 21

Antes de llegar a un LED parpadeante, primero hagamos un programa simple que simplemente encenderá el LED.

Para empezar, necesitamos agregar dos directivas al principio de nuestro código fuente.

  • .section.init le dice al pi dónde poner el código
  • .global _start

A continuación, necesitamos diseñar todas las direcciones que usaremos. Utilice.equ para asignar símbolos legibles a los valores.

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

Ahora vamos a crear máscaras para configurar los bits que necesitamos configurar.

  • .equ SET_BIT3, 0x08 Esto establecerá el bit tres 0000_1000
  • .equ SET_BIT21, 0x200000

Entonces necesitamos agregar nuestra etiqueta _start

_comienzo:

Cargar la dirección base en el registro

ldr r0, = BASE

Ahora tenemos que configurar el bit3 de GPFSEL2

  • ldr r1, SET_BIT3
  • str r1, [r0, # GPFSEL2] Esta instrucción dice que se vuelva a escribir el bit 0x08 en la dirección de GPFSEL2

Finalmente, necesitamos activar GPIO 21 configurando el bit 21 en el registro GPSET0

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

El producto final debe parecerse al código que se muestra en la imagen.

El siguiente paso es compilar el código y crear un archivo.img que el pi pueda ejecutar.

  • Descargue el archivo MAKE adjunto y kernel.ld y si desea el código fuente turn_led_on.s.
  • Pon todos los archivos en la misma carpeta.
  • Si está utilizando su propio código fuente, edite el archivo MAKE y reemplace el código = turn_led_on.s con code =.s
  • Guarde el archivo MAKE.
  • Use la ventana de terminal (linux) o cmd (windows) para navegar a su carpeta que contiene los archivos y escriba make y presione enter
  • El archivo make debería generar un archivo llamado kernel.img
  • Copie kernel.img en su tarjeta mini sd. El contenido de sus tarjetas debe ser como se muestra en la imagen (imagen 3): bootcode.bin, start.elf, fixup.dat y kernel.img.
  • Expulsa la tarjeta mini sd e insértala en el pi
  • Enchufe pi a la fuente de alimentación
  • ¡El LED debería encenderse!

NOTA LIGERAMENTE IMPORTANTE: Aparentemente, instructables tuvo un problema con el archivo MAKE que no tenía una extensión, así que lo volví a cargar con una extensión.txt. Elimina la extensión cuando la descargues para que funcione correctamente.

Recomendado: