
|
Projet AB 07 2001
Carte d'acquisition - USB
Etudiants : Jonathan BOM et Stéphane PIERREL
Tuteur Technique : Roland CHAPUIS
Tuteur Industriel : Jean-Yves RIGNAULT
|
Mots-clefs
USB - microcontrôleur - language assembleur -
Driver Windows USB
Présentation du sujet
Introduction
Ce projet a pour but la conception et la réalisation d'une carte de mesure interfacée avec le bus USB. Cette carte
sera composée d'un microcontrôleur, gérant la carte. De plus, une application propre au PC devra être réalisée.
L'USB
L'USB a été conçu à l'origine comme une extension de l'architecture du PC. Il permet de connecter plusieurs
périphériques sans avoir besoin d'éteindre l'ordinateur. En effet, les connecteurs présentent l'avantage de pouvoir se
brancher à chaud. C'est pourquoi, ce bus remplacera prochainement les liaisons séries et parallèles classiques.
L'USB présente de nombreux avantages : il est rapide, permet de plus importants transferts de données et il est plus
simple d'utilisation que les "anciennes" interfaces.
Actuellement, l'USB V1.1 est la version courante (l'ancienne version est la V1.0 et la prochaine sera la version 2.0).
Cette version (V1.1) peut fonctionner à 2 vitesses. En haute vitesse il fonctionne à 12Mbits/s, tandis qu'en vitesse
faible il fonctionne à 1.5Mbits/s.
Objectifs
L'objectif principal est de réaliser une carte d'acquisition.
Pour cela, nous réaliserons plusieurs étapes :
- Chercher des informations sur les différents composants USB
- Choisir le composant USB et les autres composants de la carte
- Programmer le microcontrôleur
- Concevoir la carte
- Programmer l'application côté PC
Cahier des charges
La carte doit présenter au moins 2 entrées et une sortie analogiques et être suffisamment rapide (un transfert de données au moins toutes les millisecondes).
Solutions retenues
Eléments technologiques
Pour réaliser notre carte, plusieurs composants s'offraient à nous. Nous en avons recensé une dizaine. Ceux-ci peuvent être classés en 2 groupes : les interfaces USB et les microcontrôleurs intégrant l'USB.
Après une recherche de disponibilité et de coût auprès des distributeurs de composants, nous avons trouvé 2 circuits USB : le PIC16C675 de chez Microchip microcontrôleur avec interface USB low speed) , et le PDIUSBD12 de chez Philips (circuit interface USB/parallèle).
- Le PIC16C675 disponible chez PSM (280 Fr), dispose d'exemples de code microcontrôleur et il est programmable au CUST. Cependant il a une vitesse de transmission très faible (800 Octets/s) ; de plus étant low speed il ne peut transmettre que toutes les 10ms. Ce circuit semble avoir une pérennité réduite, en effet Microchip prévoit de sortir de nouveaux circuits USB plus performants.
- Le PDIUSBD12 disponible chez Arrow (à Venissieux pour 20 Fr.), dispose d'un exemple (code microcontrôleur Philips (en C) et un exemple côté PC avec son driver Windows ). Ce circuit n'est cependant disponible que par 27 pièces minimums.
Avancement
Recherche sur l'USB
Initialisation
Lorsque l'on connecte un périphérique au bus USB d'un PC, celui-ci déclenche une phase d'énumération. Les
principales étapes de cette énumération sont décrites ici :
- En questionnant le périphérique USB, le PC identifie le périphérique.
- Le PC assigne une adresse au périphérique. Avant qu'il ait reçu cette adresse,
le périphérique est dans un état particulier par défaut : Address State.
- Le PC observe les différentes configurations que peut prendre le périphérique.
- Après avoir étudié les différentes configurations que pouvait prendre le périphérique,
le PC assigne au périphérique une configuration.
Quand on retire un périphérique USB, le PC reçoit un signal qui l'avertit de l'absence du périphérique. Une fois
ce signal reçu, le PC gère l'information en fermant les applications liées au port USB.
Différents types de transfert
La norme USB définit 4 types de transfert :
- Le transfert Control : il est utilisé durant l'énumération, il permet d'éviter
les erreurs de transmission.
- Le transfert Bulk : il est similaire au transfert Control, mais moins prioritaire.
- Le transfert Interrupt : il est utilisé pour des transferts rapides à faibles données.
- Le transfert Isochrone : il est utilisé pour de rapides et gros transferts de données.
Nous avons décidé d'utiliser le transfert Interrupt, car il est simple d'utilisation et correspond à notre application.
Recherche de composants USB :
Nous avons trouvé une dizaine de composants utilisables pour notre carte. Ceux ci peuvent être classés en 2 groupes : les interfaces USB et les microcontrôleurs intégrant l'USB.
Après des recherches et études sur ces composants, nous avons classé nos composants par différents critères (disponibilité, coût, performance,...). Nous avons ainsi choisi une interface USB de chez Philips : PDIUSBD12.
Pour contrôler le PDIUSBD12, un PIC16F877 (microcontrôleur fabriqué par Microchip) a été choisi pour ces performances.
Programme implanté dans le microcontrôleur
Premièrement, le programme initialise le PIC puis le PDIUSBD12. Ensuite, le programme se charge de l'énumération décrite précédemment. Après cela, le programme se charge du transfert de données.
Le langage de programmation est celui de l'assembleur spécifique au PIC.
Conception de la carte
La carte est composée de 2 parties importantes :
- le PDIUSBD12 et ses composants. Ce module convertit les données du PC sous forme USB
en données compréhensibles par le PIC, ainsi que les données transmises par le PIC en données sous forme USB compréhensibles
par le PC.
- le PIC16F877 et ses composants. Ce module reçoit et traite les données émises par le
PDIUSBD12 et les données extérieures.
L'application côté PC
Afin de pouvoir transmettre des données entre une application et le bus USB il faut passer par l'intermédiaire d'un driver.
Nous avons adapté un driver USB sous Windows98 afin de le rendre compatible avec notre périphérique.
Celui ci écrit en C, permet d'utiliser 2 pipes (liaison virtuelle unidirectionnelle entre le PC et le périphérique), en mode Bulk, l'un en entrée et l'autre en sortie.
Cependant ce driver et son application n'ont pu être validés entièrement.