pourquoi l’usb?

52
1 Pourquoi L’USB? • Vitesse. • C’est un Bus. • Présent sur tous les PC. • Facilité pour l’utilisateur. •… • Mais difficulté pour le concepteur.

Upload: lainey

Post on 27-Jan-2016

34 views

Category:

Documents


4 download

DESCRIPTION

Pourquoi L’USB?. Vitesse. C’est un Bus. Présent sur tous les PC. Facilité pour l’utilisateur. … Mais difficulté pour le concepteur. Sommaire. Un microcontrôleur avec USB intégré: 68HC908JB8 Interface FT232 et microcontrôleur 68HC908AB32 Interface FT245 et PIC 16F873-20 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Pourquoi L’USB?

1

Pourquoi L’USB?

• Vitesse.

• C’est un Bus.

• Présent sur tous les PC.

• Facilité pour l’utilisateur.

• …

• Mais difficulté pour le concepteur.

Page 2: Pourquoi L’USB?

2

Sommaire

• Un microcontrôleur avec USB intégré: 68HC908JB8• Interface FT232 et microcontrôleur 68HC908AB32• Interface FT245 et PIC 16F873-20

La présentation se base sur le livre:

‘L’USB pour tous’ de Vincent Le Mieux au édition Dunod

Page 3: Pourquoi L’USB?

3

Acquisition photodiode USB

Le système acquisition photodiode USB, permet de faire l’acquisitionde signal de 3 photodiodes simultanément via liaison USB d’un PC.F = 10Hz max

Le produit se compose de la façon suivante :• La carte électronique. • 3 photodiodes reliées à la carte électronique par une connexion

BNC.• Le logiciel d’acquisition : Phodiode_USB.exe• Le package USBIO de Thesycon : usbio_el.exe version 1.51 en

version freeware.• Le driver USB modifié comprenant : carte_HC08.inf et

carte_HC08.sys

Page 4: Pourquoi L’USB?

4

Diagramme de contexte du système

Photodiodes

Cartephotodiode

Carte USB

PC

CommunicationUSB

CommunicationSPI CAN

CommandePot numConv I/U

Courant desphotodiodes

Alimentation

Page 5: Pourquoi L’USB?

5

Côté Device

Page 6: Pourquoi L’USB?

6

GND

VCC

C2100n

C3

100n

VCC

GNDGND

J12

CON16AP

+1

+3

+5

+7

+9

+11

+13

+15

+2

+4

+6

+8

+10

+12

+14

+16

GNDRSTmonIRQ

PTA3PTA2PTA1PTA0

Vout

U1

IQD14PCB

H8

VCC14

GND7

NC1

VCC

GND

OSC1

OSC1

J3

Selecteur alim

123

Vout

PTB0

PTB2PTB1

PTB4PTB3

PTB5PTB6

+ C710u

J6

Selecteur reset

123

RSTmonRST

C6100n

GND

J7

BP

12

GND

L1

Self

GND

GND

VBUS

F2 0.125A

VCCU3

hc08JB8

OSC143

OSC244

VDD

2

VSS

42

VREG

1

/IRQ18 /RST36

PTA0//KBA035

PTA1//KBA134

PTA2//KBA233

PTA3//KBA332

PTA4//KBA425

PTA5//KBA524

PTA6//KBA623

PTA7//KBA722

PTE0/TCLK27

PTE1/TCH011

PTE2/TCH126

PTE3/D+12

PTE4/D-13

PTB05

PTB14

PTB23

PTB341

PTB440

PTB539

PTB638

PTB737

PTC014

PTC115

PTC216

PTC317

PTC428

PTC529

PTC630

PTC731

PTD06

PTD17

PTD28

PTD39

PTD410

PTD521

PTD620

PTD719

VBUS

PTC5

+

C1

10u

VREG

R3 22

R2 22

JP1USB_TypeB

VBUS1 D-2 D+3 GND4

SHIELD5

SHIELD6

PTE3PTE4

J14

CON2

12

J13

CON10

12345678910

PTA0

PTB2PTB1PTB0

PTC5PTB4PTB3

PTB5PTB6

GND

GND

VCC

JH4

HEADER 1

11

JH3

HEADER 1

11

JH2

HEADER 1

11

JH1

HEADER 1

11

RST

R510k

R4 10k

GND

IRQ

PTA1PTA2PTA3

Hardware device: 68HC08JB8 + connecteur USB

Interface USB

Page 7: Pourquoi L’USB?

7

0

VDD

VSS

CAL

C15

220p

1 2

+5V

D1

G1118

12

R4 10K1 2

U5

X9C104

INC1

U/D2

CS7

VH3

VW5

VL6

U2

REF1004

A4 K

6

K.8

0

R2

47K1

2

VDD

