Gyroscope ADXRS453 sur raspberry Pi via SPI

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Salut à tous,

Je souhaite faire marcher un Gyroscope ADXRS453 sur une raspberry Pi 2B en SPI

Comme le meilleur code est celui qu'on n'écrit pas, je voulais essayer d'utiliser le module correspondant du noyau linux pour le gérer le gyro. Le code du driver est là : https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/iio/gyro/adxrs450.c?id=HEAD

Avec la dernière iso raspbian lite (une fois le SPI activé via raspi-config), le module n'est pas dispo par défaut =(.

Je récupère donc le dernier noyau pour la pi ici on récupère le .config sur l'iso de la pi, on active le module puis on recompile. Installation du noyau et des modules, reboot, tout va bien.

sudo modprobe adxrs450 charge bien le module (lsmod me donne bien le module chargé) mais je n'ai aucun message (ni via dmesg, ou dans /var/log/syslog ou encore dans /var/log/messages) et rien n’apparaît dans /dev ou dans dans /sys.

J'ai rajouté des printk dans la fonction probe du module, recompilé, réinstallé, mais ces derniers n'apparaissent nul part même en ayant augmenté les logs du noyau (dmesg -n 7). Je sais pas pourquoi

Cette page est ma principale source d'information. En lisant ceci j'ai l'impression que le code montré doit aller dans arch/arm/mach-bcm2708/bcm2708.c (truc de la Pi 2) mais sans garantie.

En discutant avec un ami, il a émis l'idée qu'il faut/qu'on peut passer par un device tree pour signifier à la carte que le gyro est présent en SPI, mais aucune de comment faire ceci (s'il le faut). La page officielle ne m'aide pas trop…

Bref, je suis un peu perdu avec ce gyro. Si quelqu'un s'y connaît un peu et veut partager son expérience, je suis preneur !

Merci.

Édité par Davidbrcz

+0 -0

Bienvenue dans le monde merveilleux de l'embarqué et du noyau. Bon, en fait ce que tu as fait ne fonctionne pas pour une bonne raison, le bus SPI n'est pas un bus qui fait de l'énumération. En gros, tu n'as pas moyen de connaître automatiquement quels modules sont présents physiquement sur le bus et de fait quels modules charger et comment.

Typiquement, ton modprobe manuel ne renseigne ni le bus SPI utilisé (le Raspberry a probablement plusieurs bus SPI disponibles), ni à quelle adresse du dit bus il se trouve. Et comment configurer aussi le bus SPI (par exemple sa vitesse de fonctionnement).

Pour faire cela, tu as deux méthodes, soit tu renseignes la structure et tu l'initialises dans le fichier arch/arm/mach-bcm2708/bcm2708.c comme tu l'as indiqué. Soit tu passe par le device tree de ta carte. Il faudrait retrouver celle de ta carte pour y faire l'ajout (dans le dossier arch/arm/boot/dts/).

Ces deux méthodes sont strictement équivalentes, l'avantage des device tree est d'être normalisé (et donc exploitable potentiellement par plusieurs OS), plus moderne et de limiter la redondance et le code pour faire la même chose. Bref, choisis ce qui est le plus simple pour toi.

Le soucis est que ton composant ne semble pas créer un fichier ou tout autre méthode de communication dédié. Il faudra donc à un moment trouver une solution pour communiquer avec ton pilote pour récupérer les informations. Il faudra probablement que tu passes par le fichier générique du bus SPI de ta carte.

Amateur de Logiciel Libre et de la distribution GNU/Linux Fedora.

+1 -0
Auteur du sujet

Ok, merci de la réponse et des explications.

Tu as des ressources sur comment construire ce device tree ? Car pour le moment ca semble assez magique…

Pour la com avec le driver, je sais même pas ce que je vois regarder sur la page =/

+0 -0

Pour la communication, regarde le code de l'espace utilisateur. Il faudra t'en inspirer.

Tu ne dois pas construire le device tree toi même, tu dois utiliser celle de ta plateforme si elle existe (je pense que d'en créer une de zéro sera inutilement complexe).

Pour ton noyau, le device tree correspondant existe.

Ensuite pour la configuration, je t'invite à lire la documentation suivante du noyau : Documentation/devicetree/bindings/spi/spi-bus.txt

Tu verras comment ajouter au nœud spidev0 ou spidev1 un nœud pour décrire ton périphérique et du coup le noyau à charger. C'est assez simple sans devoir comprendre les subtilités des device tree.

Fais bien attention à l'adresse physique de ton composant (et sur quel bus il est situé), au nom du pilote associé et à bien le charger. Il est possible que par défaut le noyau que tu utilises ne charges pas de device tree pour s'initialiser, pense à lui préciser lequel employer.

Amateur de Logiciel Libre et de la distribution GNU/Linux Fedora.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte