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 :

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
Bonjour
Je viens d’installer une carte hat (SUSVD) sur un raspi pi4 qui communique par le bus i2c (carte hat gestion alimentation + shut off si perte de courant + chargement Lipo + horloge)
J’ai installer le paquet fourni par le constructeur et j’ai bien accès au deux adresses (horloge et fonctionnalités du SUSVD) en faisant sudo i2cdetect -y 1
Par acquis de conscience j’ai été aussi dans raspi-config….et j’ai activé le bus i2c…..
L’activation telle que présenté ici ne fait elle pas doublon ?
Bonjour,
Je ne suis pas certain, mais oui, je pense que raspi-config active le bus i2c dans config.txt. Il ne s’y trouvait pas ?
Simple curiosité, quel hat utilisez vous pour l’alimentation ?
Bonjour
je réponds avec beaucoup de retard (milles excuses…)
J’utilises la version advanced du site ici :
https://s-usv.de/?lang=en
Je suis sur une version advanced mobile qui ne se fait plus c’est dommage….
Si vous le souhaitez je peux vous donner mes retours d’expériences sur cette carte ou ici ou directement par mail (je pense qu’en tant que modérateur vous l’avez …)
Si je tapes la commande dans le raspberry PI 4 :
# i2cdetect -F 1
Cela devrait fonctionner et me dire quoi est activé ?? non ?
Merci
Bonjour Claude,
Le bus i2c-1 est-il bien présent dans /dev ?
$ ls -la /dev/i2c-1
Si oui, le bus est correctement configuré et le problème vient de la carte, si non il y à un problème avec la configuration du raspberry.
Si le bus est présent, le constructeur de la cape que vous utilisez recommande de faire:
$ i2cdetect -a -y 1
Afin de déterminer l’adresse i2c de la cape sur le bus.
Que retournent ces deux commandes ?
Bonjour Julien
J’ai remis ma carte Olmatic sur mon PI 2 et fait les paramétrages => tout fonctionne parfaitement
Même OS et même hat sur un PI4 et cela manque de stabilité (je me demandes si le PI4 n’est pas un peu différent du PI2 (à la marge) qui rendrait certaine carte hat instable…
Je viens d’acheter un strompi 3 + sa batterie et j’avoue être un peu déçu (gros souci de paramétrage au départ…..) et j’ai à quasiment chaque démarrage une alerte visuelle sur le manque de puissance alors que l’ensemble est alimenté en 12volts et une intensité bien supérieure à ce qu’il faudrait….
Peut être que la détection faite par le PI 4 se fait peut être par erreur entre les basculements secteur et batterie (dans le creux….)
il faut avouer aussi que après avoir gouté à la olmatic (qualité chère mais qualité tout de même….) c’est dur de revenir à du bricolage….
Je vais peut être me laisser tenter par la carte olmatic industrial mais ni mouser france ni olmatic me disent ou trouver la batterie 3400ma LiFePO4 qui va avec ….