Page 1 sur 1

Quel est l'état des GPIO lorsque le système s'arrête ?

Posté : mer. 20 avr. 2016 15:15
par DrMastock
Bonjour à tous,

Je m'interroge sur l'état des GPIO lors de l'extinction du raspberry. Je voudrais détecter l’arrêt de la carte via une broche GPIO en mode sortie. Je possède un raspberry pi type B (depuis longtemps maintenant) et je l'ai couplé à un montage électronique qui permet d'alimenter le raspberry et un disque dur basse consommation.

Un relais commandé par un circuit logique permet de couper et de remettre l'alimentation pour le démarrage du système. Le circuit détecte à la fois la position d'un interrupteur et l'état de la carte (allumée ou éteinte) via une sortie GPIO.

Seulement voilà, je ne suis pas certain que les sorties GPIO se comportent de la bonne façon lorsque le système s’éteint.

Mon système détecte la position de l'interrupteur via un GPIO en mode entrée et exécute un script en python qui ordonne l'arrêt du système lorsque l'interrupteur est en position off.

J'ai d'abord utilisé la commande shutdown dans mon script mais les GPIO restent actifs après l’arrêt de la carte. J'utilise donc maintenant la commande poweroff qui arrête le système et la carte.

Les GPIO sont donc désactivés après l’extinction (0v en sortie). Sauf que la led d'activité clignote encore quelques fois après la coupure ce qui pour moi indique que le système n'est pas complètement arrêté. J'ai ajouté un petit condensateur qui permet de retarder la détection de coupure du GPIO et donc la coupure de l'alimentation. Ca semble bien fonctionner mais comment être sur que la carte est bien éteinte ? Elle pourrait mettre plus de temps à s'éteindre et se retrouver privée de courant pendant l'extinction.

S'il y a des experts en GPIO dans la salle ou bien si d'autres connaissent un autre moyen de détecter l’arrêt de la carte, merci pour votre aide.

Re: Quel est l'état des GPIO lorsque le système s'arrête ?

Posté : mer. 20 avr. 2016 17:51
par domi
Bonjour,

En branchant une LED sur un GPIO et un écran pour vérifier l'arrêt complet, on constate que les GPIO passent à l'état 0 bien avant que l'OS soit complètement arrêté.
Ce qui est compréhensible puisse qu'il faut que l'OS arrête tout se qui est en court avant de s'arrêter lui même.

Re: Quel est l'état des GPIO lorsque le système s'arrête ?

Posté : jeu. 21 avr. 2016 10:58
par DrMastock
Bonjour,

merci pour votre réponse. J'ai fait le test en branchant un écran et pour ma part l'affichage est arrêté lorsque les GPIO se coupent, ce qui voudrait dire que l'os est arrêté.

Du coup j'ai fait d'autres tests pour bien comprendre le fonctionnement des GPIO.

Dans mon cas, je ne commande pas le passage du GPIO à l'état bas dans mon script d'extinction, c'est un arrêt matériel qui occasionne la mise hors tension des GPIO (poweroff). La commande shutdown qui éteint uniquement l'os laisse les GPiO actifs dans l'état ou ils se trouvaient au moment de l'arrêt.

Lors de l'arrêt matériel, la diode d'activité clignote encore 3 ou 4 fois à intervalles réguliers après l'arrêt des GPIO. Je me demande donc si le fait de couper l'alimentation à ce moment la présente des risques pour la carte ou bien s'il s'agit simplement d'un clignotement indiquant que la carte est arrêtée. Le clignotement ressemble plus à un signal qu'à une réelle activité.

Re: Quel est l'état des GPIO lorsque le système s'arrête ?

Posté : ven. 22 avr. 2016 18:06
par spourre
DrMastock a écrit :Bonjour à tous,

...
Mon système détecte la position de l'interrupteur via un GPIO en mode entrée et exécute un script en python qui ordonne l'arrêt du système lorsque l'interrupteur est en position off.
J'ai d'abord utilisé la commande shutdown dans mon script mais les GPIO restent actifs après l’arrêt de la carte. J'utilise donc maintenant la commande poweroff qui arrête le système et la carte.
Bonjour,

L'éternel problème des états transitoires :(
Le danger réel de la coupure électrique "sauvage" avec un UNIX, c'est la corruption des systèmes de fichiers car ce système, historiquement, pour accélérer l'accès à des HD qui étaient bien plus lents que de nos jours, utilise massivement la RAM comme cache pour les IO.
Un fichier corrompu peut rendre le système instable, voire empêcher son démarrage.
Je vous suggère d'ajouter à votre script, avant la commande poweroff, un passage en mode mono utilisateur (init s à vérifier pour le raspberry) suivi d'une commande formelle de vidage des caches (sync).
L'arrêt sera un peu plus long mais, AMHA, devrait être plus fiable

Sylvain

Re: Quel est l'état des GPIO lorsque le système s'arrête ?

Posté : lun. 25 avr. 2016 16:34
par DrMastock
Merci Sylvain pour ces conseils mais je pensais que la commande poweroff se chargeait d'éteindre proprement le système avant d'éteindre la carte. Pour moi c'est comme un shutdown suivi du extinction matériel. Ça n'est pas le cas ?

Pour moi l'OS est bien arrêté et ne risque plus rien lorsque les GPIO se coupent car c'est la carte qui se met hors tension après l'arrêt du système. Ma question était au niveau de cette mise hors tension de la carte puisque visiblement elle clignote encore un peu après la coupure des GPIO(et ça n'est pas une activité système, la diode d'activité clignote régulièrement 5fois je crois avant de s'éteindre complètement. J'en déduis qu'il y a une phase de mise hors tension qui n'est peut-être pas instantanée et j'ai peur d'endommager la carte (et non l'OS) en coupant le courant pendant cette phase.

Ce clignotement est-il juste un signal pour dire que la carte est bien arrêtée ou bien qu'il se passe encore quelque chose au niveau matériel ? Ou bien je me trompe complètement et le système tourne encore à ce moment là ?

Re: Quel est l'état des GPIO lorsque le système s'arrête ?

Posté : lun. 12 févr. 2018 17:47
par Le Ptit Nicolas
+1 Je me suis posé la même question en voulant déporter la diode d'activité du Pi :o

La solution que j'ai trouvée pour la déporter, c'est de mettre une diode sur le port série, comme expliqué dans ce tuto

Et j'ai remarqué que cette diode sur le port série s'arrête plusieurs secondes avant celle intégrée du Pi et je me demande s'il y a un risque à couper l'alimentation du Pi pendant cette phase...

Re: Quel est l'état des GPIO lorsque le système s'arrête ?

Posté : lun. 12 févr. 2018 19:21
par dyox
Bonjour,
Pour déporter l'activité, il y a un overlay : pi3-act-led
https://github.com/raspberrypi/firmware ... ays/README

Re: Quel est l'état des GPIO lorsque le système s'arrête ?

Posté : mar. 13 févr. 2018 10:02
par Le Ptit Nicolas
dyox a écrit :Bonjour,
Pour déporter l'activité, il y a un overlay : pi3-act-led
https://github.com/raspberrypi/firmware ... ays/README
Excellent, merci pour l'info, je vais tester ça !!! :twisted:

Re: Quel est l'état des GPIO lorsque le système s'arrête ?

Posté : mar. 13 févr. 2018 11:08
par destroyedlolo
Salut,
spourre a écrit : Je vous suggère d'ajouter à votre script, avant la commande poweroff, un passage en mode mono utilisateur (init s à vérifier pour le raspberry) suivi d'une commande formelle de vidage des caches (sync).
L'arrêt sera un peu plus long mais, AMHA, devrait être plus fiable
Je ne sais pas sur Raspbian que je n'utilise pas, mais tous les OS que je connais le font de base : passer en Single User + Sync.
Sous Gentoo, le / est meme repassé en RO avant l'arret effectif pour lancer les dernieres commandes en étant sur qu'il n'y aura plus de modification sur son FS.
Le Ptit Nicolas a écrit :Et j'ai remarqué que cette diode sur le port série s'arrête plusieurs secondes avant celle intégrée du Pi et je me demande s'il y a un risque à couper l'alimentation du Pi pendant cette phase...
C'est étonnant, ca voudrait dire que la console est stoppée "plusieurs secondes" avant l'arret effectif du PI ... ce qui est étonnant vu que du coup, tu n'a aucun moyen de voir les tous derniers messages du PI.
De toutes facons, une fois la SD synchronisé, il n'y a aucune raison qu'un arret brutal casse quoi que ce soit.

Re: Quel est l'état des GPIO lorsque le système s'arrête ?

Posté : lun. 14 mai 2018 14:13
par Le Ptit Nicolas
destroyedlolo a écrit :
mar. 13 févr. 2018 11:08
Le Ptit Nicolas a écrit :Et j'ai remarqué que cette diode sur le port série s'arrête plusieurs secondes avant celle intégrée du Pi et je me demande s'il y a un risque à couper l'alimentation du Pi pendant cette phase...
C'est étonnant, ca voudrait dire que la console est stoppée "plusieurs secondes" avant l'arret effectif du PI ... ce qui est étonnant vu que du coup, tu n'a aucun moyen de voir les tous derniers messages du PI.
De toutes facons, une fois la SD synchronisé, il n'y a aucune raison qu'un arret brutal casse quoi que ce soit.
Merci pour l'info !