Questions sur le guide de développement du système d'exploitation Cambridge University Raspberry Pi


9

Je suis développeur d'applications de haut niveau (C #, python) et j'aimerais me salir les mains avec le développement d'applications embarquées de bas niveau. L'Université de Cambridge a publié une série de didacticiels vous expliquant comment créer un système d'exploitation pour le Raspberry Pi appelé Baking Pi. J'ai l'intention de poster ma question concernant ce tutoriel ici et de mettre à jour les réponses au fur et à mesure. Peut-être même poster quelques points que j'ai compris moi-même.

J'ai donc suivi la leçon 1 et je suis déjà confus. Voici le lien de la page .

La première partie du tutoriel dit que nous devons (je suppose) allumer le contrôleur GPIO en écrivant la valeur 0x20200000 pour enregistrer r0. Je ne peux trouver de telles informations pertinentes nulle part dans la fiche technique. ( lien ). J'ai regardé la section GPIO mais je n'ai vu aucune indication de 16 registres ou r0. Où est cette information?

MISE À JOUR

Tout d'abord, le tutoriel parle d'allumer la LED OK, qui est la LED d'état. Vous vous demandez peut-être où, dans le manuel, est-ce que GPIO 16 est connecté à la LED OK. Ce ne sera pas le cas. Vous devez regarder les schémas de framboise et trouver à quel GPIO le status_led est connecté. Voici le lien les schémas. Page 2, bloc BCM2835.

L'objectif est donc de sélectionner la broche GPIO16. (plus de mises à jour à venir ...)

Réponses:


5

Voici les informations pertinentes dans ce didacticiel:

Les adresses dans les ordinateurs ne sont que des nombres, et le numéro 0x20200000 est donc l'adresse du contrôleur GPIO. Ce n'est qu'une décision de conception prise par les fabricants, ils auraient pu utiliser n'importe quelle autre adresse (à condition qu'elle n'entre en conflit avec rien d'autre). Je ne connais cette adresse que parce que je l'ai recherchée dans un manuel [3] , il n'y a pas de système particulier pour les adresses (à part qu'elles sont toutes de grands nombres ronds en hexadécimal).

r0est simplement une section de mémoire sur le processeur où vous pouvez stocker toutes les informations que vous souhaitez; ce sont les registres à usage général. Nous écrivons l'emplacement du contrôleur GPIO à cet emplacement afin de pouvoir le réutiliser plus tard, comme nous le ferions habituellement en utilisant une variable dans la programmation de haut niveau.

Je pense que la valeur 0x20200000 se réfère en fait au premier emplacement de mémoire dans le tableau de la page 90. Vous remarquerez qu'avant d'écrire dans le registre, nous l'incrémentons de 4, ce qui nous donne Function Select 1(voir tableau) le registre qui contrôle quelques broches , y compris celui sur lequel nous voulons écrire.

Est-ce que cela vous aide?


Ma question est de savoir où dans la fiche technique ces informations se rapportent?
ArmenB

@ArmenB .: Section 6.1, Page 90
Jivings

Le document dit "Le GPIO a 41 registres." où le tutoriel dit 16. Il n'y a aucune indication de registre r0 dans cette section, ni le numéro 0x20200000 pour l'activer.
ArmenB

@ArmenB .: Désolé Armen, je vais entrer dans les détails.
Jivings

3

Merci à Jivings et emcconville d'avoir répondu à la question.

Dans la fiche technique pdf, page 6 section ARM physicall address , il y a une section qui dit

Les adresses physiques vont de 0x20000000 à 0x20FFFFFF pour les périphériques. Les adresses de bus des périphériques sont configurées pour correspondre à la plage d'adresses de bus des périphériques à partir de 0x7E000000. Ainsi, un périphérique annoncé ici à l'adresse de bus 0x7Ennnnnn est disponible à l'adresse physique 0x20nnnnnn.

À la page 90, la première ligne du tableau indique:

0x7E200000 GPFSEL0 GPIO Function Select 0 32 R / W

de sorte que le 0x7E200000 se traduit par l'adresse physique 0x20200000, qui est la fonction GPIO select 0 bit.

Quant à r0, il y a 16 registres à usage général dans l'ARM, que nous pouvons utiliser pour stocker des numéros, et c'est pourquoi dans le tutoriel, il choisit r0 car c'est le premier registre gratuit.


Heureux de vous aider et agréable réponse, cela résume bien les deux autres.
Jivings

Non merci d'avoir pris le temps de répondre. J'ai posté cela en tant que wiki communautaire afin que d'autres puissent modifier / corriger / terminer le post.
ArmenB

1

Le registre à r0travers r12sont à usage général. Naturellement, il est plus facile de commencer r0. Comme l'a souligné Jivings, le manuel répertorie chaque adresse et indique:

Les adresses physiques vont de 0x20000000 à 0x20FFFFFF pour les périphériques.


Je ne peux pas choisir deux bonnes réponses! c'est boiteux. Veuillez corriger ce site Web ... Merci pour votre contribution. J'ai enfin compris le sens de RTFM.
ArmenB
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.