Navigation
Internships & Projects
Raspberry Pi
Code Embarqué et Temps Réel
SE et Pilotes
[Protected]
ligne GPIOi_j correspond au numéro NUM = i * 32 + j ainsi GPIO1_6 correspond à 38 = 1 * 32 + 6.
echo NUM > /sys/class/gpio/export
– contrôle de ligne NUM par le GPIO
echo out > /sys/class/gpio/gpioNUM/direction
– activation de la ligne en sortie
echo in > /sys/class/gpio/gpioNUM/direction
– activation de la ligne en entrée
echo 1 > /sys/class/gpio/gpioNUM/value
– mise à 1 de la ligne NUM
echo 0 > /sys/class/gpio/gpioNUM/value
– mise à 0 de la ligne NUM
cat /sys/class/gpio/gpioNUM/value
– lecture de la valeur en entrée de ligne NUM
Si vous disposez des droits suffisants, vous pouvez projeter n'importe quelle partie de l'espace physique d'adressage dans votre adressage virtuel. Vous ne pourrez cependant pas choisir l'adresse virtuelle où sera projeté la mémoire physique. Pour ce faire, il faut utiliser:
/dev/mem
– le device correspondant à la mémoire physique,mmap()
– la fonction Posix permettant l'opération.Il faut d'abord ouvrir le périphérique mémoire :
int fd = open("/dev/mem", O_RDWR|O_SYNC); if (fd < 0){ // erreur! }
Puis, sachant que les registres de notre périphérique sont à l'adresse GPIO_BASE, il faudra réaliser :
gpio_base =(gpio_t *) mmap(NULL, getpagesize(), PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_BASE); if(gpio == (void *) -1) { // erreur! }
Désormais, vous pourrez trouver à l'adresse contenue dans gpio_base
les registres matériels du GPIO visé.
Bien sûr, il faudra déclarer vous-même la structure de donnée gpio_t et trouver dans la documentation l'adresse de base du GPIO qui vous intéresse.
ATTENTION Les adresses de base données à mmap
doivent êtres des multiples de taille de page sous Linux. En l'occurence, la taille de page est ici de 4Ko.