Title

Autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et dolore feugait

Comment activer le bus i2c du Raspberry-pi 4

J’ai récemment réalisé le Proof of Concept de projet d’un client utilisant Linux embarqué. Dans ce cadre, j’ai utilisé le bus I2C de mon nouveau Raspberry-Pi 4. Malheureusement le bus i2c n’était pas fonctionnel par défaut. Voici comment l’activer et l’utiliser avec Buildroot, la procédure est très similaire sous Raspbian :

Raspberry Pi i2c
Un Raspberri-Pi 4 avec un device connecté sur son bus i2c-1

Configurer le firmware du Raspberry-Pi 4 pour activer le bus i2c

Par défaut tous les bus non indispensables (i2c, SPI, etc) sont désactivés sur le Raspberry-Pi. Il faut donc commencer par configurer son firmware pour qu’il active le bus i2c-1 via le fichier config.txt

Ce fichier est présent sur la partition de boot de la carte SD, mais le plus efficace reste de l’activer directement dans le package rpi-firmware dans buildroot. Pour cela, éditez le fichier package/rpi-firmware/config.txt depuis le dossier de sources de Buildroot et ajoutez-y cette ligne.

dtparam=i2c1=on

Sur Raspbian, vous trouverez ce fichier directement dans /boot/config.txt. Vous pouvez simplement faire la modification, redémarrer puis passer à l’étape suivante.

Le fichier config.txt est l’équivalent du BIOS sur un PC. Il vous permet de configurer le système.

Maintenant il vous faut recompiler le package rpi-firmware :

make rpi-firmware-rebuild

Puis, vous devez générer votre l’image de la carte Micro-SD du Raspberry-pi :

make

Flashez le firmware sur la carte et démarrez le Raspberry-pi 4

Ajouter manuellement les modules manquants pour le activer le bus i2c du Raspberry-pi

Le Processeur du Raspberry-Pi 4 est un Broadcom 2711, il réutilise un certain nombre de modules qui étaient déjà présents dans des versions plus anciennes du SoC (Système on Chip, processeur multifonctions), dont le bcm2835. Pour cette raison vous pouvez charger les modules suivants. Par défaut les modules nécessaires sont présents sur le système donc il ne reste plus qu’à les démarrer manuellement:

modprobe i2c-bcm2835
modprobe i2c-dev
[   37.740438] i2c /dev entries driver

Maintenant, vous devriez trouver le bus i2c-1 dans /dev :

 ls -la /dev/i2c-1 
crw-------    1 root     root       89,   1 Jan 18 15:19 /dev/i2c-1

Le bus i2c-1 est maintenant utilisable, il dispose des fonctions nécessaires pour utiliser vos périphériques I2C, mais également pour SMBus (l’ancêtre d’i2C):

# i2cdetect -F 1
Functionalities implemented by bus #1
I2C                              yes
SMBus quick command              yes
SMBus send byte                  yes
SMBus receive byte               yes
SMBus write byte                 yes
SMBus read byte                  yes
SMBus write word                 yes
SMBus read word                  yes
SMBus process call               yes
SMBus block write                yes
SMBus block read                 no
SMBus block process call         no
SMBus PEC                        yes
I2C block write                  yes
I2C block read                   yes

Julien Grossholtz

Expert en logiciel embarqué, j'accompagne les entreprises dans la création de leurs objets intelligents et leurs IoT.

1 comment so far

Utilisez le MPU6050 sur Raspberry-Pi – OpenestPosted on 11:08 - Jan 21, 2020

[…] de l’étudier. Pour cela j’ai obtenu sa Register map, je l’ai connecté sur le bus i2c-1 de mon Raspberry-pi et j’ai joué avec i2cget & […]

Leave a Reply