Pourquoi certaines broches GPIO sont-elles ÉLEVÉES lorsque le Raspberry Pi démarre?


18

J'ai un circuit facile câblé, avec une LED connectée à la broche 18 sur la référence BOARD. J'exécute un programme simple pour mettre la broche 18 sur HIGH, ce qui allume la LED, puis quelques secondes plus tard, je mets la broche 18 sur LOW, et enfin je termine mon programme avec GPIO.cleanup ().

À ce stade, la LED est éteinte, ce qui signifie que la broche 18 est éteinte (LOW). Maintenant, je redémarre ou redémarre mon Raspberry Pi, et lorsqu'il redémarre, le voyant de la broche 18 s'allume à nouveau, même si la broche était éteinte avant de redémarrer le Raspberry Pi.

Pourquoi cela peut-il arriver? Comment puis-je configurer une broche spécifique, comme la broche 18, pour qu'elle soit désactivée lorsque le Raspberry Pi démarre? Et je ne veux pas que les broches GPIO soient sur HIGH lorsque le Raspberry Pi démarre.

Je suis préoccupé par ce problème, parce que disons que la broche 18 est connectée à un moteur à courant continu sur un robot, et lorsque le Raspberry Pi démarre, le moteur s'allume, et ce n'est pas quelque chose que je veux car cela interfère avec toute la structure du robot, et certains moteurs peuvent démarrer et d'autres pas, selon les broches auxquelles ils sont connectés. Je veux allumer manuellement tous les moteurs de manière synchronisée.

Une autre chose est que toutes les broches n'ont pas ce problème. Certains restent éteints lorsque le Raspberry Pi démarre, mais d'autres non.


Cette LED est-elle allumée aussi brillamment qu'elle le serait lorsque vous la placez haut, ou est-ce qu'elle brille juste faiblement?
goldilocks

Il y a 3,3 volts qui lui sont appliqués.
Viktor Raspberry

Donc, si vous entrez /sys/class/gpioet exportez la broche 18, dans quel état le système dit-il qu'il est si vous ne changez rien?
goldilocks

Quand j'écris "/ sys / class / gpio", il dit "-bash: / sys / class / gpio: Is a directory". Je ne sais pas comment exporter une broche spécifique.
Viktor Raspberry

Il y a des tas d' explications à cela , donc je ne vais pas prendre la peine de régurgiter. Cet exemple est un peu lourd sur le echo, qui écrit, c'est-à-dire, définit quelque chose. Après l'avoir exporté, vous voulez vous en abstenir et utiliser simplement cat, qui lit, pour vérifier la direction et la valeur.
goldilocks

Réponses:


25

A la mise sous tension, les GPIO sont tirés haut ou bas à travers les résistances internes. Que la traction soit élevée ou faible pour un GPIO particulier est détaillée à la page 102 des périphériques ARM BCM2835 .

Lorsque le noyau Linux est démarré et si l'arborescence des périphériques est activée (probable), il reconfigure les GPIO en fonction des paramètres de l'arborescence des périphériques. Les modules chargés à partir de /etc/modulespeuvent également mettre à jour l'état GPIO.

Tout autre logiciel que vous utilisez au démarrage pourrait potentiellement reconfigurer les GPIO après les paramètres de l'arborescence des périphériques et les charges de module.

Il est plus sûr de trouver une solution matérielle si vous avez du matériel qui pourrait être déclenché de manière incorrecte au démarrage du système.



2

Je sais qu'il est assez tard. Répondre. Vous pouvez écrire un script python ou un script bash qui définit manuellement le code PIN sur low et planifie l'exécution d'une tâche cron à chaque démarrage. Vous n'aurez pas besoin de modifier les fichiers système / critiques. En dehors de cron

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.