Développement d'un pilote de contrôleur SPI

Créer un pilote de périphérique

En vous inspirant du pilote de GPIO, développez un pilote Linux pour votre IP SPIDevice. Vous pourrez nommer votre pilote simple-spi-driver et le périphérique sera identifié sous le nom simple-spi-device.

Utilisez le même fichier device tree zybo-minimal.dts que vous compléterez.

Créez un nouveau dossier meta-eseo/recipes-kernel/simple-spi-driver qui contiendra la recette pour bitbake, et un sous-dossier files avec les fichiers sources du pilote.

Le pilote fournira les interfaces suivantes :

Interface SysFS IOCTL Direction Registre Bit(s) Rôle
/sys/class/eseo/simple-spi-device/start 0 Écriture 0 0 Affecter la valeur du bit start
/sys/class/eseo/simple-spi-device/select 1, 2 Lecture/écriture 0 1 Accéder à la valeur du bit select
/sys/class/eseo/simple-spi-device/polarity 3, 4 Lecture/écriture 0 2 Accéder à la valeur du bit polarity
/sys/class/eseo/simple-spi-device/phase 5, 6 Lecture/écriture 0 3 Accéder à la valeur du bit phase
/sys/class/eseo/simple-spi-device/done 7 Lecture 0 4 Lire la valeur du bit done
/sys/class/eseo/simple-spi-device/division 8, 9 Lecture/écriture 1 Tous Accéder au facteur de division de fréquence
/sys/class/eseo/simple-spi-device/data 10, 11 Lecture/écriture 2 Tous Accéder à l’octet à envoyer ou reçu

Reconstruire l’image du logiciel embarqué

Dans le fichier build/conf/local.conf, modifiez la variable CORE_IMAGE_EXTRA_INSTALL de la manière suivante :

CORE_IMAGE_EXTRA_INSTALL = "peekpoke simple-io-driver simple-spi-driver"

Reconstruire l’image Linux :

bitbake core-image-minimal

Mettez la carte hors tension et retirez la carte microSD.

Copiez les fichier suivants sur la carte microSD :

Insérez à nouveau la carte microSD dans le lecteur de la carte Zybo et remettez-la sous tension.

Utiliser l’IP depuis le shell

Sur la cible, vérifiez que le module simple-spi-driver est chargé :

lsmod

En utilisant les fichiers de /sys, vérifiez que vous pouvez dialoguer avec votre IP. Par exemple, si votre périphérique SPI est un accéléromètre ADXL345, son registre 0 retourne une valeur prédéfinie égale à 0xe5 :

cd /sys/class/eseo/simple-spi-device

echo 1    > phase
echo 1    > polarity
echo 1000 > division

# -----------------------------------------------------
# Commande de lecture du registre 0 de l'accéléromètre
# -----------------------------------------------------

echo 1    > select

# Read = 1, Multibyte = 0, Reg = 000000
echo 0x80 > data
echo 1    > start

# Doit afficher une valeur non nulle
cat done

# ---------------------------------------------------------
# Récupération de la valeur du registre de l'accéléromètre
# ---------------------------------------------------------

echo 1 > start

# Doit afficher une valeur non nulle
cat done

echo 0 > select

# Doit afficher l'identifiant du périphérique: 0xe5
cat data