BUS SPI

Bonjour ,

Ma question est très simple et la réponse le sera sûrement aussi , :slight_smile:
J'ai besoin de savoir dans quel objet de tout les jours le BUS SPI est utilisé , genre si c’est des TV , smartphone , produit Electronique etccc..

Je vous demande ça que dans ma démarche de projet j'essaye d'avoir le plus d'info sur ce bus pour justifier mon choix vous vous doutez bien que j'ai cherché su google avant de vous demandez mais j’ai pas trouver de chose concrète.

Bonne journée :wink:

le SPI est fait pour de courtes distances, le plus souvent entre composants d'une même machine.

par exemple

des capteurs: température, pression
des Dispositifs de contrôle: codecs audio, potentiomètres numériques, DAC, ADC
des écrans tactiles ou à cristaux liquides (LCD)
des composants de Communications: Ethernet, USB, USART, CAN, IEEE 802.15.4, IEEE 802.11
les montures d'objectif Canon EF
de la mémoire: flash et EEPROM
des Horloges en temps réel (RTC)
des carte SD

il y a des avantages et inconvénients

Distance plus longue qu'avec l'I2C quand même.
Le SPI n'utilise pas de drain ouvert comme l'i2c. Les transmissions sont unidirectionnelles et les cotés émetteurs sont à faible impédance ( Rdson d'une paire CMOS), il est moins sensible à la capacité parasite. C'est ce qui permet des portées plus longues et avec un débit bien supérieur.
Avec un banal atmega328P l'i2C est limitée à environ 530 kHz (résultat de test sur un exemplaire) alors que le SPI l'est à 8MHz.

Par contre il demande plus de fils.

Il y a un truc qui me gene dans la question :
Tu nous présentes le SPI comme un choix définitif et tu nous demande de justifier ton choix.
Tu n'as pas l'impression de travailler à l'envers ?

Et si tu sélectionnait quelques bus , si tu prenais une feuille blanche avec deux colonnes : avantages et inconvénients et que tu nous soumettais le fruit de ton travail ?

Bonjour,

68tjs:
(...) Les transmissions sont unidirectionnelles (...)

Je ne comprends pas bien le sens de mot "unidirectionnel" dans ce contexte, car, pour moi, une des différences avec I2C est que l'on peut envoyer et recevoir. Par exemple, lire et écrire sur une carte SD.

Bàv

L'ensemble permet d'établir une liaison bidirectionnelle mais chacun des fils de la liaison est unidirectionnel contrairement à l'I2C où la ligne SDA est bidirectionnelle.

fdufnews:
L'ensemble permet d'établir une liaison bidirectionnelle mais chacun des fils de la liaison est unidirectionnel contrairement à l'I2C où la ligne SDA est bidirectionnelle.

Ok.

J'ai trouvé ceci, qui est bien clair et pédagogique :
« Les normes I2C (Inter-Integrated Circuit) et SPI (Serial Peripheral Interface) ont été créées pour fournir un moyen simple de transférer des informations numériques entre des capteurs et des microcontrôleurs.

Les bibliothèques Arduino pour I2C et SPI facilitent l’utilisation de ces deux protocoles. Le choix entre I2C et SPI est en général déterminé par les périphériques que l’on souhaite connecter. Certains appareils offrent les deux standards, mais habituellement un périphérique ou une puce ne supporte qu’une seule des deux normes.

I2C à l’avantage de n’avoir besoin que de deux connexions de signalisation (l’emploi de plusieurs périphériques sur les deux connexions est assez simple et on reçoit une confirmation que les signaux ont été correctement reçus).

L’inconvénient est que la vitesse des données est inférieure à celle de SPI et qu’elles ne peuvent voyager que dans un seul sens à la fois (Simplex), ce qui abaisse encore plus le débit si des communications bidirectionnelles sont nécessaires (Half Duplex). Il faut aussi connecter des résistances « pull-up » aux connexions pour s’assurer de la fiabilité de la transmission des signaux.

L’avantage de SPI est qu’il a un meilleur débit et qu’il a des connexions d’entrée et de sorties séparées, si bien qu’il peut envoyer et recevoir en même temps (Full Duplex). Il utilise une ligne supplémentaire par appareil pour sélectionner le périphérique actif et il faut donc plus de connexions si on a de nombreux appareils à connecter »

Liaison DATA :
Si l'on fait l'effort de comprendre la signification des sigles tout s'éclaire miraculeusement :
MOSI = Master Output ==> Slave Input
MISO = Master Input <== Slave Output

car, pour moi, une des différences avec I2C est que l'on peut envoyer et recevoir.

Et heureusement qu'avec l'I2C il en est de même !

Au préalable à toute comparaison entre bus il faut comprendre leur fonctionnement autant coté matériel que protocole de communication.
L'I2C utilise des adresses pour identifier un esclave, le SPI utilise un fil par esclave.
Il existe plusieurs débits pour l'I2C. On parle de 100 kHz et 400 kHz. La plupart des composants utilisent ces fréquences.
Mais il existe aussi des débits normalisés dans la gamme de 1 MHz et même jusqu'à 5 MHz mais dans ce cas on perd la bidirectionnalité sur SDA.

L'inconvénient est que la vitesse des données est inférieure à celle de SPI et qu'elles ne peuvent voyager que dans un seul sens à la fois (Simplex), ce qui abaisse encore plus le débit si des communications bidirectionnelles sont nécessaires (Half Duplex).

Sachant qu'un esclave, comme son nom l'indique ne peut prendre aucune initiative, et ne parle que si le maître le lui demande je ne vois pas ou est le problème. Heureusement que le maître et l'esclave ne peuvent pas parler simultanément.
Il existe peut être des utilisations très particulières où les deux "causent" simultanément mais je ne pense pas qu'on les rencontrent fréquemment.
Attention il peut y avoir "potentiellement" plusieurs maître sur le bus mais un seul actif à la fois. Il faut que le maître libère le bus pour qu'un autre module puisse devenir maître.

Il faut aussi connecter des résistances « pull-up » aux connexions pour s'assurer de la fiabilité de la transmission des signaux

NON, vision par le petit bout de la lorgnette, confusion entre causes et conséquences.

Compte tenu de la technologie retenue pour l'I2C : OU câblés (voir ce que c'est) il faut employer des circuits intégrés à "drains ouvert" (on trouve aussi l'expression "collecteur ouvert").
Les résistances de "pull-up" sont OBLIGATOIRES, il faut bien que tu rendes compte que cela ne pourra pas fonctionner sans ces résistances.
Un composant à drain ouvert est un composant (volontairement) pas terminé. Il faut terminer le schéma électrique à l'extérieur du circuit intégré.
Il en faut au minimum une sur SDA et une sur SCL.
C'est leurs valeurs qui sont à ajuster en fonction du nombre de modules présents sur le bus et de la longueur du bus.

La documentation existe il faut la lire.
L'I2C est une invention de Philips, actuellement le "propriétaire" (celui qui gère les adresses I2C moyennant finances) est NXP.
Il existe aussi d'autre bus.