Table des matières:

Bare Metal Raspberry Pi 3 : LED clignotante : 8 étapes
Bare Metal Raspberry Pi 3 : LED clignotante : 8 étapes

Vidéo: Bare Metal Raspberry Pi 3 : LED clignotante : 8 étapes

Vidéo: Bare Metal Raspberry Pi 3 : LED clignotante : 8 étapes
Vidéo: Baremetal Assembly Raspberry Pi Programming | Direct to Register Blink LED, No Operating System 2024, Novembre
Anonim
Bare Metal Raspberry Pi 3: LED clignotante
Bare Metal Raspberry Pi 3: LED clignotante

Par moldypizzaSuivez plus par l'auteur:

Bouton poussoir Raspberry Pi avec LED Bare Metal
Bouton poussoir Raspberry Pi avec LED Bare Metal
Bouton poussoir Raspberry Pi avec LED Bare Metal
Bouton poussoir Raspberry Pi avec LED Bare Metal
Caisses
Caisses
Caisses
Caisses
Comment faire une sculpture de secours pour la journée des anciens combattants
Comment faire une sculpture de secours pour la journée des anciens combattants
Comment faire une sculpture de secours pour la journée des anciens combattants
Comment faire une sculpture de secours pour la journée des anciens combattants

À propos de:.oO0Oo. En savoir plus sur moldypizza »

Bienvenue dans le didacticiel BARE METAL pi 3 Clignotant LED !

Dans ce tutoriel, nous allons parcourir les étapes, du début à la fin, pour faire clignoter une LED à l'aide d'un Raspberry PI 3, d'une maquette, d'une résistance, d'une LED et d'une carte SD vierge.

Alors, qu'est-ce que le BARE METAL ? BARE METAL est une programmation sans fioritures. Bare metal signifie que nous contrôlons totalement ce que l'ordinateur fera jusqu'au bout. Cela signifie donc essentiellement que le code sera entièrement écrit en assembleur, en utilisant le jeu d'instructions Arm. À la fin, nous aurons créé un programme qui fera clignoter une LED en accédant à l'adresse physique de l'une des broches GPIO du Raspberry Pi et en la configurant pour la sortie, puis en l'allumant et en l'éteignant. Tenter ce projet est un excellent moyen de se lancer dans la programmation embarquée et, espérons-le, de mieux comprendre le fonctionnement d'un ordinateur.

De quoi avez-vous besoin?

Matériel

  • Framboise PI 3
  • Carte SD préchargée avec une image amorçable
  • Planche à pain
  • Fils de liaison mâle femelle
  • Cavaliers mâles mâles
  • LED
  • Résistance de 220 ohms (n'a pas besoin d'être exactement de 220 ohms, la plupart des résistances fonctionneront)
  • mini carte sd
  • mini carte sd pré-chargée avec le système d'exploitation raspberry pi (généralement inclus avec le pi)

Logiciel

  • compilateur GCC
  • Chaîne d'outils intégrée à GNU
  • éditeur de texte
  • formateur de carte sd

D'accord, commençons !

Étape 1: CONFIGURATION DES CHOSES/CONFIGURATION

CONFIGURATION DES CHOSES/CONFIGURATION
CONFIGURATION DES CHOSES/CONFIGURATION

Bon alors… la première étape consiste à acquérir du matériel. Vous pouvez acheter les pièces séparément ou il existe un kit qui contient plus qu'assez de pièces. RELIER

Ce kit est livré avec tout le nécessaire pour configurer le Raspberry Pi 3 et plus encore ! la seule chose non incluse dans ce kit est une carte mini sd supplémentaire. Attendre! N'en achetez pas un autre tout de suite. Si vous ne prévoyez pas d'utiliser l'installation Linux préchargée sur la carte, copiez simplement le contenu de la mini carte SD incluse pour plus tard et reformatez la carte (plus de détails plus tard). REMARQUE IMPORTANTE: assurez-vous de conserver les fichiers sur la carte incluse, vous en aurez besoin pour plus tard !

Ensuite, il est temps de configurer le logiciel. Ce didacticiel n'inclura pas d'instructions détaillées sur la façon d'installer le logiciel. Il existe de nombreuses ressources et tutoriels en ligne sur la façon de les installer:

UTILISATEURS DE WINDOWS:

Téléchargez et installez gcc

Ensuite, téléchargez et installez la chaîne d'outils intégrée GNU ARM

LINUX/MAC

  • Les distributions Linux sont livrées avec gcc pré-installé
  • Téléchargez et installez la chaîne d'outils intégrée GNU ARM.

D'accord, donc si tout se passe bien, vous devriez pouvoir ouvrir le terminal (linux/mac) ou la ligne de commande (windows) et essayer de taper

bras-aucun-eabi-gcc

La sortie devrait ressembler à la première image. C'est juste pour vérifier qu'il est correctement installé.

Bon maintenant que les pré-requis sont terminés, il est temps de commencer avec les choses amusantes.

Étape 2: CIRCUIT

CIRCUIT
CIRCUIT
CIRCUIT
CIRCUIT
CIRCUIT
CIRCUIT

L'heure du circuit ! Le circuit pour cela est simple. Nous allons connecter une led au GPIO 21 (pin 40) sur pi (voir photo 2 et 3). Une résistance est également connectée en série pour éviter que la led ne soit endommagée. La résistance sera connectée à la colonne négative de la maquette qui sera connectée à GND (broche 39) sur le pi. Lors de la connexion de la led, assurez-vous de connecter l'extrémité courte au côté négatif. Voir la dernière photo

Étape 3: Mini SD Amorçable

Mini SD amorçable
Mini SD amorçable
Mini SD amorçable
Mini SD amorçable
Mini SD amorçable
Mini SD amorçable

