Quel est l'état de mise sous tension des GPIO?

35

Quel est l'état des GPIO lorsque l'alimentation est appliquée? Par exemple, Haut, Bas, Hi-Z?

De plus, un système d'exploitation modifie-t-il l'état de tout GPIO lors du chargement? Heureusement non.

John La Rooy
la source
À moins que ce ne soit dans la fiche technique, vous devrez probablement le mesurer pour en être sûr. Linux ne "connaît" pas les GPIO, il ne les modifiera donc pas au démarrage (à moins que vous n'ayez créé un script de démarrage), mais il est toujours possible que la ROM le permette.
Malvineous
@ Malvins, vous avez tort. Linux connaît les GPIO et le support est directement intégré au noyau. Voici de la documentation: kernel.org/doc/Documentation/gpio.txt
Emmaly Wilson
2
@DustyWilson: Désolé si je ne savais pas ce que je voulais dire, je voulais dire que le noyau Linux principal n'utilise pas de GPIO lors du démarrage. Il ne les rend disponibles que pour les utilisateurs et des pilotes particuliers. Ainsi, le noyau en stock ne devrait pas modifier l’état des broches GPIO au démarrage.
Malvineous
@Malvineous: Ah, allez y.
Emmaly Wilson

Réponses:

11

J'ai trouvé la réponse ici grâce à russellstrong . Je cite la partie pertinente ci-dessous

J'ai sauté aux conclusions au sujet de mes résistances de rappel / sensibilité de mon circuit aux résistances de rappel. Le RPi ne configure pas le GPIO en sortie lors du premier démarrage. Il active une résistance de tirage pendant 740 millisecondes.

J'ai utilisé deux résistances de 18K (3v3 -> GPIO -> GND) pour voir exactement ce qui se passe avec les broches. Voici la trace. La ligne bleue correspond à la puissance 3v3, la ligne jaune à la ligne GPIO.

entrez la description de l'image ici

John La Rooy
la source
Pouvez-vous clarifier un peu? Lorsque le Raspberry Pi démarre, le GPIO est réglé sur un état d'entrée haute impédance?
Alex Chamberlain
1
@AlexChamberlain, On dirait que la puce broadcom commence avec des pulldowns, mais le chargeur efface les pulldowns afin qu'ils soient haute impédance (entrées)
John La Rooy
9

Lorsque vous utilisez la distribution Debian recommandée pour RPi, GPIO est désactivé. Vous devez activer chaque broche individuellement.

Si vous le faites via / sys, vous trouverez "Chemins dans Sysfs" intéressant (recherchez dans http://www.kernel.org/doc/Documentation/gpio.txt ). En particulier, vous activeriez une épingle en la "exportant". Toutes les commandes ci-dessous supposent que vous utilisez des privilèges root (sudo ou autre) ou que vous avez modifié les autorisations / la propriété des fichiers virtuels en cours de modification.

echo 4 > /sys/class/gpio/export

Cela active la broche 4 de GPIO, qui fait alors exister / sys / class / gpio / gpio4, qui contient plusieurs fichiers virtuels. Ces fichiers incluent "direction" qui définit s'il s'agit d'une broche d'entrée ou de sortie, "valeur" qui est en lecture seule pour l'entrée ou en écriture pour la sortie et contient la valeur actuelle, entre autres.

echo out > /sys/class/gpio/gpio4/direction # set it as an output pin
echo 1 > /sys/class/gpio/gpio4/value # set the value to ON
echo 0 > /sys/class/gpio/gpio4/value # set the value to OFF
echo in > /sys/class/gpio/gpio4/direction # set it as input
cat /sys/class/gpio/gpio4/value # get the value
echo 4 > /sys/class/gpio/unexport # disables pin 4 and removes the gpio4 directory

Bien sûr, vous préférerez probablement utiliser une bibliothèque préexistante pour faire des GPIO fournis avec ou compatibles avec la langue de votre choix. Mais si vous voulez quelque chose de simple, vous pouvez simplement vous connecter directement à sysfs pour faire du GPIO très basique.

Emmaly Wilson
la source
C'est utile. J'ai regardé la fiche technique mais je n'ai pas trouvé l'état par défaut des broches. Ceci est important si vous contrôlez les choses avec les broches et ne souhaitez pas que les périphériques s’allument pendant le chargement du système d’exploitation.
John La Rooy
3
C'est une excellente réponse, mais je ne suis pas sûr que cela réponde vraiment à la question. Quel est l'état du GPIO juste après son activation? et ensemble de direction?
Alex Chamberlain
@gnibbler: Je crois que vous aurez juste besoin de le tester. J'ai essayé moi-même il y a un peu de temps et je n'ai rien vu d'inattendu en ce qui concerne l'activation ou la désactivation de quelque chose. Je ne sais ni ne promets que mon expérience est celle attendue. Je dirais que vous devriez simplement jeter un multimètre sur les broches que vous voulez tester, puis redémarrer ou remettre sous tension le Pi plusieurs fois pour le tester. Ce que j'ai vu, c'est que toutes les broches étaient éteintes, comme s'il n'y avait aucune alimentation du Pi jusqu'à ce que je permette chaque broche moi-même.
Emmaly Wilson
@DustyWilson, ils sont peut-être configurés en tant qu'entrées sans pull up ou pull down. Cela signifie qu'elles flottent effectivement si elles sont connectées à un FET et qu'elles provoqueraient un comportement aléatoire si une résistance de montée / descente n'est pas ajoutée à la grille.
John La Rooy
en effet ... cat /sys/class/gpio/gpio4/directiondit "dans". J'ai lu dans la fiche technique qu'il n'est pas possible de lire l'état des pullups / pulldowns. Je vais essayer de les mesurer
John La Rooy