U3B

TLV2462

-6

V+8

04

OUT7

+5

U3A

TLV2462

-2

V+8

04

OUT1

+3

VRef

0

C40.1µF

12

R1

1

12

VDD

+C3

6.8µF

12

0

VAmpli

VAmpli

VRef

U4

CS5509

CS1

CONV2

CAL3

XIN4

XOUT5

BP/UP6

AIN+7

AIN-8

VREF+9

VREF-10

VA+11

DGND12VD+13

SCLK14SDATA15DRDY16

GND

0

0

VCC

VRef

GND

VCC

C50.1µF

12

R3 101 2

C60.1µF

12

VD+

0

VDD

VDDVD+

SCLKSDATA

CONV#CS_AD

#INCU/#D

#CS_POT

XIN

Hardware device:

Photodiode +Conv I/U+Pot num

CAN

Ref U

Page 8: Pourquoi L’USB?

8

SISCK

+5V VCC

VCC

GND

GND

0

VDD

VSS

Amplificateur & Conversion_1

VCC

GND

SCLKSDATA

#CS_AD

CONV

#INCU/#D

XIN

#CS_POT

CAL

Amplificateur & Conversion_2

VCC

GND

SCLKSDATA

#CS_AD

CONV

#INCU/#D

XIN

#CS_POT

CAL

SCKSI

SCKSI

GND

VCC

VCC

GND

GND

VCCSISCK

CS1

CONV

CONV

CONV

CONV

CS1

CS3

CS2

CS3CS2

U_D

CAL

INC

CS1

CS3

CS2U_D

U_D

INCU_D

INC

INC

XIN

XIN

XIN

0

C1

100n

C2

100n

+5V

U14

kony

NC1

GND7

output8

VCC14

0

XIN

VCC

CAL

CAL

CAL

J3

CON2

12

J4

CON10

123456789

10

0

Amplificateur & Conversion

VCC

GND

SCLKSDATA

#CS_AD

CONV

#INCU/#D

XIN

#CS_POT

CAL

Hardware device:

Page 9: Pourquoi L’USB?

9

Diagramme de communication USB

Page 10: Pourquoi L’USB?

10

Enumération

L'énumération est le processus qui permet à l’hôte de déterminer l'appareil qui vient d'être branché au bus et les paramètres dont il besoin, comme la consommation électrique, le VID/PID, le nombre et le type de terminaison du produit, etc.…

Les étapes du processus d’énumération sont:

• L'hôte ou Hub détecte la connexion d'un nouvel appareil via les résistances de rappel de l'appareil reliées sur les 2 fils de données. L'hôte attend au moins 100ms, le temps que la prise soit insérée complètement et que l'alimentation de l'appareil soit stabilisée.

• L'hôte émet un "reset" mettant l'appareil dans l'état par défaut. L'appareil peut maintenant répondre à l'adresse zéro par défaut.

• L'hôte demande le descripteur de device.

• l'hôte émet immédiatement un autre reset sur le bus.

• L'hôte émet maintenant une commande SetAdress, mettant l'appareil dans l'état adressable.

• L'hôte demande les différents descripteurs (device, configuration, chaines).

Page 11: Pourquoi L’USB?

11

//============================================================================// File: U08DESC.C Ver.: 1.01// Func: Device-, Configuration- and String-Descriptors for USB08 Demo Application (all const Data, placed in Flash-ROM)// // Auth: (C)2000,2001 by Oliver Thamm, MCT Elektronikladen GbR http://hc08web.de/usb08//============================================================================

const device_descriptor DeviceDesc ={

sizeof(device_descriptor), // Taille de ce descripteur en octetsDT_DEVICE, // Type de descripteur (=1 pour le matériel){0x10, 0x01}, // Version USB (ici = 1.10)0, // Code de classe (aucun)0, // Code de sous-classe(aucun)0, // Code de protocole (aucun)8, // taille maximum d'un paquet(transféré par EP0) {0x70, 0x0C}, // Vendor ID = MCT Elektronikladen 0x0C70{0xA6, 0xF0}, // Product ID = 0xF0A6{0x00, 0x01}, // Numéro de version (codé en BCD)1, // Index du descripteur de chaîne fabricant2, // Index du descripteur de chaîne produit0, // Index du descripteur de chaîne N° de série1 // Nombre de configurations possibles

};const configuration_descriptor ConfigDesc ={ sizeof(configuration_descriptor), // Taille du descripteur en octets DT_CONFIGURATION, // Type de descripteur(=2 pour Configuration) {sizeof(configuration_descriptor)+sizeof(interface_descriptor)+sizeof(endpoint_descriptor)+sizeof(endpoint_descriptor), 0x00}, // Longueur totale des données pour cette configuration 1, // Nombre d'interfaces supportées par cette configuration 1, // Valeur désignant cette configuration 0, // Index du descripteur de chaîne pour cette configuration 0x80, // Bus Powered : alimenté par l'USB (0xC0 = Self Powered) 0x64 // 100x2mA = 200 mA (car Ox64 = 100 en décimal)};

Les descripteurs HC08JB8

Page 12: Pourquoi L’USB?

12

const interface_descriptor InterfaceDesc ={

sizeof(interface_descriptor), // Taille du descripteur en octetsDT_INTERFACE, // Type de descripteur (=4)0, // Numéro de cette Interface (0..)0, // interface secondaire2, // Nbre d'endpoints pour cette interface(EP0 exclu)0xff, // Code de classe (0xff = Vendor specific)0x01, // Code de sous-classe0xff, // Code de protocole (0xff = Vendor specific)0 // Index du descripteur de chaîne pour cette interface

};const endpoint_descriptor Endpoint1Desc ={

sizeof(endpoint_descriptor), //Taille du descripteur en octetsDT_ENDPOINT, // Type de descripteur(=5 pour un endpoint)0x81, // Adresse de cet EndPoint (EP1, IN)0x03, // fonctionnement sous Interruption{0x08, 0x00}, // Taille maximum du paquet pour cet EndPoint (8 octets)10 // Intervalle de scrutation (en ms)

};const endpoint_descriptor Endpoint2Desc ={

sizeof(endpoint_descriptor), // Taille du descripteur en octetsDT_ENDPOINT, // Type de descripteur(=5 pour un endpoint)0x02, // Adresse de cet EndPoint(EP2, OUT)0x03, // fonctionnement sous Interruption{0x04, 0x00}, // Taille maximum du paquet pour cet EndPoint (4

octet)10 // Intervalle de scrutation (en ms)

};

Page 13: Pourquoi L’USB?

13

Descripteur de chaine

//Chaîne Fabricant//--------------------------------------------#define SD1LEN sizeof("CPMOH")*2//--------------------------------------------const uchar String1Desc[SD1LEN] = {

// Size, TypeSD1LEN, DT_STRING,// Unicode String'C', 0,'P', 0,'M', 0,'O', 0,'H', 0

};

// Chaîne Produit//-----------------------------------------------#define SD2LEN sizeof("carte_HC08")*2//-----------------------------------------------const uchar String2Desc[SD2LEN] = {

// Size, TypeSD2LEN, DT_STRING,// Unicode String'c', 0,'a', 0,'r', 0,'t', 0,'e', 0,'_', 0,'H', 0,'C', 0,'0', 0,'8', 0

};

Page 14: Pourquoi L’USB?

14

Soft HC08JB8 : exemple Dongle USB

#include "hc08jb8.h" // définitions des registres du 68HC908JB8#include "u08usb.c" // toutes les fonctions USB (merci Oliver Thamm !)

void main() {

uchar i ; //indexuchar recep; //variable accueillant l'octet envoyé par le PC

uchar code[8] = {100,101,102,103,104,105,106,107}; //tableau de 8 octets constituant le code du dongle

initUSB(); // initialisation de l'USB

cli(); // autorise les interruptions

while(1) {

recep = getUSB(); // récupération de l'octet envoyé par le PCif (recep == 67) /67 = code ASCII de la lettre C {

for (i=0;i<=7;i++)putUSB(code[i]); // envoi du code du dongle vers le PC :

}

}}

Page 15: Pourquoi L’USB?

15

Coté Host

Page 16: Pourquoi L’USB?

16

Le driver USBIO de Thesycon

Page 17: Pourquoi L’USB?

17

Insertion de l’objet COM dans VB6

Page 18: Pourquoi L’USB?

18

Dim WithEvents Endpoint1 As USBIOCOMLib.USBIOInterface ' déclaration de variable objet de type USBIOCOMLib.USBIOInterface qui fait référenceDim WithEvents Endpoint2 As USBIOCOMLib.USBIOInterface ‘ a une instance de classe capable de générer des événements. Dim tampon_reception(0) As Byte ' un octets à recevoirDim tampon_emission(0) As Byte ' un octets à émettreDim Status As Long ' variable d'état

Private Sub Form_Load() ‘ Chargement de la feuille Dim Devices As Long Dim Status1 As Long Dim Status2 As Long Dim Index As Byte Set Endpoint1 = New USBIOCOMLib.USBIOInterface ' On crée une instance de l’objet USBIO COM pour l'Endpoint 2 Set Endpoint2 = New USBIOCOMLib.USBIOInterface ' On crée une instance de l’objet USBIO COM pour l'Endpoint 1