Il y a trois étapes pour que votre pi 3 reconnaisse votre mini carte SD vierge. Nous devons trouver et copier bootcode.bin, start.elf et fixup.dat. Vous pouvez obtenir ces fichiers sur la mini carte SD incluse si vous avez acheté le canakit ou créer une carte SD amorçable pour le pi 3 avec une distribution Linux. Dans tous les cas, ces fichiers sont nécessaires pour permettre au pi de reconnaître la carte SD en tant que périphérique amorçable. Ensuite, formatez la mini sd en fat32 (la plupart des cartes mini sd sont formatées en fat32. J'ai utilisé une mini carte sd bon marché de sandisk), déplacez bootcode.bin, start.elf, fixup.dat sur la carte sd. Et c'est fini ! Bon encore une fois et dans l'ordre des images les étapes sont:

  1. Recherchez bootcode.bin, start.elf, fixup.dat.
  2. Assurez-vous que votre carte SD est formatée en fat32.
  3. Déplacez bootcode.bin, start.elf et fixup.dat sur la carte SD formatée.

Voici comment j'ai compris cela, lien.

Étape 4: VÉRIFIER la Mini SD

VÉRIFIER la mini SD
VÉRIFIER la mini SD
VÉRIFIER la mini SD
VÉRIFIER la mini SD

D'accord, nous avons une mini carte SD amorçable, et j'espère que vous avez un pi 3 à ce stade. Nous devons donc maintenant le tester pour nous assurer que le pi 3 reconnaît la mini carte SD comme amorçable.

Sur le pi, près du mini port usb il y a deux petites leds. L'un est rouge. C'est l'indicateur de puissance. Lorsque le pi est alimenté, ce voyant doit être allumé. Donc, si vous branchez votre pi maintenant sans carte mini SD, il devrait s'allumer en rouge. Bon maintenant, débranchez votre pi et insérez votre mini carte SD amorçable qui a été créée à l'étape précédente et branchez le pi. Voyez-vous un autre voyant ? Il devrait y avoir un voyant vert, juste à côté du rouge, qui indique qu'il lit la carte SD. Cette led est appelée led ACT. Il s'allumera lorsqu'une carte SD viable sera insérée. Il clignotera lorsqu'il accédera à votre mini carte SD.

D'accord, deux choses auraient dû se produire après avoir inséré la mini carte SD amorçable et branché le pi:

  1. La led rouge doit être allumée indiquant la réception de puissance
  2. La led verte doit être allumée indiquant qu'elle a démarré dans la mini carte SD

Si quelque chose ne va pas, essayez de répéter les étapes précédentes ou cliquez sur le lien ci-dessous pour plus d'informations.

Lien ici est une bonne référence.

Étape 5: CODE1

Ce projet est écrit en langage assembleur ARM. Une compréhension de base de l'assemblage ARM est supposée dans ce didacticiel, mais voici quelques éléments que vous devez savoir:

.equ: attribue une valeur à un symbole, c'est-à-dire abc.equ 5 abc représente maintenant cinq

  • ldr: charge depuis la mémoire
  • str: écrit en mémoire
  • cmp: compare deux valeurs en effectuant une soustraction. Définit les drapeaux.
  • b: branche à étiqueter
  • ajouter: effectue des calculs arithmétiques

Si vous n'avez aucune expérience avec l'assemblage du bras, regardez cette vidéo. Cela vous donnera une bonne compréhension du langage assembleur Arm.

Bon, en ce moment, nous avons un circuit connecté à notre raspberry pi 3 et nous avons une carte SD que le pi reconnaît, donc notre prochaine tâche consiste à déterminer comment interagir avec le circuit en chargeant le pi avec un programme exécutable. En général, ce que nous devons faire, c'est dire au pi de sortir une tension du GPIO 21 (broche connectée au fil rouge). Ensuite, nous avons besoin d'un moyen de basculer la led pour la faire clignoter. Pour ce faire, nous avons besoin de plus d'informations. À ce stade, nous ne savons pas comment indiquer à GPIO 21 de sortir, c'est pourquoi nous devons lire la fiche technique. La plupart des microcontrôleurs ont des fiches techniques qui spécifient exactement comment tout fonctionne. Malheureusement, le pi 3 n'a pas de documentation officielle ! Cependant, il existe une fiche technique non officielle. Voici deux liens vers celui-ci:

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

D'accord, à ce stade, vous devriez prendre quelques minutes avant de passer à l'étape suivante pour parcourir la fiche technique et voir quelles informations vous pouvez trouver.

Étape 6: CODE2: Turn_Led_ON

CODE2: Turn_Led_ON
CODE2: Turn_Led_ON
CODE2: Turn_Led_ON
CODE2: Turn_Led_ON
CODE2: Turn_Led_ON
CODE2: Turn_Led_ON

Le raspberry pi 3 53 enregistre pour contrôler les broches de sortie/entrée (périphériques). Les broches sont regroupées et chaque groupe est affecté à un registre. Pour GPIO, nous devons pouvoir accéder aux registres SELECT, SET et CLEAR. Pour accéder à ces registres, nous avons besoin de l'adresse physique de ces registres. Lorsque vous lisez la fiche technique, vous souhaitez uniquement noter le décalage de l'adresse (lo octet) et l'ajouter à l'adresse de base. Vous devez le faire car la fiche technique répertorie les adresses virtuelles Linux, qui sont essentiellement des valeurs attribuées par les systèmes d'exploitation. Nous n'utilisons pas de système d'exploitation, nous devons donc accéder à ces registres directement en utilisant l'adresse physique. Pour cela, vous avez besoin des informations suivantes:

  • Adresse de base des périphériques: 0x3f200000. Le pdf (page6) indique que l'adresse de base est 0x3f000000, cependant, cette adresse ne fonctionnera pas. Utiliser 0x3f200000
  • Le décalage de FSEL2(SELECT) n'est pas l'adresse complète du registre. Le pdf répertorie FSEL2 à 0x7E20008 mais cette adresse fait référence à l'adresse virtuelle Linux. Le décalage sera le même, c'est donc ce que nous voulons noter. 0x08
  • Décalage de GPSET0 (SET): 0x1c
  • Décalage de GPCLR0 (CLEAR): 0x28

Vous avez donc probablement remarqué que la fiche technique répertorie 4 registres SELECT, 2 registres SET et 2 registres CLEAR, alors pourquoi ai-je choisi ceux que j'ai fait ? C'est parce que nous voulons utiliser GPIO 21 et FSEL2 contrôle GPIO 20-29, SET0 et CLR0 contrôle GPIO 0-31. Les registres FSEL attribuent trois bits pour chaque broche GPIO. Puisque nous utilisons FSEL2, cela signifie que les bits 0-2 contrôlent GPIO 20, et les bits 3-5 contrôlent GPIO 21 et ainsi de suite. Les registres Set et CLR attribuent un seul bit à chaque broche. Par exemple, le bit 0 dans SET0 et CLR0 contrôle GPIO 1. Pour contrôler GPIO 21, vous devez définir le bit 21 dans SET0 et CLR0.

D'accord, nous avons parlé de la façon d'accéder à ces registres, mais qu'est-ce que tout cela signifie ?

  • Le registre FSEL2 sera utilisé pour configurer GPIO 21 en sortie. Pour définir une broche en sortie, vous devez définir le bit d'ordre inférieur des trois bits sur 1. Donc, si les bits 3 à 5 contrôlent GPIO 21, cela signifie que nous devons définir le premier bit, le bit 3 sur 1. Cela indiquera au pi que nous voulons utiliser GPIO 21 comme sortie. Donc, si nous examinions les 3 bits pour GPIO 21, ils devraient ressembler à ceci après l'avoir défini sur la sortie, b001.
  • GPSET0 dit au pi d'allumer la broche (sortir une tension). Pour ce faire, il suffit de basculer le bit qui correspond à la broche GPIO que nous voulons. Dans notre cas, le bit 21.
  • GPCLR0 indique au pi de désactiver la broche (pas de tension). Pour désactiver la broche, définissez le bit sur la broche GPIO correspondante. Dans notre cas bit 21

Avant d'arriver à une led clignotante, créons d'abord un programme simple qui allumera simplement la led.

Pour commencer, nous devons ajouter deux directives en haut de notre code source.

  • .section.init indique au pi où mettre le code
  • .global _start

Ensuite, nous devons mettre en page toutes les adresses que nous utiliserons. Utilisez.equ pour affecter des symboles lisibles aux valeurs.

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

Nous allons maintenant créer des masques pour définir les bits que nous devons définir.

  • .equ SET_BIT3, 0x08 Cela définira le bit trois 0000_1000
  • .equ SET_BIT21, 0x200000

Ensuite, nous devons ajouter notre étiquette _start

_début:

Charger l'adresse de base dans le registre

ldr r0, =BASE

Maintenant, nous devons définir le bit3 de GPFSEL2

  • ldr r1, SET_BIT3
  • str r1, [r0, #GPFSEL2] Cette instruction dit de réécrire le bit 0x08 à l'adresse de GPFSEL2

Enfin, nous devons activer GPIO 21 en définissant le bit 21 dans le registre GPSET0

  • ldr r1, =SET_BIT21
  • chaîne r1, [r0, #GPSET0]

Le produit final devrait ressembler au code illustré.

L'étape suivante consiste à compiler le code et à créer un fichier.img que le pi peut exécuter.

  • Téléchargez le makefile ci-joint, et kernel.ld et si vous voulez le code source de turn_led_on.s.
  • Mettez tous les fichiers dans le même dossier.
  • Si vous utilisez votre propre code source, modifiez le makefile et remplacez le code = turn_led_on.s par code =.s
  • Enregistrez le makefile.
  • Utilisez le terminal (linux) ou la fenêtre cmd (windows) pour accéder à votre dossier contenant les fichiers et tapez make et appuyez sur Entrée
  • Le fichier make doit générer un fichier appelé kernel.img
  • Copiez kernel.img sur votre mini carte SD. Le contenu de vos cartes doit être comme illustré (photo 3): bootcode.bin, start.elf, fixup.dat et kernel.img.
  • Éjectez la mini carte SD et insérez-la dans le pi
  • Branchez pi dans la source d'alimentation
  • La LED doit s'allumer !!!

NOTE LÉGÈREMENT IMPORTANTE: Apparemment, instructables avait un problème avec le makefile qui n'avait pas d'extension, donc je l'ai re-téléchargé avec une extension.txt. Veuillez supprimer l'extension lorsque vous la téléchargez pour qu'elle fonctionne correctement.

Conseillé: