Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Ordinateurs embarqués (SBC) > La carte Raspberry PI > Installation et configuration de la R-Pi > Activer l’i2c sur la Raspberry Pi (archlinux, debian...)

Activer l’i2c sur la Raspberry Pi (archlinux, debian...)

mardi 10 juillet 2012, par Laurent Ba.

Les distributions possèdent désormais un i2c fonctionnel.

A ce jour, les modules pour activer l’i2c sur la raspberry pi ne font pas encore partie du kernel officiel.
Mais un cher monsieur, en a fait pour la version 3.21 du noyau. Si vous utilisez debian pas de soucis il suffit d’aller
faire un tour sur son site :
http://www.bootc.net/projects/raspb...

Si vous utilisez un autre os, ou que vous voulez ajouter de nouveaux modules, il vous faudra certainement recompiler tout le noyaux (car vous n’utilisez peut être pas le même cross compilateur que l’auteur).
Je vous déconseille de faire le choix de compiler sur la Rpi (ça serait tres long !) et de bien lire le lien ci-dessus avant quand même. Nous allons donc :

  • Copier le fichier config-3.2.21-rpi+ sous le nom de .config dans le répertoire du noyau.
  • Cross compiler, je vous redonne le liens http://elinux.org/RPi_Kernel_Compilation
    j’ajouterais juste de regarder l’option -j si vous avez un proc avec plusieurs cœur pour compiler plus vite.
    Si vous voulez modifier la config, il vous faudra taper cette commande avant :
    make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- xconfig # ou menuconfig
  • Télécharger et installer le nouveaux firmware (bootloader) si vous ne l’avez pas déjà.
  • Copier le fichier ./bootc-linux-5b0ccb0/arch/arm/boot/Image à la racine du bootloder sous le nom kernel.img
  • Installer les modules :
    make ARCH=arm ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- modules_install INSTALL_MOD_PATH=/tmp/modules
    cp -a /tmp/modules/lib/modules/3.2.21/ /media/(root)/lib/modules/
    mv /media/(root)/lib/modules/3.2.21 /media/(root)/lib/modules/3.2.21+ # pour archlinux en tout cas c'est comme ça

Voici le resultat :

[root@alarmpi ~]# uname -a
Linux alarmpi 3.2.21 #1 Mon Jul 9 02:00:36 CEST 2012 armv6l GNU/Linux
[root@alarmpi ~]# dmesg | grep i2c                                                                                                                                               
[   16.921725] bcm2708_i2c bcm2708_i2c.0: BSC0 Controller at 0x20205000 (irq 79)
[   16.922067] bcm2708_i2c bcm2708_i2c.1: BSC1 Controller at 0x20804000 (irq 79)
[root@alarmpi ~]# modprobe i2c-dev
[root@alarmpi ~]# ls /dev/i2c-*
i2c-0  i2c-1

La doc est dans ./bootc-linux-*/Documentation/i2c/

vous aurez peut-être besoin de i2c-tools, http://www.lm-sensors.org/wiki/I2CTools qui propose en plus de ses outils bien sympa, un binding pour python2 py-smbus.
Il y a un pkgbuild dans AUR pour Archlinux.

[root@alarmpi ~]# i2cdetect -l
i2c-0   i2c             bcm2708_i2c.0                           I2C adapter
i2c-1   i2c             bcm2708_i2c.1                           I2C adapter

Une autre option que j’ai pas testé dans le cas où vous n’avez pas besoin de nouveaux modules c’est
de prendre directement le kernel.img de debian et de lui piquer aussi ses modules.
Ou encore, si vous êtes sous Arch Linux Arm, c’est d’utiliser la methode officiel des mainteneurs et Distcc http://archlinuxarm.org/developers/

Maintenant pour moi, le nouveau problème est de résoudre le fait que la Rpi n’est pas "5v tolerant".

2 solutions :

  • soit faire un petit circuit avec des mosfets ou un CI spécialisé.

Bonne continuation avec l’i2c ;)

Idée de lecture :

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.