26
USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple de réalisation software Logiciel côté périphérique Logiciel côté serveur

USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Embed Size (px)

Citation preview

Page 1: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

USB Présentation du protocole Exemple de réalisation hardware

Choix d'un composant USB rapide Description du composant Description d'une carte

Exemple de réalisation software Logiciel côté périphérique Logiciel côté serveur

Page 2: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Vue générale de l'architecture (1)

Le bus USB est un bus point à point : le point de départ étant le host (PC ou hub), il va vers un périphérique ou un autre hub. Il n'y a qu'un seul host dans une architecture USB. Certains périphériques ont un hub intégré.

Les périphériques partagent la bande passante de l'USB. Le protocole est basé sur des jetons (token). L'ordinateur fournit un jeton au périphérique sélectionné, lequel lui renvoie le jeton par sa réponse.

Ce bus permet une connexion déconnexion à chaud.

Page 3: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Vue générale de l'architecture (2)

La topologie du bus peut être considérée comme un arbre dont le PC serait la racine et les périphériques les feuilles. Les périphériques ne communiquent jamais entre eux directement.

PC

Hub

Hub

Hub

Page 4: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Interface physique Au niveau électrique, le câble USB transfère le

signal et l'alimentation sur 4 fils. Il s'agit d'une paire torsadée d'impédance caractéristique 90 . Le débit peut être soit 1.5 Mbits/s ou 12 Mbits/s (480 Mbits/s pour l'USB 2.0). Suivant le délai de propagation du câble sa longueur peut atteindre 4.5 m. Au niveau de la connectique il existe 2 types de connecteur (A plat rectangulaire côté PC ou hub et B carré côté périphérique).

Vcc

Gnd

D-D+

Page 5: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Alimentation Au niveau de l'alimentation, le câble (par

l'intermédiaire du PC ou du hub) fournit la tension nominale de 5V. Comme chacun des périphériques peuvent s'auto-alimenter, ils indiquent au host la consommation souhaitée. Le système tient à jour la consommation totale demandée et regarde s'il peut effectivement fournir l'énergie souhaitée. Dans le cas contraire il peut demander aux périphériques de se mettre en veille. Néanmoins la partie USB est toujours active.

Page 6: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Protocole du bus USB Une transaction sur le bus nécessite au moins trois

paquets. Chaque transmission commence par : L'envoi par le host d'un paquet indiquant le type, la direction

de transaction, l'adresse de l'USB et son point terminal (End Point). Ce paquet porte le nom de "token packet" (jeton).

Puis le transmetteur envoie son paquet de données, ou indique qu'il n'a pas de paquet à transmettre

Enfin le destinataire envoie un paquet d'accusé de réception On donne le nom de Pipe au lien virtuel entre le host

et l'un des End Point du périphérique USB. Chaque lien est caractérisé par sa bande passante, son type de service et la taille des paquets.

Chaque paquet est cadencé à la milliseconde.

Page 7: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Type de transfert Il existe 4 types de transfert pour un lien virtuel :

Control : mode utilisé pour réaliser des configurations sur le périphérique. Ce lien est sans perte de données.

Bulk : mode utilisé pour la transmission d' importantes quantités de données. Ce lien est sans perte de données et la bande passante octroyée à ce type de données dépend des autres périphériques. Elle est la moins prioritaire.

Interrupt : assure le transfert de petites quantités de données, très rapidement. Le temps de réaction ne peut être plus lent que la valeur demandée par le périphérique.

Isochronous : fonctionne en temps réel. La bande passante et le délai sont garantis. C'est le mode le plus prioritaire. Du côté applicatif des erreurs d'underruns peuvent être détectées.

Page 8: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Échange en mode Bulk

IN OUT

DATA 0/1

ACK

DATA 0/1

STALLNAKACK

STALLNAK

Idle

Idle

Idle

Jeton

Données

Acquittement

Page 9: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Exemple de mise en oeuvre Un rapide sondage à montré que de nombreux

développeurs utilisent des composants du fabriquant Cypress (Intel, Motorola, Mitsubishi, Philips). Ce constructeur fournit toute une gamme de produit du plus lent 1.5 Mbits/s au plus plus rapide 480 Mbits/s. En fait le composant choisi est un dérivé de la famille 8051 avec des fonctions USB entièrement intégrés. Un kit de développement (CY3671) très performant est disponible, permettant ainsi d'appréhender les différentes possibilités de l'USB.

Page 10: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Caractéristiques des CYC646XX

Transceiver USB et SIE intégré sur la puce

Code 8051 dans la ram interne (8KB) ou externe, chargée à partir d'EEPROM ou via le bus USB.

14 Bulk/Interrupt endpoints avec une taille maximum de 64 bytes par paquet.

16 Isochrones endpoints avec un buffer total de 2KB. Intégré 8051amélioré: 4 clocks par cycle machine au

lieu de 12, horloge de 48 MHz, 2 uarts, 3 compteurs / timers

D+D- octet

s

Serial Interface Engine

µP 8051

Page 11: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Schéma bloc du CYC64613

Page 12: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Exemple de carte (1)

Page 13: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Exemple de carte (2)

Page 14: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Outils logiciels Il va falloir utiliser 2 séries d'outils pour

piloter la partie logicielle : Côté périphérique, on utilise un outil de

développement pour écrire du code compatible 8051. Avec le kit de développement est livré une version limitée du compilateur Keil. Le code sera écrit dans une Eeprom compatible I2C est chargé lors de démarrage du µP.

Côté host, on utilise un produit capable d'accéder à une DLL système.

Page 15: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Initialisation du protocoleVoid TDINIT (void)

{

IN07VAL = bmEP2; OUT07VAL = bmEP2; // Valide EndPoint 2. IN07VAL et OUT07VAL sont 2 registres qui indiquent les "Endpoint" valides en entrée et sortie

EPIO[OUT2BUF_ID].bytes = 0; //Arm Endpoint2 out to recieve data

// Activation de l'adressage en sbit

PORTSETUP=1; // SFRPORT=1

// Activation des Ports D,E et B

OED= 0xf0; OUTD=0; // bit 0-3 comme entrée, tout à 0

OEE=0x00; // bit 0-7 comme entrée

OEB=0xC0; OUTB=00; // bit 6-7 comme sortie tout à 0

}

Page 16: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Réception des donnéesOn peut travailler en mode Polling ou par

interruption. Le registre de contrôle et d'état permet de contrôler chaque "Bulk Endpoint"

if((EPIO[OUT2BUF_ID].cntrl & bmEPBUSY)==0 )// Il y a quelques choses dans le buffer

{

count =EPIO[OUT2BUF_ID].bytes; //Nombre d'octets reçus dans le buffer

for(i=0;i<count;++i)

pMsg[i]= OUT2BUF[i]; // On récupère les données

pMsg[i+1]= 0;

EPIO[OUT2BUF_ID].bytes = 0;

}

Page 17: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Emission des donnéesOn vérifie l'état du registre EPIO pour savoir

si on peut émettre des données : read8Data(pMsg); // On lit 8 données d'un convertisseur

while( (EPIO[IN2BUF_ID].cntrl & bmEPBUSY) ); // On attend que IN2BUF soit disponible

++j; // incrémente le No du messagememcpy(&IN2BUF[0],&j,2);memcpy(&IN2BUF[2],&pMsg[0],16); // copie de 16

caractères d'un message EPIO[IN2BUF_ID].bytes = 18; // les données sont

automatiquement émises.

Page 18: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Développement côté PCOn travaille avec un fichier virtuel en utilisant les

fonctions appropriées de la librairie Kernel 32. Au lancement de Windows un driver générique livré avec le kit de développement permet de reconnaître les circuits USB de la famille Cypress.

Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long

Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Public Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, ByVal lpOverlapped As Long) As Long

Page 19: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Structures utilisées côté PC (1/2)

Public Type USBDeviceDescriptorType ' USB device descriptor bDescriptorLength As Byte: bDescriptor As Byte iSpecRelease As Integer bDeviceClass As Byte: bDeviceSubClass As Byte bDeviceProtocol As Byte bMaxPacketSize As Byte iVendorID As Integer: iProductID As Integer iDeviceRelease As Integer : bManufacturer As Byte : bProduct As Byte : bSerialNumber

As Byte bNumberConfigurations As Byte fill(128) As ByteEnd Type

Public Type BulkTransferControlType lPipeNum As LongEnd Type

Page 20: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Structures utilisées côté PC (2/2)

Public Type USBDPipeInformationType' OUTPUT, These fields are filled in by USBD iMaximumPacketSize As Integer 'Maximum packet size for this pipe bEndpointAddress As Byte ' 8 bit USB endpoint address (includes direction) bInterval As Byte ' Polling interval in ms if interrupt pipe PipeType As USBDPipeEnum ' PipeType identifies type of transfer valid for this pipe lPipeHandle As Long' INPUT, These fields are filled in by the client driver lMaximumTransferSize As Long ' Maximum size for a single request in bytes. lPipeFlags As LongEnd TypePublic Type USBDInterfaceInformationType iLength As Integer ' Length of this structure, including all pipe information structures' INPUT, Interface number and Alternate setting this structure is associated with bInterfaceNumber As Byte : bAlternateSetting As Byte' OUTPUT , These fields are filled in by USBD bClass As Byte : bSubClass As Byte : bProtocol As Byte : bReserved As Byte lInterfaceHandle As Long : lNumberOfPipes As Long Pipes(MAX_PIPES) As USBDPipeInformationTypeEnd Type

Page 21: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Initialisation côté PCDim usbDD As USBDeviceDescriptorTypeDim pi As USBDInterfaceInformationType ' Global dans le projetdriverName = "\\.\" & "Ezusb-0"hDriverHandle = CreateFile(driverName, (GENERIC_READ Or GENERIC_WRITE),

(FILE_SHARE_READ Or FILE_SHARE_WRITE), ByVal 0, OPEN_EXISTING, 0&, 0)

result = DeviceIoControl(hDriverhandle, IOCTL_Ezusb_GET_DEVICE_DESCRIPTOR, usbDD, Len(usbDD), usbDD, Len(usbDD), lBytesReturned, 0)

If usbDD.iVendorID <> &H547 And usbDD.iProductID <> &H1002 Then CloseHandle hDriverhandle

result = DeviceIoControl(hDriverhandle, IOCTL_Ezusb_GET_PIPE_INFO, pi, Len(pi), pi, Len(pi), lBytesReturned, 0) ' Information sur le type de lien

If result = 0 Then CloseHandle hDriverhandle

Page 22: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Émission des données par le PC

result = DoBulkXfer(usrUsbParametre.hDriverhandle, eWrite, buffer, lngDataLen) ' Emission d'un buffer

….Function DoBulkXfer(hDriverhandle As Long, pipe As Integer, ByRef

buffer() As Byte, ByRef dataLen As Long) As LongIf pi.lNumberOfPipes <= pipe Then ' Le lien est-il correct DoBulkXfer = eBadPipe : Exit FunctionElse ' met ce lien dans la structure BulkTransferControl btc.lPipeNum = pipeEnd If ' determine en fonction du No du EndPoint le sens du transfertIf (pi.Pipes(pipe).bEndpointAddress <= 128) Then result = DeviceIoControl(hDriverhandle, IOCTL_EZUSB_BULK_WRITE,

btc, Len(btc), buffer(0), dataLen, dataLen, 0)End If

Page 23: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Réception des données par le PC

result = DoBulkXfer(usrUsbParametre.hDriverhandle, eRead, buffer, lngDataLen) ' Réception d'un buffer

….Function DoBulkXfer(hDriverhandle As Long, pipe As Integer, ByRef

buffer() As Byte, ByRef dataLen As Long) As LongIf pi.lNumberOfPipes <= pipe Then ' Le lien est-il correct DoBulkXfer = eBadPipe : Exit FunctionElse ' met le lien dans la structure BulkTransferControl btc.lPipeNum = pipeEnd If ' determine en fonction du No du EndPoint le sens du transfertIf (pi.Pipes(pipe).bEndpointAddress > 128) Then result = DeviceIoControl(hDriverhandle, IOCTL_EZUSB_BULK_READ,

btc, Len(btc), buffer(0), dataLen, dataLen, 0)End If

Page 24: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Budget approximatif Le coût du composant et circuits annexes

~ 25€ Outillage, film, cuivre et câblage ~240€ Outil de développement Cypress CY3671

~ 600€ Kit de développement Keil ~2200€ Programmateur d'Eeprom ~800€

Page 25: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Bilan Parmi les problèmes rencontrés on peut citer

Circuit CAO classe 5 Approvisionnement du composant Outils logiciels importants bien que plus facile que

le bus PCI Prix du prototype et des outils de bases,…

Parmi les points positifs Portabilité du protocole (PC, Mac, Unix) Utilisation d'un micro contrôleur famille 8051 Evolution des performances (USB 2.0) et (USB OTG

On the Go pas de Host)

Page 26: USB Présentation du protocole Exemple de réalisation hardware Choix d'un composant USB rapide Description du composant Description d'une carte Exemple

Bibliographie "Le bus USB Guide du concepteur" de

Xavier Fenard, DUNOD, ISBN 2-10-004704-3

"Universal Serial Bus System Architecture, Second Edition" de Don Anderson / Dave Dzatko, MindShare, Inc., ISBN 0-201-30975-0

http://www.cypress.com http://www.usb.org