Introduction: Activer SPI Sur BeagleBone Black

Picture of Activer SPI Sur BeagleBone Black

Pour mon premier Instructable, je vais vous expliquer comment activer le SPI (Serial Peripherial Interface) sur la carte de développement Beaglbone Black. L'activation de cette fonctionnalité permet une communication fiable avec plusieurs équipements placés en parallèle tels que des mémoires, écran LCD ou encore des modules RF.

Prérequis:

La distribution Angstrom s'étant révélée dans mon cas instable sur le long terme avec des problèmes de connexion en SSH il faut lui préférer Debian pour BeagleBone Black installé sur micro SD (non pas sur l'EMMC car il entre directement en conflit avec le SPI !)

Step 1: Désactivation De L'HDMI Et De L'EMMC

Picture of  Désactivation De L'HDMI Et De L'EMMC

Il faut premier lieu désactiver le HDMI et EMMC car ils entrent en conflit avec les pins du SPI il faut donc les désactiver avec la procédure suivante :

Entrez la commande : $ cat /sys/devices/bone_capemgr.*/slots

Cela permet de consulter la liste de capes présents sur la carte Vous obtenez :

0: 54:PF---
1: 55:PF---
2: 56:PF---
3: 57:PF---
4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
5: ff:P-O-L Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
6: ff:P-O-L Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN

Le « L » comme Loaded signifie que les capes sont activés, il faut donc les désactiver.

Entrer les commandes :

$ mkdir /mnt/boot
$ mount /dev/mmcblk0p1 /mnt/card
$ nano /mnt/card/uEnv.txt

Puis dé-commenter cette ligne en enlevant le dièse :

#cape_disable=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN,BB- BONE-EMMC-2G

Attention: la modification du fichier uEnv est très délicate, si elle est mal réalisée la Beaglebone ne bootera plus sur la carte SD vous obligeant à la réinstaller, pensez donc à sauvegarder votre travail avant cette opération !

Une fois modifié Ctrl-X, Y pour sauvegarder.

Puis redémarrez la carte :

$ reboot

Après le redémarrage vous obtiendrez :

0: 54:PF---
1: 55:PF---
2: 56:PF---
3: 57:PF---
4: ff:P-O-- Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
5: ff:P-O-- Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
6: ff:P-O-- Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN

Le « L » est enlevé, les capes sont désactivés.

Step 2: Mettre En Place Le DTO (Device Tree Overlay)

Picture of Mettre En Place Le DTO (Device Tree Overlay)

Avant d’activer le cape il faut le créer en déclarant son device tree overlay, cela équivaut à attribuer les pins au cape.

Nous activons ici le SPI0 (voir Image pour la disposition des Pins)

Entez les commandes : $ nano BB-SPI0-01-00A0.dts

Dans le fichier coller le texte suivant :

/dts-v1/;
/plugin/;

/ {
compatible = "ti,beaglebone", "ti,beaglebone-black";

/* identification */
part-number = "spi0pinmux";
fragment@0 {
target = <&am33xx_pinmux>;
__overlay__ {
spi0_pins_s0: spi0_pins_s0 {
pinctrl-single,pins = <
0x150 0x30 /* spi0_sclk, OUTPUT_PULLUP | MODE0 */
0x154 0x30 /* spi0_d0, INPUT_PULLUP | MODE0 */
0x158 0x10 /* spi0_d1, OUTPUT_PULLUP | MODE0 */
0x15c 0x10 /* spi0_cs0, OUTPUT_PULLUP | MODE0 */
>;
};
};
};

fragment@1 {
target = <&spi0>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins_s0>;

spidev@0 {
spi-max-frequency = <24000000>;
reg = <0>;
compatible = "linux,spidev";
};
};
};
};

Puis Ctrl-X, Y.

Compiler avec : $ dtc -O dtb -o BB-SPI0-01-00A0.dtbo -b 0 -@ BB-SPI0-01-00A0.dts

Copier dans le répertoire: $ cp BB-SPI0-01-00A0.dtbo /lib/firmware/

Activer dans la liste des capes : $ echo BB-SPI0-01 > /sys/devices/bone_capemgr.*/slots

Vous obtenez :

0: 54:PF---
1: 55:PF---
2: 56:PF---
3: 57:PF---
4: ff:P-O-- Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
5: ff:P-O-- Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
6: ff:P-O-- Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN
7: ff:P-O-L Override Board Name,00A0,Override Manuf,BB-SPI0-01

Step 3: Activer Le Cape

Au prochain redémarrage le cape nouvellement ajouté disparaitra si il n’est pas chargé au
boot !

Il faut donc l’activer dans le ficher suivant avant de redémarrer la carte: $ nano /etc/default/capemgr

Ecrire la ligne suivante dans le fichier : CAPE=BB-SPI0-01

Astuce : si l’on a plusieurs cape à activer rédiger la ligne comme ceci : CAPE=cape1, cape2

Pour finir redémarrez la carte : $ reboot

Afin de savoir si l’opération s’est bien passée entrez la commande suivante au redémarrage : $ ls -al /dev/spidev

Cette ligne devrait apparaitre : crw-rw---T 1 root spi 153, 0 MAY 19 21:07 /dev/spidev1.0

Step 4: Exemple De Cycle

Picture of Exemple De Cycle

Attention : cet exemple de signal n’est pas issu de la Beaglebone. Au cours de nos mesures
avec l’oscilloscope nous nous sommes rendu compte que la forme des signaux MOSI n’étaient pas réguliers cela étant dû à une trop faible résistance de tirage intégrés aux GPIO de la Beaglebone (Voir résultats attendus et réels)

Step 5: Programme De Test

Afin de tester si le SPI fonctionne correctement sur la BeagleBone téléchargez le programme en langage C disponible à l’adresse ci-dessous : https://www.kernel.org/doc/Documentation/spi/spid...

en remplaçant la ligne de code : static const char *device = "/dev/spidev1.1";
par: static const char *device = "/dev/spidev1.0";

car le SPI activé est le SPI 0 et non le SPI 1 Puis compiler avec la commande: $ gcc spidev_test.c

Pour tester le programme il faut relier MOSI et MISO par un câble et exécuter la commande suivante :

$ ./spidev_test -D /dev/spidev1.0

Si le programme fonctionne vous obtiendrez ceci :

spi mode: 0
bits per word: 8
max speed: 500000 Hz (500 KHz)
FF FF FF FF FF FF
40 00 00 00 00 95
FF FF FF FF FF FF
FF FF FF FF FF FF
FF FF FF FF FF FF
DE AD BE EF BA AD
F0 0D

(S’il ne fonctionne pas vous n’obtiendrez que des FF)

En espérant vous avoir aidé, si vous avez des questions n'hésitez pas ! (ça m'a pris près de 20h à trouver la solution la première fois :) )

Comments

DIY Hacks and How Tos (author)2015-12-25

Great BeagleBone tutorial

Thank you very much !

About This Instructable

991views

6favorites

License:

More by Mickey4D:Extension mémoire pour BeagleBone BlackActiver SPI sur BeagleBone Black
Add instructable to: