Il y a 15 ans j'interfaçais différents appareils (Journal lumineux, balance, micromètre, ...) et montage électronique "maison" sur des PCs; c'était à l'époque presque révolutionnaire. Les appareils connectés au port série ou parallèle étaient directement commandés par le logiciel applicatif. Puis est venu Windows, ses drivers, la programmation objet et maintenant le bus USB. La complexité est au rendez-vous, il ne suffit plus d'un coup de fer à souder ! L'objectif reste la réalisation d'un appareil USB et l'écriture de son driver pour Windows. Je mène parallèlement une étude des cartes à puces et la convergence pourrait être un lecteur de cartes à puces USB.
Site officiel de
l'USB
- Norme V 1.1
(1,7 MB)
- Norme V 2.0
(6,5 MB)
Site de Beyond Logic Beaucoup de choses intéressantes en anglais.
Site de Bernard ACQUIER Traduction du résumé de la norme de Beyond Logic.
Le programme USBVIEW de Microsoft qui permet de voir ce qu'il y a sur le bus.
Toutes ces lectures m'ont amené à écrire mon propre résumé de la norme : |
PHILIPS Liste des produits USB
- PDIUSBD11
Interface série I²C - Full speed - DataSheet - Note
d'utilisation
- PDIUSBD12 Interface parallèle
- DataSheet
FAIRCHILD
- USB1T11AM
Low et Full speed DataSheet
NATIONAL SEMICONDUCTORS
- USBN9602 -
Non conseillé pour une nouvelle réalisation et nécessite un quartz à 48 Mhz plus
difficile à trouver.
-
USBN9603
- DataSheet
- USBN9604
- DataSheet
CYPRESS
- SL811C
Low et Full speed DataSheet
NET CHIP
- NET2888
-
NET2890
-
NET2270
Haute vitesse
- NET2280
Haute vitesse et bus PCI
MICROCHIP
- 16C745
Existe en version JW effaçable aux U.V.
- 16C765
Existe en version JW effaçable aux U.V.
CYPRESS
- AN2131
DataSheet
- Kit
de développement (Plus de 60 Mo)
- AN2135
- AN2136
-
CY7C64013
& CY7C64113 (Conseillé par Cypress pour lecteur de carte à puce)
-
CY7C64603
-
CY7C64613
-
CS5954AM
-
SL11R
(Obsolète)
MOTOROLA Liste des produits USB
-
68HC05JB2
-
68HC05JB3
-
68HC05JB4
-
68HC705JB3
-
68HC08JB1
-
68HC08KH12
Hub 4 ports
- 68HC908JB16
ROM Flash
CYPRESS
- AN2720 Permet de relier 2 PCs
-
SL11R-IDE
Permet de connecter un appareil IDE/ATAPI sur un port USB
NET CHIP
- NET1031
Scanner en un seul chip
- NET1080
Module qui permet de relier 2 PCs
MOTOROLA
- MC141555 Hub controller
- MC141556 Hub controller
F.T.D.I. Liste des produits USB
-
FT8U232AM & FT232BM Port série vers USB
- FT8U245AM &
FT245BM Port parallèle vers USB
GIGATECHNOLOGY Modules utilisant les C.I. de F.T.D.I. Liste des produits
USB
-
USBMOD1 Module RS232 vers USB
- USBMOD2 Module Port parallèle vers USB
Principal fabricant : Molex Embase femelle pour C.I. de type B : réf. 670680001 ou 670680110 ou 670680000
Le circuit d'interaface le plus documenté et apparaissant dans l'exemple
de Beyond Logic est le PHILIPS PDIUSBD11. Il est introuvable en France.
Un
certains nombre de composants sont
disponibles aux USA chez Arrow
: PDIUSBD11D, PDIUSBD12, USBN960228M, AN2131SC, CY7C64013SC, CY7C64443PVC, CY7C64603 et
613 en plusieurs versions, embase de type B.
Pour
les micro-controleurs, de nombreux livres et articles de magazine font que l'on
pourrait être tenté par le PIC 16C745-JW mais l'effacement aux U.V. n'est pas
des plus pratique. En France il est au catalogue d'au moins un distributeur
mais environ trois fois plus cher qu'aux USA. Le AN2131SC de Cypress est également
utilisé par quelques montages parus dans des revues; la documentation fournie
par Cypress est impressionnante; l'U.C. est un 8051 également très connu. Ce
circuit ne contient pas d'EPROM mais uniquement de la RAM. A la connexion un
driver spécifique (Désigné par le VID et le PID du circuit) charge cette RAM avec le programme que l'on a écrit. Le rôle
de ce driver est alors terminé, le circuit se déconnecte alors du bus puis se
reconnecte
avec vos propres VID et PID provoquant cette fois l'appel du driver correspondant à votre application. Cypress
appelle celà la ré-énumération (On lit souvent re-numération qui me semble être
une mauvaise traduction). Ce mécanisme permet un changement et une mise à jour
ultra facile du firmware que vous voulez mettre dedans.
Le projet va se dérouler
en quatre étapes :
- Le hard
- Le firmware
- Le pilote Windows
-
Le programme d'application
Pour la réalisation des circuits, lisez déjà la page d'en-tête du chapitre.
Ayant à portée de la main un super kit d'évaluation des PICs et quelqu'un qui les maitrise (Mon frère ...) je vais commencer par une carte d'interface USB à base de PDIUSBD11 que j'interfaçerai à un PIC 16F876 (C'est l'exemple de Beylond Logic.) (Voir la page sur les PICs)
D'abord le schéma; Craig conseille le pont diviseur R1 / R2 mais les entrées acceptant 5v., on pourra peut-être supprimer R2 et remplacer R1 par un strap. C5 devra peut-être passer à 6,8 µF si le bus alimente tout le montage car la norme veut que la capacité d'entrée de Vbus ne dépasse pas 10 µF au total. La ligne reset ne sera peut-être pas utilisé et dans ce cas on rammènera l'entrée "reset" à 5v. à l'aide d'un cavalier. Un autre cavalier permettra de réaliser un montage entièrement alimenté par le bus, mais attention car ce cavalier étant en place il ne faudra ABSOLUMENT PAS alimenter la platine; au contraire c'est elle qui pourra en alimenter d'autres.
3 |
bornier 2 vis pas de 5mm |
1 |
bornier 3 vis pas de 5mm |
1 |
support de C.I. 16 pattes |
1 |
circuit USB PDIUSBD11N (Si boitier CMS, faire une platine de conversion) |
1 |
régulateur LM 317 LZ |
1 |
quartz 12 Mhz |
2 |
condensateur céramique 22pF au pas de 2,54 |
3 |
condensateur plastique 100nF au pas de 7,62 ou 10,16 |
1 |
condensateur plastique 1µF au pas de 7,62 ou 10,16 |
1 |
condensateur chimique vertical 10µF, 16V au pas de 5,08 |
2 |
résistance 1/4W 22 Ohms |
1 |
résistance 1/4W 110 Ohms |
1 |
résistance 1/4W 180 Ohms |
1 |
résistance 1/4W 330 Ohms |
3 |
résistance 1/4W 4,7 kOhms |
1 |
résistance 1/4W 10 kOhms |
1 |
résistance 1/4W 330 kOhms |
1 |
résistance 1/4W 680 kOhms |
1 |
petite self d'antiparasitage torique ou perle de ferrite |
1 |
prise USB type B |
1 |
led 3mm |
On peut commander des C.I. chez Arrow USA mais il y a environ 50 € de frais de port car ils ne savent faire que de l'express par DHL.
N'ayant pas trouvé |
|
L'adaptateur se compose de deux minis circuits.
Le premier reçoit après étamage le |
Le circuit est connecté de la manière suivante à un PIC 16F876 à 4 Mhz : SCL sur port RC3, SDA sur port RC4, INT sur port RB0, SUSPEND sur port RB1, RESET sur port RB2, la led sur port RB3 et un poussoir sur RB4 (Voir platine interfaces du kit PIC). Le cavalier « Power » n'est pas installé; le circuit sera donc alimenté par la même alimentation que le PIC. Notre appareil est donc de type « self-powered ».
Nous pouvons maintenant charger
dans le PIC le micro-programme dont voici les fichiers HEX et ASM. (Version
du 10/6/2003) Ce
programme reprend pour l'essentiel la structure de l'exemple du site de Beyond Logic mais
il a été écrit en assembleur (Plus exactement avec un genre de
macro-assembleur, ce qui explique quelques bizarreries du fichier .ASM) et les messages envoyés sur le port série ont étés supprimés
: ils prenaient trop de temps et empêchaient de respecter les délais donnés
par la norme USB. Par ailleurs je me suis octroyé le VID 3333 et j'ai choisi
le PID 0001. Cet exemple énumère correctement avec le driver de
test tiré du DDK Windows 2000. Décompressez les fichiers testusb.sys et
testusb.inf dans un répertoire de votre choix. Mettez sous tension et appuyez sur le bouton poussoir pour démarrer le PIC : Windows vous annonce qu'il
a trouvé un nouveau périphérique
et vous demande le driver; donnez alors le chemin du fichier .INF. Celui-ci s'installe et le bus envoie la requête « set
configuration » : Miracle, la led de la carte USB s'allume. Vérifiez avec Regedit que dans la clé
« HKEY_LOCAL_MACHINE\Enum\USB » vous avez bien une clé « VID_3333&PID_0001 ».
Pour refaire un nouvel essai il faut supprimer cette clé, supprimer du répertoire
« Windows\système32\drivers » le fichier testusb.sys, supprimer du
répertoire « Windows\inf » le fichier testusb.inf et enfin supprimer
du répertoire « Windows\inf\others » le fichier grandzebutestusb.inf
Microsoft
nous fourni dans son DDK 2000 un programme (avec les fichiers sources)
bien utile pour examiner les bus USB; voici l'exécutable
en français.
Le
petit programme rwbulk.exe tiré du DDK de Microsoft
s'utilise dans une fenêtre DOS (Ben oui quoi !); il permet de communiquer avec notre montage.
Tapez par exemple rwbulk -r 80 -w 80 -i 1 -o 0 -v pour lire et écrire 80 octets
dans le tampon circulaire du PIC. Tapez rwbulk sans paramètres pour avoir une
liste de ceux-ci.
Pour entrer plus avant dans la réalisation d'un pilote spécifique il faut
installer dans l'ordre : Visual C++ 5 (Surtout pas la version 6 !) puis
le DDK de windows 2000 (Qui permet néanmoins d'écrire des drivers pour
Windows 98 SE). Il semble que Microsoft ne propose plus le DDK en téléchargement;
on le trouve facilement sous le nom de « Microsoft_Windows_2000_DDK_-_Driver_Development_Kit.exe »
sur le réseau eDonkey. (N'installez pas eDonkey qui va planter sur votre machine
des tas de pubs et de spywares très difficiles à retirer, mais utilisez plutôt
eMule qui est un logiciel libre et sans pubs travaillant sur le même réseau)
Visual C++ 5 devrait aussi se trouver de la même manière mais un peu plus difficilement
car il ne s'agit pas de la dernière version et on trouve surtout la version
6 qui ne convient pas.
L'utilisation du DDK se fait en mode ligne de commande.
Ouvrez une fenêtre DOS à l'aide du menu « Development Kits / Windows 2000
DDK / Free Build Environment » qui a été créé lors de l'installation du
DDK; cela positionne des variables globales nécessaires au compilateur. A
l'aide du DOS, déplacez vous vers le répertoire qui contient votre projet, puis
tapez « BUILD ». Cela compile tous les projets du répertoire ET
des sous-répertoires (Attention, si vous tapez BUILD en étant à la racine du
DDK, vous allez compiler tous les exemples du DDK : compter une bonne demi-heure
sauf interruption par Ctrl-C). N'utilisez que des noms courts (8 caractères)
pour les répertoires et les fichiers. L'édition des fichiers se fait avec un
simple éditeur (J'utilise Web Expert qui a l'avantage de numéroter les lignes
et de supporter des signets bien pratiques ou Visual Studio qui offre l'avantage
de la coloration syntaxique). Le fichier exécutable se retrouve
dans le sous répertoire « objfre\i386 »
Deux points de départ sont
possible : bulkusb, l'exemple du DDK de Microsoft ou EzUsb l'exemple de Cypress.
Je vais utiliser celui-ci; il passe sous silence un certain nombre de fonction
du "power management" et surtout évite l'emploi des horribles GUIDs
inventés par un esprit tordu ! Je préfére en effet que mon driver ait
un nom plus parlant qu'un nombre de 128 bits totalement abstrait.
Je suis
en cours de traduction est d'écriture ..... vous pouvez aller vaquer à vos occupations
habituelles car pour aujourd'hui c'est tout ...