' Enumération des matériels disponibles ' Un Guid perso a été obtenu avec Guidgen.exe ; ce même Guid est copié ‘ dans le fichier carte_HC08.inf, le fichier pilote de ce montage USB Endpoint1.EnumerateDevices "{6C9B5899-077E-4e3f-9A39-C2C6C99C8DE8}", Devices If Devices >= 1 Then ' test du nombre de matériels disponibles Endpoint1.OpenDevice 0, Status1 Endpoint2.OpenDevice 0, Status2 If (Status1 = USBIO_ERR_SUCCESS) And (Status2 = USBIO_ERR_SUCCESS) Then ‘teste si la fonction opendevice a réussi

Endpoint1.AddInterface 0, 0, 4096, Status ‘ configuration du matériel Endpoint1.SetConfiguration 0, Status Endpoint1.Bind &H81, Status ‘ établi la liaison entre l’objet USBIO COM et l’endpoint EP1 in qui a pour adresse 0x81 Endpoint1.StartReading 1, 5, 5, Status ‘ valide la lecture pour EP1, la taille du tampon. Endpoint2.Bind &H2, Status ‘ établi la liaison entre l’objet USBIO COM et l’endpoint EP2 out qui a pour adresse 0x02 Endpoint2.StartWriting 1, 5, 5, False, Status ‘ valide l’ écriture pour EP2 , la taille du tampon Else MsgBox "Erreur de communication avec la carte" End If Else MsgBox "La carte n'est pas connectée ou le driver n'est pas installé" End If End Sub

Programme Visual Basic 6

Explication p122

Page 19: Pourquoi L’USB?

19

Private Sub Endpoint1_ReadComplete(ByVal Obj As Object) Endpoint1.ReadData tampon_reception, 1, Status ‘ Reception d’un octet If Status = USBIO_ERR_SUCCESS Then LB_AFF.Caption = Format(tampon_reception(0) / 255 * Val(TB_Uref), " 0.000 V")

' affichage de la tension mesurée dans le Label LB_AFF

Else MsgBox "Erreur de communication Read Complete" End IfEnd Sub

Private Sub Timer1_Timer() tampon_emission(0) = 77 Endpoint2.WriteData tampon_emission, 1, Status ' envoi vers le hc08End Sub

Private Sub Form_Terminate() Close #1 Endpoint1.StopReading Endpoint2.StopWriting Endpoint1.CloseDevice Endpoint2.CloseDeviceEnd Sub

Page 20: Pourquoi L’USB?

20

Logiciel VB6

Page 21: Pourquoi L’USB?

21

Avantages et limites du systèmes

Avantages

• Simplicité du hardware (coût et encombrement)

• Transfert en mode interrupt (90% de la bande passante allouée pour les transferts périodiques)

Limites

• 1 transfert de 8 octets tous les 10ms → 800 octets/s

• Complexité de développement au niveau PC car obligation de passer par des .dll

• Pas de VID: 1500$

Page 22: Pourquoi L’USB?

22

Pulse Start Laser Synchro • Le but est de synchroniser le déclenchement de 2 lasers (ML et SL)

Pour cela, le produit devra générer 2 pulses pour chaque laser.

La première impulsion (FlashSL et FlashML) déclenchera une lampe flash.

La seconde impulsion (QswitchSL et QswitchML) déclenchera un obturateur optique.

• Chaque impulsion devra avoir une largeur de L=20µs.

Les FlashSL et FlashML ont une fréquence de 10Hz.

• Le retard de QswitchSM par rapport à QswitcML est de ∆t +/-2ns de précision.

- ∆t : délais entre les Qswitch. -200ns < ∆t < 1s

∆t : -200ns → 1µs pas de 5ns

1µs → 1s pas de 1µs

Page 23: Pourquoi L’USB?

23

Chronogramme

FlashSL

QswitchSL

FlashML

QswitchML

Laser 1

Laser 2

∆t

140µs

230µs

20µs

5V

0V

5V

0V

5V

0V

5V

0V

10Hz

10Hz

Page 24: Pourquoi L’USB?

24

Schéma fonctionnel

HC08AB32

SCI

XILINXXCS30XL

DS1023-500

DS1023-500

DS1023-500

DS1023-500Génération des pulses+/-1µs

FlashSL +/-1ns

QswitchSL +/-1ns

FlashML +/-1ns

QswitchML +/-1ns

Programmation retard de 1ns → 1µs

Programmation :- Retard de 1µs → 1s

FlashSL +/-1us

QswitchSL +/-1us

FlashML +/-1us

QswitchML +/-1us

Générateur de retard de 1ns → 1µs

FT232

PC

Labview+ VCP

USB

Laser1

Laser2

Page 25: Pourquoi L’USB?

25

Côté Device

Page 26: Pourquoi L’USB?

26

C8 100n

C9 100n

JP1

USB_TypeB

VBUS1

D-2

D+3

GND4

SHIELD5

SHIELD6

U4

93C46

CS1

SK2

DIN3

DOUT4

VCC8

NC7

NC6

GND5

R2 27

R31k5

EEDATA

EESK

R427

EECS

EECS

RESET#

EESK

R7

10k

C7

33n

R82k2

EEDATA

R5470

VCC

C12 27p

VCC

C13 100n

C14 27p

C15 100n

U21

FT232BM

TXD25

RXD24

RTS#23

CTS#22

DTR#21

DSR#20

DCD#19

RSTOUT#5

XTOUT28

RESET#4

EECS32

EESK1

EEDATA2

AGND

29

GND

9

RI#18

GND

17

TEST31

PWRCTL14

PWREN#15

TXDEN16

TXLED#12

SLEEP#10

RXLED#11

VCC-

IO13

3V3OUT6

AVCC

30

VCC

26VC

C3

USBDM8

USBDP7

XTIN27

R64k7

R910k

R22200

12

VCC

D4LED

Y1CRYSTAL

5V

VCC

R23200

12

D5LED

TxHC08

RxHC08

Hardware device

EEPROMFT232

Page 27: Pourquoi L’USB?

27

ADR_1ADR_2ADR_3ADR_4

DS_P0

DS_LE0

VCC

DS_LE1DS_LE2DS_LE3

DS_P1DS_P2DS_P3DS_P4DS_P5DS_P6DS_P7

FINX

U27

OSC_DIP8

H5

VCC8

GND4

NC1

STARTX

RSTXWRX

32MHz

HC08_P0CPTHC08_P1CPTHC08_P2CPTHC08_P3CPT

HC08_P0ENHC08_P1ENHC08_P2ENHC08_P3EN

HC08_0HC08_1

RxHC08

HC08_2

U2hc08AB32

OSC159

OSC258

/RST3

/IRQ2

PTA026

VREFH54

Avss/VREFL45

PTC060

PTC161

PTC2/MCLK62

PTC363

PTC41

PTC564

PTD042

PTD143

PTD246

PTD4/TBCLK50

PTD551

VD

D2

2V

SS

21

PTD6/TACLK52

PTD347

PTD753

PTE0/TxD13

PTE1/RxD14

PTE2/TACH015

PTE3/TACH116

PTE4//SS17

PTE5/MISO18

PTE6/MOSI19

PTE7/SPSCK20

PTF0/TACH24

PTF1/TACH35

PTF2/TBCH26

PTF3/TBCH37

PTF4/TBCH08

PTF5/TBCH111

PTF612

PTF710

PTG0/KBD023

PTG1/KBD124

PTG2/KBD225

PTH0/KBD348

PTA127

PTA228

PTA329

PTA430

PTA531

PTA632

PTA733

PTB0/ATD034

PTB1/ATD135

PTB2/ATD236

PTB3/ATD337

PTB4/ATD438

PTB5/ATD539

PTB6/ATD640

PTB7/ATD741

PTH1/KBD449

CGMXFC57

VD

DA

55

VS

SA

56

VD

DA

RE

F4

4

5V

HC08_3

GND

C2100n

5V

C3100n

C4100n

5V5V

GNDGND GND

GND

J12

CON16AP

+1

+3

+5

+7

+9

+11

+13

+15

+2

+4

+6

+8

+10

+12

+14

+16

RST

IRQRSTmon

PTA0

PTA0

IRQ

PTC3PTC1PTC0

PTC1PTC0

Vout

PTC3

5V

GND

GND

C5100n

CGMXFC

HC08_5HC08_4

HC08_7HC08_6

J3

Selecteur alim

123

TxHC08

5V

GND

+ C110u

J13

Selecteur reset

123RST

RSTmon

R110k

5V

C6100n

GND

J14

BP

12

GND F1 0.125A

VCCMON

5VVCCMON

ADR_0

HC908AB32

Vers mon08

Hardware device

Page 28: Pourquoi L’USB?

28

HC08_7HC08_6

HC08_5

HC08_4HC08_3HC08_2HC08_1HC08_0

C20 100nF1 2

R21200

12

D3LED

R1810k

12

ADR_4ADR_3

ADR_1ADR_2

ADR_0

R1710k

12

U18

XC17128D

DATA1

CLK2 RST/OE3

CE4 CEO

6

GND5

VCC

8

VPP7

C27100nF

12

J6

CON6

123456

U28

OSC_DIP8

H5

VCC8

GND4

NC1

R20 4.7k

1 2

J7

CON3

123M0

RST_EE

DONE_EE

3.3V

DONE

_EE

/PROGRAM

DATA_EE

CCLK_EE

DATA_EE

GND

PULS

E_1

3.3V

GND

CLK8MHz

3.3V

GND

GNDCCLK_EE

DATA_EEDONE_EE

PULS

E_2

/PROGRAM

3.3V

C19 100nF1 2

GNDGND

PULS

E_3

3.3V

3.3V

3.3V

3.3V

3.3V

3.3V

3.3V

3.3V

3.3V

3.3V 3.3V

GND

GND

5V

GND

GND

GND

GND

GND

CCLK_EE

U31E

74HCT04/SO

1110

R1910k

12

GND

U17 XCS30XL

I/O GCK12

I/O_33

I/O_44

I/O_55

I/O TDI6

I/O TCK7

GND8

I/O_99

I/O_1010

I/O TMS11

I/O_1212

I/O_1313

I/O_1414

I/O_1515

I/O_1616

GND17

VCC18

I/O_1919

I/O_2020

I/O_2121

I/O_2222

I/O_2323

I/O_2424

I/O_2525

I/O_2626

GND27

I/O_2828

I/O_2929

I/O_3030

I/O_3131

I/O_3232

I/O GCK233

M134

GND35

M036

VCC

37/P

WRD

WN

38I/O

GCK

339

I/O (H

DC)

40I/O

_41

41I/O

_42

42I/O

_43

43I/O

(/LD

C)44

GND

45I/O

_46

46I/O

_47

47I/O

_48

48I/O

_49

49I/O

_50

50I/O

_51

51I/O

_52

52I/O

(/IN

IT)

53VC

C54

GND

55I/O

_56

56I/O

_57

57I/O

_58

58I/O

_59

59I/O

_60

60I/O

_61

61I/O

_62

62I/O

_63

63G

ND64

I/O_6

565

I/O_6

666

I/O_6

767

I/O_6

868

I/O_6

969

I/O G

CK4

70G

ND71

DONE

72

VCC73 /PROGRAM74 I/O (D7)75 I/O GCK576 I/O_7777 I/O_7878 I/O (D6)79 I/O_8080 GND81 I/O_8282 I/O_8383 I/O (D5)84 I/O_8585 I/O_8686 I/O_8787 I/O (D4)88 I/O_8989 VCC90 GND91 I/O (D3)92 I/O_9393 I/O_9494 I/O_9595 I/O (D2)96 I/O_9797 I/O_9898 I/O_9999 GND

100 I/O (D1)101 I/O_102102 I/O_103103 I/O_104104 I/O (D0 DIN)105 I/O GCK6 (DOUT)106 CCLK107 VCC108 O

TDO

109

GND

110

I/O_1

1111

1

I/O G

CK7

112

I/O_1

1311

3

I/O_1

1411

4

I/O C

SI11

5

I/O__

116

116

I/O_1

1711

7

GND

118

I/O_1

1911

9

I/O_1

2012

0

I/O_1

2112

1

I/O_1

2212

2

I/O_1

2312

3

I/O_1

2412

4

I/O_1

2512

5

I/O_1

2612

6

GND

127

VCC

128

I/O_1

2912

9

I/O_1

3013

0

I/O_1

3113

1

I/O_1

3213

2

I/O_1

3313

3

I/O_1

3413

4

I/O_1

3513

5

I/O_1

3613

6

GND

137

I/O_1

3813

8

I/O_1

3913

9

I/O_1

4014

0

I/O_1

4114

1

I/O_1

4214

2

I/O G

CK8

143

VCC

144

GND1

RST_

EE

C22 100nF1 2

C21

100nF

1 2

C23 100nF1 2

C24

100nF

1 2

C26100nF1

2

C25100nF1

2

CLK8

MHz

FINX

RSTXPU

LSE_

0WRXSTARTX

Hardware device

Page 29: Pourquoi L’USB?

29

GND

U31B

74HCT04/SO

3 4

U31C

74HCT04/SO

5 6

HC08_P0EN

HC08_P1EN

U34A

74HCT08

1

23

U34B

74HCT08

4

56

U34C

74HCT08

9

108

U34D

74HCT08

12

1311

HC08_P2EN

HC08_P3EN

GND

U23

DS1023

IN1

LE2

Q/P03

CLK/P14

D/P25P3

6

P47

GND

8

REF/PWM9P5

10

MS11

P612

P713

P/S14

OUT/OUT15

VCC

16

PULSE_2

VCC

C18100n

GND

GND

U24

DS1023

IN1

LE2

Q/P03

CLK/P14

D/P25P3

6

P47

GND

8

REF/PWM9P5

10

MS11

P612

P713

P/S14

OUT/OUT15

VCC

16

PULSE_3

C28100n

VCC

GND

VCC

VCC

GND

GND

R12 0

R13 0

HC08_P2CPT

HC08_P3CPT

PULSE_3_OUT

PULSE_2_OUT

