Les Bus de Communication

Avant tout il y a plusieurs méthode de communication, je vais tenter ici de synthétiser à la fois les avantages et inconvénient de chaque méthodes.

Modes de transmission

États logiques :


Modes de transmission

Les données circulent dans un seul sens (émetteur vers récepteur)
Les données circulent dans les 2 sens mais pas simultanément : bande passante utilisée en intégralité.
Les données circulent de manière bidirectionnelle et simultanément : bande passante / 2 (sauf multiplexage)
 
 

Type de Liaisons

Les bits sont transmis les uns à la suite des autres, sur une seule et même ligne.
les bits sont transmis à plusieurs en même temps (octet) sur plusieurs lignes disposées en parallèle.

Type de Liaisons séries

synchrone :
Émetteur et récepteur nécessitent même fréquence d'horloge (pour la synchronisation).
Le plus lent impose donc le rythme des communications. On parle alors de transmission orientée message.
Temps qui sépare l'envoi de 2 messages doit être un multiple de la durée d'un bit.
Le message commence par un ou plusieurs caractères de synchronisation puis la totalité des données.
Pas de contrôle d'erreurs.
ACK, en forçant la ligne DATA au niveau « LOW », pour signaler la bonne réception de l'octet, équivalent à un bit à 0.
NACK, en laissant la ligne DATA au niveau « HIGH », pour signaler un défaut dans la réception de l'octet, équivalent à un bit à 1.


Asynchrone :
Transmission caractère par caractère, le temps entre deux caractères (2 blocs de bits) n'étant pas défini.
Chaque caractère est entouré de bits de contrôle (en sus de payload). Avantage : simplicité de la méthode (le caractère est envoyé dès que la touche est appuyée).
La synchronisation est donc imposée par le protocole. On parle de transmission orientée caractère.

Classification des bus
Selon le type de périphériques connectés :

bus système "system" aussi communément appelé bus local :

Connecté directement au processeur (il possède maintenant une mémoire cache).
Il est multi-processeurs. Le transfert des données entre un bus système et les autres bus se fait via un pont (\bridge") et est géré par une puce système "system chipset".

périphérique interne "backplane" ou bus d'extension :

Situé sur la carte mère et les périphériques internes y sont connectés via des "slots".

bus de pèriphèrique externe "peripheral" :

Sert à connecter des périphériques externes avec la mémoire interne.
Selon la nature de ses liaisons (série ou parallèle) ou encore par son cadencement (synchrone ou asynchrone).
Liaison filaire
TypeFilsModes de transmissionTensionDébitDistanceProtocoleCommentaire
1-Wire2 (DATA+GND)Synchrone multi-points3 à 5V16kbits/s500 m Adresse physique unique
I²C3 (SDA+SLC+GND)Synchrone half-duplex
multi-points
"1" ≥ 0.7xVcc
"0" ≤ 0.3xVcc
100 kbit/s ou
400 kbit/s
<1 mmulti-maître
=> 127 esclaves
SPI4 (SCLK+MOSI+MISO+SS)Synchrone full-duplex
multi-points
TTL/CMOS25Mbit/s Simple maîtrePas sur ATTiny
RS232C3 (RX+TX+GND)Asynchrone
point à point
TTL115kbits/s  
RS4852 (RX+TX)Asynchrone half-duplex
point à point/multi-points
ΔVcc ≥ 1.5V110kbits/s1200 m1 maître => 32 esclaves
USB4 (D+/D-/Vbus/GND)Asynchrone, half-duplex
point à point
TTL 5 m 

OneWire ou 1-Wire

Développeur :Dallas semi-conducteur

Spécifications :

Les niveaux de tension : TTL
Débit : 16kbits/s
Distance :

Le protocol 1-wire 64bits: Famille 8bits+ ID 48bits + crc 8bits

Le bus 1 WIRE de DALLAS, permet de connecter et de faire dialoguer entre eux des circuits sur un seul fil.
Ce système de bus utilise un seul maître, qui pourra dialoguer avec un ou plusieurs esclaves.
Toutes les commandes et données sont envoyées avec le bit LSB en tête. Le fil unique du bus doit être tiré au +Vcc par une résistance de 4,7KΩ.
L'état repos du bus est donc un état haut.

Si le bus est maintenu à l'état bas plus de 480μs par le maître, tous les composants sur le bus sont remis à zéro.
C'est le pulse d'initialisation ou de Reset.
Après un délai de 15 à 60μs, le ou les esclaves raccordés, forcent le bus à l'état bas pendant 60 à 240 μs pour signaler leur présence.

Chaque circuit possède une adresse physique unique, gravée dans la puce à la fabrication.
Cette adresse est constituée de 64 bits soit 8 octets. Le premier octet détermine le type de famille auquel appartient le circuit.
Les 6 octets suivants, constituent le code propre du circuit.
Le dernier octet est le CRC.
C'est un octet de contrôle calculé à partir des 56 bits précédents.
CRCN° de série unique du circuitFamille
1 octet6 octets1 octet
5E00 04 0C 38 F001
Toute transaction entre un maître et un ou plusieurs esclaves, débute par une initialisation, constituée par l'envoi du pulse de Reset par le maître.
Le maître doit ensuite envoyer une commande de type ROM qui est propre au protocole 1 Wire, et que tous les circuits de ce type vont reconnaître.
Cela va permettre entre autre de sélectionner un circuit parmi les différents esclaves qui ont répondu présents au pulse de Reset.
Le dialogue et l'échange de données pourra ensuite commencer, entre le maître et l'esclave sélectionné.

Emission d'un bit du maître vers l'esclave:

Le maître force le bus à "0" pendant 1 à 15 μs.
L'esclave va lire le bus entre 15 et 45 μs après le front descendant ( valeur typique 30 μs).
Si on veut émettre un "1", il faut repasser le bus à "1" immédiatement, et ne plus rien faire jusqu'à t = 60 μs.
Pour émettre un "0" il faut laisser le bus à "0" jusqu'à t = 60 μs, puis repasser le bus à "1".
La durée du bit est donc de 60 μs, ce qui donne un débit de 16 kbits/sec.

Réception d'un bit par le maître:

Le maître force le bus à "0" pendant au moins 1 μs.
Si l'esclave veut émettre un "1", il laisse le bus libre donc tiré à "1".
Pour émettre un "0", l'esclave doit tirer le bus à "0" pendant 15 μs au minimum.
Le maître devra donc dans tous les cas lire le bus 15 μs maximum après avoir tiré le bus à "0" pendant 1 μs.
L'état du bus donnera alors le bit transmis par l'esclave.

CRC

Le polynôme générateur du CRC est : X8 + X5 + X4 +1

Les fonctions

PRincipe du 1-wire Search Rom
Le processus de recherche dans la ROM est la répétition d'une routine simple en trois étapes: lire un bit, lire le complément du bit, puis écrire la valeur souhaitée de ce bit.
Le maître de bus exécute cette procédure simple en trois étapes sur chaque bit de la ROM.
Après un passage complet, le maître du bus connaît le contenu de la ROM dans un appareil.
Le nombre restant d'appareils et leurs codes ROM peuvent être identifiés par des passes supplémentaires.

L'exemple suivant de processus de recherche dans la ROM suppose que quatre périphériques différents sont connectés au même bus 1-wire.

Les données ROM des quatre périphériques sont les suivantes:
ROM1 00110101 ...
ROM2 10101010 ...
ROM3 11110101 ...
ROM4 00010001 ...

Le processus de recherche est le suivant:
  1. Le maître du bus commence la séquence d'initialisation en émettant une impulsion de réinitialisation.
    Les dispositifs esclaves répondent en émettant des impulsions de présence simultanées.
  2. Le maître de bus émettra ensuite la commande Search ROM sur le bus 1-Wire.
  3. Le maître du bus lit un bit à partir du bus 1-Wire. Chaque appareil répondra en plaçant la valeur du premier bit de leurs données ROM respectives sur le bus 1-wire.
    ROM1 et ROM4 placent un 0 sur le bus 1-Wire, c’est-à-dire qu’il tire vers le bas.
    ROM2 et ROM3 placeront un 1 sur le bus 1-Wire en permettant à la ligne de rester haute.
    Le résultat est le ET logique de tous les appareils de la ligne. Le maître du bus voit donc un 0.

    Le maître de bus lit un autre bit. Comme la commande Search ROM est en cours d'exécution, tous les périphériques du bus 1-Wire répondent à cette seconde lecture en plaçant le complément du premier bit de leurs données ROM respectives sur le bus 1-Wire.
    ROM1 et ROM4 placent un 1 sur le 1-Wire, permettant à la ligne de rester haute.
    ROM2 et ROM3 placeront un 0 sur le 1-Wire, ainsi il sera abaissé.
    Le maître du bus observe à nouveau un 0 pour le complément du premier bit de données ROM.
    Le maître de bus a déterminé que certains périphériques du bus 1-Wire ont un 0 en première position et d’autres un.

    Les données obtenues à partir des deux lectures de la routine en trois étapes ont les interprétations suivantes :
    bitcomplémentCommentaire
    00Il existe encore des périphériques connectés qui ont des bits en conflit dans cette position.
    01Tous les appareils toujours couplés ont un bit 0 dans cette position de bit.
    10Tous les appareils encore couplés ont un bit dans cette position.
    11Aucun périphérique n'est connecté au bus 1-Wire.
  4. Le maître du bus écrit 0. Cela désélectionne ROM2 et ROM3 pour le reste de cette recherche, ne laissant que ROM1 et ROM4 connectées au bus à 1-wire.
  5. Le maître de bus effectue deux autres lectures et reçoit un bit 0 suivi d'un bit.
    Cela indique que tous les périphériques toujours couplés au bus ont 0 comme deuxième bit de données de la ROM.
  6. Le maître du bus écrit ensuite un 0 pour conserver les deux ROM1 et ROM4 couplées.
  7. Le maître du bus exécute deux lectures et reçoit deux bits nuls.
    Cela indique qu'il existe à la fois des bits 1 et 0 en tant que troisième bit des données ROM des périphériques connectés
  8. Le maître du bus écrit 0 bit. Cela désélectionne ROM1, laissant ROM4 comme le seul périphérique encore connecté.
  9. Le maître du bus lit le reste des bits de la ROM pour la ROM4 et continue à accéder à la pièce, le cas échéant. Ceci termine la première passe et identifie de manière unique une partie sur le bus 1-Wire.
  10. Le maître du bus commence une nouvelle séquence de recherche dans la ROM en répétant les étapes 1 à 7.
  11. Le maître du bus écrit 1 bit . Cela dissocie ROM4, ne laissant que ROM1 encore couplé.
  12. Le maître du bus lit le reste des bits de la ROM pour la ROM1 et communique avec le sous-jacent. logique si vous le souhaitez. Ceci termine la deuxième passe de recherche de ROM, dans laquelle une autre des ROM a été trouvée.
  13. Le maître du bus lance une nouvelle recherche dans la ROM en répétant les étapes 1 à 3.
  14. Le maître du bus écrit un bit. Ceci désélectionne ROM1 et ROM4 pour le reste de cette passe de recherche, ne laissant que ROM2 et ROM3 couplés au système.
  15. Le maître du bus exécute deux créneaux temporels de lecture et reçoit deux 0.
  16. Le maître du bus écrit un 0 bit. Cela sépare ROM3 en ne laissant que ROM2.
  17. Le maître du bus lit le reste des bits de la ROM pour la ROM2 et communique éventuellement avec la logique sous-jacente. Ceci termine la troisième passe de recherche de ROM, dans laquelle une autre des ROM a été trouvée.
  18. Le maître du bus lance une nouvelle recherche dans la ROM en répétant les étapes 13 à 15.
  19. Le maître du bus écrit un bit. Cela sépare ROM2, ne laissant que ROM3.
  20. Le maître du bus lit le reste des bits de la ROM pour la ROM3 et communique éventuellement avec la logique sous-jacente. Ceci termine la quatrième passe de recherche dans la ROM, dans laquelle une autre des ROM a été trouvée.

Calcul du CRC-8 en Python
#!/usr/bin/python
"""Polynome = X^8+X^5+X^4+1"""
import binascii

def calcCheckSum(incoming):
    msgByte = hexStr2Byte(incoming)
    check = 0
    for i in msgByte:
        check = AddToCRC(i, check)
        print "CRC %02X" % check
    return check

def AddToCRC(b, crc):
    b2 = b
    for i in xrange(8):
        odd = ((b2^crc) & 1) == 1
        crc >>= 1
        b2 >>= 1
        if (odd):
            crc ^= 0x8C # this means crc ^= 10001100
    return crc

def hexStr2Byte(msg):
    hex_data = msg.decode("hex")
    msg = bytearray(hex_data)
    return msg

if __name__ == '__main__':
    #msg = sys.argv[1]
    msg="021CB801000000" #7 bits pour retrouver le CRC8=A2
    #msg="4501ffff7fff0b10" #->E3
	
    print "L'adresse du DS: %s " % msg
    print "CRC-8 Maxim/Dallas: %02X " % calcCheckSum(msg)


Single-Bus communication


SymboleParamètreMINTYPMAXUnité
TbeHost starting signal low time0.8120ms
TgoHost Bus release time2030200us
TreResponse time low758085us
TLOWSignal "0", "1" low time485055us
TH0Signal "0" High Time222630us
TH1Signal "1" High Time687075us
TenSensor releases the bus time455055us

SPI : Serial Peripheral Interface

Développeur :Motorola

Spécifications :

Les niveaux de tension :TTL/CMOS
Nombre de fils :4 (SCLK+MOSI+MISO+SS)
Type de signal: Full-duplex

Il existe d'autres noms qui sont souvent utilisés :

I²C : Inter-Integrated Circuit

Développeur :Philips en 1982
Spécifications : bidirectionnel, transmission half-duplex synchrone Les niveaux de tension : TTL
Nombre de fils :3 (SDA+SLC+GND)
"1" ≥ 0.7xVCC ; "0" ≤ 0.3xVCC
DésignationVitesse
Standard mode≤ 100 kbit/s
Fast mode≤ 400 kbit/s
Fast plus mode≤ 1 Mbit/s
High-speed mode≤ 3,4 Mbit/s
Ultra-fast mode≤ 5 Mbit/s



Cette condition est caractérisée par le passage de la ligne SDA du niveau « HIGH » au niveau « LOW » pendant que la ligne « SCL » est maintenue au niveau « HIGH ».

« ACK », en forçant la ligne SDA au niveau « LOW », pour signaler la bonne réception de l'octet, équivalent à un bit à 0,
« NACK », en laissant la ligne SDA au niveau « HIGH », pour signaler un défaut dans la réception de l'octet, équivalent à un bit à 1.

La condition de RESTART est similaire à la condition de START, à cela près que la ligne SCL doit d'abord passer du niveau « LOW » au niveau « HIGH ».

À tout moment, l'esclave peut « bloquer » la ligne SCL au niveau « LOW » pour signaler qu'il est occupé.
Lorsque le maître fournit un niveau « HIGH » sur la ligne SCL, il détecte l'écrasement. Le maître doit continuer à fournir le niveau « HIGH » sur la ligne.
Lorsque l'esclave est à nouveau prêt, il libère la ligne SCL et celle-ci prend alors immédiatement le niveau « HIGH », le cycle reprend.

Cette condition est caractérisée par le passage de la ligne SDA du niveau « LOW » au niveau « HIGH » pendant que la ligne SCL est maintenue au niveau « HIGH ».

Échange maître-esclave


MAITRE ESCLAVE
Si le maitre envoi un "ACK" accusé de réception est donné à l'esclave indiquant plus de données.
Si aucun accusé de réception n'est donné à l'esclave "NACK" indiquant la dernière opération de lecture avant un STOP.

USB

Spécifications : Débit :
VersionUSB 1.0USB 1.1USB 2.0Wireless USBUSB 3.0USB 3.1
Année199619982000200520082013
Débit1,5 Mbit/s
0,19 Mo/s
12 Mbit/s
1,5 Mo/s
480 Mbit/s
60 Mo/s
480 Mbit/s
60 Mo/s
5 Gbit/s
600 Mo/s
10 Gbit/s
1,2 Go/s

UART : Universal Asynchronous Receiver Transmitter

Caractéristiques

Les niveaux de tension : TTL

RS232C

Caractéristiques

standardisé par l'EIA en 1962.
Longueur (m)603015 7,63,72,6
Débit (bit/s)2 4004 8009 60019 20038 40056 000

Tableau décrivant le connecteur DB-9 et la compatibilité avec le DB-25

SignalDB-25DE-9
NameAbréviation  
Transmitted DataTxD23
Received DataRxD32
Data Terminal ReadyDTR204
Data Carrier DetectDCD81
Data Set ReadyDSR66
Ring IndicatorRI229
Request To SendRTS47
Clear To SendCTS58
Signal GroundG75
Protective GroundPG1NC


Voir les cables "null modem" pour les connexions RS232.

RS485

Spécifications :

Les niveaux de tension : TTL
de 100 kbit/s sur ligne de 1200 m à 35 Mbit/s sur ligne de 10 m Débit :
Longueur (m)12001001510
Débit 100kbit/s1Mbit/s10Mbit/s35 Mbit/s

La communication ebus

Le protocole ebus

Le protocole OT est un moyen de transférer des données entre un dispositif maître (par exemple, le thermostat d'ambiance) et un dispositif esclave (le dispositif de chauffage). L'échange de données s'effectue en mode demande / réponse, où le maître initie la communication et attend une réponse de l'esclave dans un certain laps de temps. Si les données sont incomplètes ou corrompues, elles seront ignorées et la conversation terminée. Si la communication est terminée prématurément ou lorsque l'esclave ne répond pas dans le délai spécifié dans le protocole, le maître renvoie la requête à l'esclave.
Le protocole spécifie qu'au moins un message par seconde doit être affiché par le maître.

Les données échangées se composent de 32 bits (donc, 4 octets de données) auxquels sont ajoutés un bit de début et d'arrêt, et il est codé Manchester.
Une trame se compose d'un certain nombre de blocs de données:
Vitesse de transfert : 2400 Bauds
Protection par CRC 8 bits : suivant le polynome x8+x7+x4+x3+x+1

Frame de 32 bits entre Start et Stop.


StartParitéType messageMessage de rechange8 bits d'adresse16 bits de donnéesStop
1    0000b7b6b5b4b3b2b1b0                1

Type de message
Message
Maitre vers Esclave
 Message
Esclave vers Maitre
ValeurType de message ValeurType de message
000Lecture de données 100Lecture ACK
001Écriture de données 101Écriture ACK
010Données non valides 110Données non valides
011Réservé 111DataID Inconnu


A voir (source wikipedia) EBUS :

Pour communiquer avec l'esclave, le dispositif maître modifie la tension sur le fil. Pour retourner au maître, l'esclave modifie le courant à travers le fil.
Les niveaux de tension / courant sont les suivants:
 Logique 0Logique 1
Tension≤ 7V15-18V
Courant5-9mA17-23mA

La communication Ethernet

Format standardisé typique (IEEE 802.3)

Préambule (7 octets + 1 octet pour le délimiteur), adresse destination (6 octets), adresse source (6 octets), longueur (taille réelle du paquet transmis par la source), données (en fonction du champ LLC utilisé les données devront atteindre au moins 38 ou 43 octets, et au plus la valeur du MTU), et CRC (4 octets).

Liaison sans fils
TypeNormeDébitTensionCourantDistanceCommentaire
BluetoothIEEE 802.15.11 MbS – 24 MbS  10m 
HC-06IEEE 802.15.12Mbps - 3Mbps3,3VAppareillage: 30mA
Communication: 8mA
  
WiFiIEEE 802.11b 11 MbS
g 54 MbS
n 150 MbS
  
RF433 2400bit/s3 a 1220 a 30mA150 mCommunication Simplex
IR    

StandardBande de fréquenceDébitPortée
WiFi a (802.11a)5 GHz54 Mbit/s10 m
WiFi B (802.11b)2.4 GHz11 Mbit/s140 m
WiFi G (802.11g)2.4 GHz54 Mbit/s140 m
WiFi N (802.11n)2.4 GHz / 5 GHz450 Mbit/s250 m