Bus SPI / I2C

Bonjour à tous,

Je suis en train de réaliser mon tout premier projet Arduino. Pour la connexion de certains Shields et capteurs, je me intéressé au 2 principaux bus SPI et I2C. J’ai regardé de quelle façon il convient de les connecter et les différents signaux échangés pour chacun d’eux.

J’utilise un shield XD-05, qui combine un lecteur de carte SD et une horloge RTC.

J’ai trouvé sur le site suivant des exemples de codes dont je souhaite m’inspirer : Code Walkthrough | Adafruit Data Logger Shield | Adafruit Learning System

Dans le code en question, ils déclarent entre-autres la librairie Wire.h qui est celle de l’I2C.

#include "SD.h"
#include <Wire.h>
#include "RTClib.h"

Mais un peut plus loin, ils précisent qu’il faut impérativement configurer la sortie du chipSelect (CS), sans quoi la librairie ne fonctionnera pas.

// for the data logging shield, we use digital pin 10 for the SD cs line
const int chipSelect = 10;

Et là je ne comprends plus, car pour moi le chipSelect fait partie des signaux utilisés par la liaison SPI, et non avec l’I2C.

Si quelqu’un pouvait m’aider à comprendre… :slight_smile:

Bonjour
L’I²C est utilisé pour la RTC (DS1307)
Le SPI pour la carte SD

Merci Artouste pour ta réponse si rapide. Effectivement je commence à comprendre.

Mais si la carte SD utilise SPI, pourquoi ne déclarent-ils pas SPI.h dans leur sketch ?

clovis498:
Merci Artouste pour ta réponse si rapide. Effectivement je commence à comprendre.

Mais si la carte SD utilise SPI, pourquoi ne déclarent-ils pas SPI.h dans leur sketch ?

c’est la lib SD qui gere là les signaux SPI

c’est la lib SD qui gère là les signaux SPI

Je m’en doutais un peu après ta dernière réponse, mais ce qui me faisait douter c’est que dans le répertoire Exemple de l’arduino, dans le sketch “SD Card Datalogger”, ils insèrent bien les deux librairies :

/*
  SD card datalogger

 This example shows how to log data from three analog sensors
 to an SD card using the SD library.

 The circuit:
 * analog sensors on analog ins 0, 1, and 2
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4

 created  24 Nov 2010
 modified 9 Apr 2012
 by Tom Igoe

 This example code is in the public domain.

 */

#include <SPI.h>
#include <SD.h>
....

Mais grâce à toi Artouste, j’ai compris :slight_smile:

Dans mon projet, je dois ajouter deux capteurs qui communiquent en SPI. Si j’ai bien compris, je vais donc devoir ajouter deux chipSelect pour pouvoir lire les capteurs tour à tour, avant de sélectionner la carte SD pour écrire les données. Les trois autres signaux (MOSI, MISO et CLK) étant branchés en parallèle.

clovis498: ... Dans mon projet, je dois ajouter deux capteurs qui communiquent en SPI. Si j'ai bien compris, je vais donc devoir ajouter deux chipSelect pour pouvoir lire les capteurs tour à tour, avant de sélectionner la carte SD pour écrire les données. Les trois autres signaux (MOSI, MISO et CLK) étant branchés en parallèle.

pour faire "tres simple" entre I²C et SPI les compos I²C s'adressent par un adresse SOFT (affectée par le compo en hard ) les compos SPI s'adressent par un signal hard de selection