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 |
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 :
build/tmp/deploy/images/zybo-zynq7/uImage
build/tmp/deploy/images/zybo-zynq7/zybo-minimal.dtb
build/tmp/deploy/images/zybo-zynq7/core-image-minimal-zybo-zynq7.cpio.gz.u-boot
Insérez à nouveau la carte microSD dans le lecteur de la carte Zybo et remettez-la sous tension.
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