L'histoire de l'installation de raspi-config sur Ubuntu 18.04 et de la modification des paramètres initiaux de GPIO

introduction

Le contenu de l'article de M. Kuwano dans "Chapitre 4 Essayer de déplacer un circuit externe par entrée de commande" dans "** E / S d'ordinateur Easy ARM avec Raspberry Pie **" (Interface Special Edition 2013 CQ Publisher) A l'automne 2020, j'ai confirmé l'opération sur Ubuntu 18.04 [^ 1]. Le contenu de l'article est très facile à comprendre et l'explication est polie et facile à comprendre, mais comme il est basé sur l'utilisation de raspbian dans l'article au moment de 2013, le travail de désactivation du paramètre SPI sur GPIO pour fonctionner sur Ubuntu En outre, certaines des conceptions de circuits introduites doivent être modifiées et j'écrirai un mémo du contenu du travail et des modifications dans un article pour organiser ma compréhension. [^ 1]: Personnellement, je prévois d'apprendre ROS à l'avenir, donc c'est un travail qui a eu lieu après avoir choisi ubuntu comme système d'exploitation, ce qui facilite l'installation de ROS, donc bien sûr, raspbian Si c'est , même dans la dernière version, raspi-config est dans le réglage initial, donc il n'y a pas de travail à faire pour l'utiliser.

Environnement d'expérimentation

Circuit pour test GPIO

Vous trouverez ci-dessous un lien vers le schéma du circuit de référence [^ 2] et une photo de l'appareil réellement réalisé [^ 3]. --UNE CARTE DE TEST DE LED À 7 CHIFFRES "Schéma de circuit" 実際に作ったもの [^ 2]: Le circuit de l'appareil réellement réalisé est "[Programmation du pilote de périphérique ARM apprise avec Raspberry Pi](https://www.socym.co.jp/support/s-940" Satoshi Yoneda 2014 Sosim "" ) »(Satoshi Yoneda 2014 Sosim) Il s'agit d'une conception légèrement modifiée utilisant la LED à 7 segments et 74HC4511 à la page 47. Les points de correction sont que la borne DP est directement connectée à GPIO11 via une résistance (510Ω) pour le contrôle, et une résistance de rappel de 10k ohms est utilisée comme indiqué dans le circuit «E / S de tarte aux framboises». Le seul point est que nous avons ajouté deux interrupteurs poussoirs. La connexion à GPIO pour le contrôle des commutateurs utilise «GPIO2» et «GPIO3» de «J8 GPIO». [^ 3]: À l'exception du circuit intégré et de la carte universelle, la plupart des déchets que j'avais à la maison sont réutilisés, et parce que j'ai fait une erreur dans le câblage et mis et éteint le câblage plusieurs fois, le câblage et la fabrication sont compliqués, mais pour le moment Fonctionne comme indiqué.

Travail de confirmation

Premièrement, l'interface GPIO dans le répertoire / sys existe déjà avec les paramètres par défaut.

~$ ls -l /sys/class/gpio/
total 0
--w------- 1 root root 4096 Jan  1  1970 export
lrwxrwxrwx 1 root root    0 Jan  1  1970 gpiochip0 ->
../../devices/platform/soc/3f200000.gpio/gpio/gpiochip0
lrwxrwxrwx 1 root root    0 Jan  1  1970 gpiochip504 -> ../../devices/platform/soc/soc:firmware/soc:firmware:expgpio/gpio/gpiochip504
--w------- 1 root root 4096 Jan  1  1970 unexport

Mais quand j'essaye de créer un lien symbolique pour une broche GPIO7, je suis grondé comme" le périphérique ou la ressource est occupé et une erreur d'écriture d'écho ".

~$ sudo -s
~# echo 7 >/sys/class/gpio/export
bash: echo: write error: Device or resource busy

Par défaut, les broches GPIO7 et GPIO8 étaient définies pour SPI [^ 4].

~# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-53, parent: platform/3f200000.gpio, pinctrl-bcm2835:
gpio-7   (                    |spi0 CS1            ) out hi ACTIVE LOW
gpio-8   (                    |spi0 CS0            ) out hi ACTIVE LOW
gpio-29  (                    |led0                ) out lo 
~# exit

[^ 4]: Comme vous pouvez le voir sur l'image de l'appareil ci-dessus, le nombre «3» s'affiche automatiquement à la mise sous tension. «3» est affiché dans «74HC3411» car «GPIO7» et «GPIO8» sont «H» dans le schéma de circuit, ainsi SPI peut être utilisé par défaut lorsque le circuit est connecté à GPIO. Vous pouvez imaginer que c'est le cas, mais c'est très pratique si vous pouvez le vérifier avec une commande.

Installez raspi-config