DS_P3 VCC

GND

C33100n

DS_P4DS_P5

U31A

74HCT04/SO

1 2

DS_P6DS_P7

DS_P1

U31D

74HCT04/SO

9 8

DS_LE0

DS_P0DS_P2

VCC

GND

GND

C16100n

U22

DS1023

IN1

LE2

Q/P03

CLK/P14

D/P25P3

6

P47

GND

8

REF/PWM9P5

10

MS11

P612

P713

P/S14

OUT/OUT15

VCC

16

PULSE_0

VCC

GND

R10 0

VCC

C17100n

VCC

GND

GND

U20

DS1023

IN1

LE2

Q/P03

CLK/P14

D/P25P3

6

P47

GND

8

REF/PWM9P5

10

MS11

P612

P713

P/S14

OUT/OUT15

VCC

16

GND

PULSE_1

R11 0

J15

CON5

12345

PULSE_0_OUT

PULSE_2_OUTPULSE_1_OUT

PULSE_3_OUT

GND

HC08_P0CPT

DS_P3

DS_P5DS_P4

DS_P7DS_P6

DS_LE1

DS_P1

DS_P2DS_P0

DS_P4DS_P3

DS_P6DS_P5

DS_P1

DS_P7

DS_P0

DS_LE2

PULSE_0_OUT

DS_P2

DS_P3

DS_P5DS_P4

DS_P7DS_P6

DS_LE3

DS_P1

DS_P2DS_P0

PULSE_1_OUT

GND

GNDGND

HC08_P1CPT

Hardware device

Page 30: Pourquoi L’USB?

30

/************************************************************//* initialisation du micro et des périphériques *//************************************************************/void initialisation(void){ CONFIG1 = 0x01; /* watchdog disable */ DDRA |= 0xFE; /* PTA1..7 en sortie */ DDRB = 0xFF; /* PTB en sortie */ DDRD = 0xFF; /* PTD en sortie */ DDRE = 0b01111101; /* PTE2..6 en sortie et PTE7 en entrée */ DDRF = 0xF0; /* PTF0..3 en entrée et PTF4..7 en sortie */ DDRG = 0x07; /* PTG en sortie */ PTFPUE = 0x0F; /* PTF0..3 pull-up activé */ PTF |= 0xF0; /* Pulse enable */ PTA &= 0x0F; /* DS_LE = 0 */ PTB = 0x00; /* DS DATA = 0 */ PTG = 0x00; /* Xilinx START, WR, RST = 0 */ PTD = 0x00; /* Xilinx DATA = 0 */ PTE &= 0b10000011; /* Xilinx ADRESSE = 0 */

SCBR = 0x31; /* Baudrate = Fclk/(64xPDxBD) = 32MHz/(64*13*2) = 19200 Bauds */ SCC1 = 0x40; /* SCI enable */ SCC2 = 0x0C; /* Validation du mode réception et émission */ EnableInterrupts; /* validation des interruptions */}

Soft HC08

Page 31: Pourquoi L’USB?

31

/* Déclaration des variables */unsigned char buffer_reception[TAILLE_BUFFER]; /* Création d’un tableau dont la taille est TAILLE_BUFFER */unsigned char *ptr_reception = buffer_reception; /* Création d’un pointeur sur le buffer_reception[0] */

/* Réception par l'usb */unsigned char reception_usb(void){unsigned char trame_recut = 0;static unsigned char attente_trame = 1;static unsigned char longueur_a_recevoir;

if (SCS1_SCRF == 1) /* si le buffer de réception est plein */ { *ptr_reception = SCDR; /* on stocker la donnée dans buffer_reception */ if (attente_trame == 1) /* si c'est le premier octet de la trame */ { longueur_a_recevoir = *ptr_reception; /* le premier octet correspond a la longueur de la trame */ attente_trame = 0; } longueur_a_recevoir--; ptr_reception++;

/* pointe sur prochain octet à recevoir */ if(!longueur_a_recevoir) /* Si plus d'octet à recevoir */ {

trame_recut = 1; attente_trame = 1; /* on passe en mode attente de trame car la transmission est terminée */

ptr_reception = buffer_reception; /* pointe le début du buffer */ } else trame_recut = 0; } else trame_recut = 0; return trame_recut; /* trame_recut = 1 si une trame est reçut */}

Soft HC08

Page 32: Pourquoi L’USB?

32

/***********************************************//* Emission par l'usb *//***********************************************/void emission_usb(unsigned char caractere_a_envoyer){ while (SCS1_SCTE != 1); /* on attend tant que le buffer de transmission n'est pas vide */ SCDR = caractere_a_envoyer; /* copie du caractère dans le registre d’emission */}

Soft HC08

Page 33: Pourquoi L’USB?

33

Coté Host

Page 34: Pourquoi L’USB?

34

Driver: VCP

Page 35: Pourquoi L’USB?

35

Driver: D2XX

Page 36: Pourquoi L’USB?

36

Soft PC pour VCP

On peut utiliser tous les logiciels permettant de communiquer avec une liaison série:

• HyperTerminal de Microsoft ou Terminal v1.9b: http://bray.velenje.cx/avr/terminal/

• Visual basic, Visual C++,… avec le contrôle ActiveX de Microsoft dédié aux communications série (MSCOMM32.OCX).

• Labview que l’on a choisi.

• …

Page 37: Pourquoi L’USB?

37

FT232 Xilinx

HC908AB32

Page 38: Pourquoi L’USB?

38

Soft PC: Labview

• Sélection du Port COM 3 • En fonctionnement

Page 39: Pourquoi L’USB?

39

Avantages et limites du systèmes

Avantages

• Facilité d’utilisation et de développement en utilisant les VCP

• Vitesse de transfert: • FT232 + HC08AB32 → 45Ko/s

avec les VCP.

Limites

• Complexité de développement au niveau PC si on veut utiliser les D2XXmais on a acces a de nouvelles fonctionnalités:- meilleurs débit- mode bit bang

Page 40: Pourquoi L’USB?

40

Quelles performances peut-on obtenir en associant un PIC

16F873 et un FT245?• Le montage précédemment présenté

remplit parfaitement le cahier des charges demandé. Mais la vitesse de transfert des données peut-elle être augmentée de façon significative ? Sinon comment peut-on opérer en conservant cet interface et sa facilité de mise en œuvre?

Page 41: Pourquoi L’USB?

41

Limites de la liaison série

• Quand on utilise une liaison série , chaque octet est mis en série .Sachant que chaque bit est échantillonné 16 fois et que 8 bits + 1 bit de start+1 bit d’arrêt donc au moins 10 bits sont nécessaires , la fréquence du débit des données est égale à la fréquence de cycle micro divisée par 160 (10*16) ; pour nous ici c’est 2Mhz divisé par 160= 50Kbytes /seconde .

• C’est la limite d’ envoi des données pour cette interface

Page 42: Pourquoi L’USB?

42

Choix du module FT 245

• Au lieu d’utiliser le module FT232 , nous travaillons avec le module FT245 qui permet l’envoi des données directement en parallèle vers le module USB donc avec un gain de temps appréciable .

• Nous allons voir que les instructions même minimales du micro ne permettent pas un débit proche du maximum permis par la liaison USB.

• Nous utilisons un microprocesseur PIC16F

Page 43: Pourquoi L’USB?

43

Vcc

Page 44: Pourquoi L’USB?

44

Page 45: Pourquoi L’USB?

45

/*Fichier usb_Lecture.h

Microcontrôleur : PIC16F873 /20PQuartz : 20MHz

*//* Déclaration des fonctions usb */#define RXF PORTB.1#define RD PORTB.5

char usb_Lecture(void) // Réception d'un octet{unsigned char donne;

while (RXF); //teste si ordre de départ arrivéRD=0; // activation de la lecture donne=PORTC;RD=1;return donne;

}

Page 46: Pourquoi L’USB?

46

Page 47: Pourquoi L’USB?

47

TMR1IF=0; // mettre le flag à 0 , mais sans permettre interruptionT1CON=0x7; // autorisation du compteur d’événements

// on viendra simplement tester le flag de dépassement

WRL=1; // synchro oscillowhile (TMR1IF==0){

if (TXE==0) // mode envoi normal{

WRM=1;// PORTC--;

WRM=0;

}TMR1IF=0; // raz du flag

WRL=0; // synchro oscillo

// fin=0; // signifier que c est finiWRL=0; // synchro oscilloTMR1IF=0;T1CON.0=0; // arrêt du compteur événements

WRM=1; // dernière donnée avec forçage du msb à 1WRM=0;

}

Page 48: Pourquoi L’USB?

48

Page 49: Pourquoi L’USB?

49

Essais et performances

• L’utilisation d’ un microprocesseur 16F873-20 est nécessaire pour obtenir des vitesses de transmission élevées.

• Ce montage permet d’autres possibilités d’interfaçage grâce aux commandes diverses sur les sorties des ports non employées.

Page 50: Pourquoi L’USB?

50

DRIVER:DLL

Page 51: Pourquoi L’USB?

51

Page 52: Pourquoi L’USB?

52

Essais

• Nous avons pu transférer avec cette simple liaison USB des blocs de 64Koctets en 140ms donc au rythme de 2.3 us en moyenne et ceci sans perte d’information .

• Les blocs plus importants sont transmis avec des pertes d’information avec cette interface. Elle peut encore être améliorée.