Master SIAME | Université Toulouse 3

Internet of things and System on Chip

Master SIAME | Université Toulouse 3

Internet of things and System on Chip

User Tools


GPIO

Pilotage par le système de fichier

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

Pilotage en C par projection en mémoire

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.

References