J'ai utilisé raspi-config pour définir la fonction GPIO. Bien qu'il s'agisse d'un outil de changement de paramètre dédié à raspbian, il a été introduit qu'il fonctionne avec l'URL suivante même dans ubuntu, j'ai donc travaillé selon la procédure introduite.

sudo echo "deb http://archive.raspberrypi.org/debian/ jessie main" >> /etc/apt/sources.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 7FA3303E
sudo apt-get update
sudo apt-get install raspi-config
sudo mount /dev/mmcblk0p1 /boot

Vous pouvez maintenant lancer normalement l'écran de menu de l'interface graphique raspi-config.

~$ sudo rapsi-config

Depuis l'écran du menu supérieur de rapsi-config, sélectionnez "** 5 Options d'interfaçage Configurer les connexions aux périphériques "> " P4 SPI Activer / Désactiver le chargement automatique du module noyau SPI ". Après cela, si vous sélectionnez " Non " dans " Voulez-vous que l'interface SPI soit activée? ", le message " L'interface SPI est désactivée " s'affichera sous la forme " Ok ". Appuyez sur "" pour revenir à l'écran supérieur, alors enregistrez simplement vos modifications avec " Terminer **" à la fin.

~$ sudo reboot -h now

Après le redémarrage pour charger les modifications de configuration, vérifiez à nouveau l'état de la configuration GPIO.

~# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 0-53, parent: platform/3f200000.gpio, pinctrl-bcm2835:
gpio-29  (                    |led0                ) out lo
gpiochip1: GPIOs 504-511, parent: platform/soc:firmware:expgpio, raspberrypi-exp-gpio, can sleep:
gpio-506 (                    |led1                ) out lo ACTIVE LOW 

Si GPIO7 et 8 disparaissent de la liste, vous réussissez. Si cela ne fonctionne pas, il est possible que les modifications de raspi-config n'aient pas été enregistrées.

référence

Le but de ce travail est de créer un environnement d'exécution pour les tests de circuits de périphériques d'apprentissage de pilotes de périphériques GPIO. En d'autres termes, la vérification finale consistait à exécuter le code de script shell suivant et à vérifier les erreurs de câblage sur le circuit.

Aucune erreur ne s'est produite sur la ligne de commande, et même dans le test de la machine réelle, le nombre de 0 à 9 était affiché sur la LED à 7 segments après que le point ait clignoté deux fois, et le point a clignoté deux fois avant de se terminer.

Lorsque le bouton-poussoir est ouvert, «1» s'affiche sur l'écran de la console et lorsque le bouton est enfoncé, «0» s'affiche.

Le placement des numéros GPIO a légèrement changé depuis l'époque de "I / O with Raspberry Pie". Dans ce circuit expérimental, les positions physiques des broches de l'interrupteur à poussoir sont les mêmes que les numéros conventionnels 3 et 5, de sorte que le numéro GPIO est changé de la combinaison de "" 0 "et" 1 "" à "" 2 "". Il est changé par programme en la combinaison de "3" ".

gpio_sh


echo gpio export pin seting ...
echo 2 > /sys/class/gpio/export
echo 3 > /sys/class/gpio/export
echo 7 > /sys/class/gpio/export
echo 8 > /sys/class/gpio/export
echo 9 > /sys/class/gpio/export
echo 10 > /sys/class/gpio/export
echo 11 > /sys/class/gpio/export
echo gpio pin direction seting ...
echo in > /sys/class/gpio/gpio2/direction
echo in > /sys/class/gpio/gpio3/direction
echo out > /sys/class/gpio/gpio7/direction
echo out > /sys/class/gpio/gpio8/direction
echo out > /sys/class/gpio/gpio9/direction
echo out > /sys/class/gpio/gpio10/direction
echo out > /sys/class/gpio/gpio11/direction
echo gpio test start...
echo 1 > /sys/class/gpio/gpio7/value
echo 1 > /sys/class/gpio/gpio8/value
echo 0 > /sys/class/gpio/gpio9/value
echo 1 > /sys/class/gpio/gpio10/value
echo 1 > /sys/class/gpio/gpio11/value
echo 1 > /sys/class/gpio/gpio11/value
sleep 1
echo 0 > /sys/class/gpio/gpio11/value
sleep 1
echo 1 > /sys/class/gpio/gpio11/value
sleep 1
echo 0 > /sys/class/gpio/gpio11/value
sleep 1
echo 0 > /sys/class/gpio/gpio7/value
echo 0 > /sys/class/gpio/gpio8/value
echo 0 > /sys/class/gpio/gpio9/value
echo 0 > /sys/class/gpio/gpio10/value
echo 0
sleep 1
echo 1 > /sys/class/gpio/gpio7/value
echo 0 > /sys/class/gpio/gpio8/value
echo 0 > /sys/class/gpio/gpio9/value
echo 0 > /sys/class/gpio/gpio10/value
echo 1
sleep 1
echo 0 > /sys/class/gpio/gpio7/value
echo 1 > /sys/class/gpio/gpio8/value
echo 0 > /sys/class/gpio/gpio9/value
echo 0 > /sys/class/gpio/gpio10/value
echo 2
sleep 1
echo 1 > /sys/class/gpio/gpio7/value
echo 1 > /sys/class/gpio/gpio8/value
echo 0 > /sys/class/gpio/gpio9/value
echo 0 > /sys/class/gpio/gpio10/value
echo 3
sleep 1
echo 0 > /sys/class/gpio/gpio7/value
echo 0 > /sys/class/gpio/gpio8/value
echo 1 > /sys/class/gpio/gpio9/value
echo 0 > /sys/class/gpio/gpio10/value
echo 4
sleep 1
echo 1 > /sys/class/gpio/gpio7/value
echo 0 > /sys/class/gpio/gpio8/value
echo 1 > /sys/class/gpio/gpio9/value
echo 0 > /sys/class/gpio/gpio10/value
echo 5
sleep 1
echo 0 > /sys/class/gpio/gpio7/value
echo 1 > /sys/class/gpio/gpio8/value
echo 1 > /sys/class/gpio/gpio9/value
echo 0 > /sys/class/gpio/gpio10/value
echo 6
sleep 1
echo 1 > /sys/class/gpio/gpio7/value
echo 1 > /sys/class/gpio/gpio8/value
echo 1 > /sys/class/gpio/gpio9/value
echo 0 > /sys/class/gpio/gpio10/value
echo 7
sleep 1
echo 0 > /sys/class/gpio/gpio7/value
echo 0 > /sys/class/gpio/gpio8/value
echo 0 > /sys/class/gpio/gpio9/value
echo 1 > /sys/class/gpio/gpio10/value
echo 8
sleep 1
echo 1 > /sys/class/gpio/gpio7/value
echo 0 > /sys/class/gpio/gpio8/value
echo 0 > /sys/class/gpio/gpio9/value
echo 1 > /sys/class/gpio/gpio10/value
echo 9
sleep 1
echo 0 > /sys/class/gpio/gpio7/value
echo 1 > /sys/class/gpio/gpio8/value
echo 0 > /sys/class/gpio/gpio9/value
echo 1 > /sys/class/gpio/gpio10/value
echo 1 > /sys/class/gpio/gpio11/value
echo dot
sleep 1
echo 0 > /sys/class/gpio/gpio11/value
sleep 1
echo 1 > /sys/class/gpio/gpio11/value
sleep 1
echo 0 > /sys/class/gpio/gpio11/value
sleep 1
echo 1 > /sys/class/gpio/gpio11/value
cat /sys/class/gpio/gpio2/value
cat /sys/class/gpio/gpio3/value
echo test exiting...
echo 2 > /sys/class/gpio/unexport
echo 3 > /sys/class/gpio/unexport
echo 7 > /sys/class/gpio/unexport
echo 8 > /sys/class/gpio/unexport
echo 9 > /sys/class/gpio/unexport
echo 10 > /sys/class/gpio/unexport
echo 11 > /sys/class/gpio/unexport
echo end

en conclusion

En préparation de l'expérience de création de pilote de périphérique, nous avons introduit raspi-config pour vérifier l'opération aussi simple que possible. Dans le fichier / sys / kernel / debug / gpio, gpiochip0: GPIOs 0-53, parent: platform / 3f200000.gpio, pinctrl-bcm2835 est écrit et l'adresse SOC GPIO est de 3f200000. Sachant que cela est également mentionné ici, c'est une expérience simple, mais Linux est devenu encore plus familier.

Ensuite, je voudrais expérimenter comment utiliser le pilote de périphérique GPIO en langage C et comment accéder directement au registre.

Recommended Posts

L'histoire de l'installation de raspi-config sur Ubuntu 18.04 et de la modification des paramètres initiaux de GPIO
Installez la dernière version de Jenkins sur Ubuntu 16
[Ubuntu 20.04] Afficher le jour à la date / horloge
20190803_Java & k8s sur Azure L'histoire d'aller au festival
Installez docker et docker-compose sur ubuntu dans les plus brefs délais
Une histoire sur la lutte contre les erreurs Ubuntu 0x80370114 et 0x80000000 pour activer Docker Desktop avec WSL2 dans Windows10 Home
Paramètres initiaux d'Ubuntu (style Mac)
Installation d'OpenMX sur Ubuntu 18.04.5 LTS
Comment installer et configurer l'outil de surveillance "Graphite" sur Ubuntu
Installez Ubuntu20.04 sur RaspberryPi 4 et compilez Kubernetes pour exécuter le conteneur
Une histoire de mettre ubuntu dans le disque dur par ignorance complète et de faire yolov3
Obtenez l'accélération et l'orientation du système de coordonnées mondial sur Android
Lancement de l'application No Todo au lieu de Todo. .. (Et notes faîtières)