Elec - Arduino - USB PDF
Elec - Arduino - USB PDF
Ar du i n o
Hardware 1
Shield Version 2 1
Utilisation ports entrée sortie Arduino 2
Shield Version 1 2
Schéma et implantation des composants 3
Utilisation ports entrée sortie Arduino 3
Arduino Direct 4
Leonardo 4
Software Shield USB 5
Bibliothèque 5
Installation 5
Désinstallation 5
Test carte Shield et bibliothèque 6
Définition ports entrée sortie 7
Exemples d'utilisation Erreur ! Signet non défini.
Liens et révisions document 16
Liens 16
Révision 16
Hardware
Shield Version 2
Alimentation : Le shield peut être alimenté soit par la ligne Vin (7-18v) en provenance de la
platine CPU le convertisseur buck Ic2 LM2734 se chargeant de générer le 5v, soit directement par un
5v provenant des prises Usb, la sélection étant assurée par le mosfet P T3. Le régulateur linéaire IC7
LP2985 produit le 3v3 nécessaire au circuit principal Max3421.
MAX3421EEHJ : La liaison avec la CPU est effectuée par la liaison SPI (Sck, SS, Miso, Mosi) via le
connecteur 6points ICSP dédié et la ligne D10 du connecteur J3, le signal GPX effectue un retour du
Max3421 vers la CPU (ligne D8/J3) . La conversion des signaux en niveau 5v de la CPU en 3v3 du
Max3421 est réalisée par les buffers IC1,3 et 5.
Reset : Le poussoir intégré sur le shield permet le reset de l'Arduino et du Max3421, ce dernier
peut être réinitialisé indépendamment par la sortie D7 de l'Arduino.
Connecteurs de sortie : Plusieurs E/S en provenance directe de l'Arduino sont reportées sur des
connecteurs au format HE14 selon le tableau suivant
TWI-In, TWI-Out (Blanc) SCL, SDA, +5v, Gnd Liaison I2c cascade
Out5 (Orange) +5v, D5, Gnd Sortie digitale Arduino 5
Out6 (Orange) +5v, D6, Gnd " " 6
In2 (Blanc) +5v, A2, Gnd Entrée analogique 2
In3 +5v, A3, Gnd " " 3
Uno
D5 Connecteur auxiliaire Out-D5 A2 Connecteur auxiliaire In-A2
D6 Connecteur auxiliaire Out-D6 A3 Connecteur auxiliaire In-A3
D7 Reset - Max 3421 A4 Connecteur auxiliaire I2c-Sda
D8 Gpx - Max 3421 A5 Connecteur auxiliaire In-Scl
D9 Int - Max3421
D10 /SS - Liaison SPI Max 3421
D11 Mosi - Liaison SPI Max 3421
D12 Miso - Liaison SPI Max 3421
D13 Sck- Liaison SPI Max 3421
Mega
D5 Connecteur auxiliaire Out-D5 A2 Connecteur auxiliaire In-A2
D6 Connecteur auxiliaire Out-D6 A3 Connecteur auxiliaire In-A3
D7 Reset - Max 3421
D8 Gpx - Max 3421
D9 Int - Max3421 Sda Connecteur auxiliaire I2c-Sda
D50 Miso - Liaison SPI Max 3421 Scl Connecteur auxiliaire In-Scl
D51 Mosi - Liaison SPI Max 3421
D52 Sck- Liaison SPI Max 3421
D53-D10 /SS - Liaison SPI Max 3421
Du fait de l'utilisation des ports D7 a D9 par les signaux Reset et Gpx il ne sera pas possible
d'utiliser un shield LCD standard avec les platines Mega, une platine Uno étant exclue d'office par
l'utilisation de la liaison SPI.
Shield Version 1
Première version du shield USB, se trouve communément
à bas cout via de multiples revendeurs asiatiques.
L'alimentation 5v de la prise Usb et 3v3 du contrôleur est
prise directement sur les sources de la carte CPU hôte,
attention avec les périphériques gourmands.
Le contrôleur Max3421 est piloté de la manière la plus basique toujours par la liaison SPI et les
signaux SS de validation et Int, par défaut Gpx n'est pas relié.
Uno Mega
Nc Gpx - Max 3421 Nc Gpx - Max 3421
D9 Int - Max3421 D9 Int - Max3421
D10 /SS - Liaison SPI Max 3421 D10 /SS - Liaison SPI Max 3421
D11 - ICSP Mosi - Liaison SPI Max 3421 D51 - ICSP Mosi - Liaison SPI Max 3421
D12 - ICSP Miso - Liaison SPI Max 3421 D50 - ICSP Miso - Liaison SPI Max 3421
D13 - ICSP Sck- Liaison SPI Max 3421 D52 - ICSP Sck- Liaison SPI Max 3421
Leonardo
Installation
Avant toute utilisation du shield la bibliothèque doit être installée afin d'être referencée par l'IDE
Arduino. Ce dernier devra être impérativement d'une version supérieure a 1.6 pour éviter les erreurs
de compilation, la version initiale 1.0.6 de l'IDE provoquera par exemple des erreurs lors de la
compilation avec le module [Link] ([Link]: error: 'atan2f' was not declared in this scope).
La dernière version 2 de la bibliothèque USB peut être récupérée à cette adresse (Env. 400ko) :
[Link]
Attention aux noms de fichiers zip et des répertoires qui ne doivent contenir aucun espace ni
caractères spéciaux hormis _ et -.
La bibliothèque "Usb host shield library 2.0" doit apparaitre dans la liste des bibliothèques
disponibles a partir du menu Croquis/Inclure une bibliothèque de l'IDE.
Désinstallation
L'envoi d'une valeur ascii par la boite de dialogue envoyer du moniteur série permet de continuer
la procédure de test.
La platine se met en attente du branchement d'un périphérique USB, dans les exemples suivants,
a droite un clavier d'ordinateur PC simple, a gauche une clé mémoire 4Go.
Reset complete. Waiting for the first SOF... Reset complete. Waiting for the first SOF...
Getting device descriptor Getting device descriptor
Descriptor Length: 12 Descriptor Length: 12
Descriptor type: 01 Descriptor type: 01
USB version: 0110 USB version: 0200
Device class: 00 Device class: 00
Device Subclass: 00 Device Subclass: 00
Device Protocol: 00 Device Protocol: 00
[Link] size: 08 [Link] size: 40
Vendor ID: 04F3 Vendor ID: 0781
Product ID: 0103 Product ID: 5567
Revision ID: 0105 Revision ID: 0200
[Link] index: 00 [Link] index: 01
[Link] index: 00 [Link] index: 02
Serial number index: 00 Serial number index: 03
Number of conf.: 01 Number of conf.: 01
All tests passed. Press RESET to restart test All tests passed. Press RESET to restart
Il est possible d'utiliser pour les signaux SS et Int des valeurs de ports différentes de celles
configurées par défaut ( SS=Dig10 et Int=Dig9 ). La déclaration de ces valeurs se fait dans le ficher
usbcore.h de la bibliothèque par modification de la ligne suivante avec les nouvelles valeurs de port
pour SS et Int.
Cette opération sur les shield de première version est facilement réalisable par coupure des
ponts Sj7 et Sj8 et permet sur une carte de type Mega d'utiliser un shield LCD standard au dessus du
shield USB (Ceci n'est pas réalisable a partir d'une carte CPU Uno en raison de l'utilisation des ports
11 a 13 par la liaison SPI.
Plusieurs déclarations de librairies externes sont nécessaires pour l'utilisation du shield, vérifier
avec les applications exemples pour déterminer celles nécessaires en fonctions des périphériques
connectés.
// Satisfy the IDE, which needs to see the include statment in the ino too.
#ifdef dobogusinclude //Nécessaire pour inclusions correcte sous librairies
#include <spi4teensy3.h> //Librairies liaison SPI obligatoires
#include <SPI.h>
#endif
[Link]("Start hub_demo");
Fichiers librairie
Pgmstings.h
Utilisé pour l'affichage des valeurs et paramètres de configuration des périphériques USB.
Associe plusieurs constantes a des chaines texte stockées en mémoire flash. Chaque message texte
est précédé des commandes retour chariot / nouvelle ligne et terminé par une ou plusieurs
tabulations.
Cet exemple fourni dans la bibliothèque USB permet l'affichage des caractéristiques du
périphérique lors de se connexion. Il permettra par exemple de vérifier que ce périphérique pourra
être considéré de manière standard par le système.
Le tableau suivant donne les valeurs retournées pour plusieurs périphériques HID, claviers,
souris, et deux hubs auto alimentés.
Clavier +
Souris Pave Joypad Clé mem
Clavier Souris HUB HDD
Sans fil numérique Guillemot 4 GO
Sans fil
Device descriptor
Descriptor Length: 12 12 12 12 12 12 12 12
Descriptor type: 1 1 1 1 1 1 1 1
USB version: 110 110 110 100 110 200 200 200
Device class: 0 0 0 0 9 0 0 0
Device Subclass: 0 0 0 0 0 0 0 0
Device Protocol: 0 0 0 0 0 0 0 0
[Link] size: 8 8 8 8 8 40 40 40
Vendor ID: 04F3 046D 458 06F8 409 1BCF 0781 04A9
Product ID: 103 C51B 00A1 7 55AB 0C31 5567 3146
Revision ID: 105 4600 218 288 200 0132 0200 0002
[Link] index: 0 1 1 1 0 1 1 1
[Link] index: 0 2 2 2 0 2 2 2
Serial number index: 0 0 0 0 0 3 3 0
Number of conf.: 1 1 1 1 1 1 1 1
Configuration descriptor
Total length: 003B 003B 003B 22 19 20 20 27
[Link]: 2 2 2 1 1 1 1 1
[Link]: 1 1 1 1 1 1 1 1
[Link]: 0 4 0 0 0 4 00 0
Attr.: A0 A0 A0 80 E0 C0 80 C0
[Link]: 32 31 32 32 32 01 32 01
Interface descriptor
[Link]: 0 0 0 0 0 0 0 00
Alt.: 0 0 0 0 0 0 0 00
Endpoints: 1 1 1 1 1 2 2 03
Intf. Class: 3 3 3 3 9 8 8 06
Intf. Subclass: 1 1 1 0 0 6 6 01
Intf. Protocol: 1 2 1 0 0 50 50 01
[Link]: 0 0 0 0 0 05 00 00
Unknown descriptor
Length: 9 9 9 9
Type: 21 21 21 21
100100012 110100012 000100012 000100012
Contents: 236000000 243000705 241000705 23B000705
Endpoint descriptor
Endpoint address: 81 81 81 81 81 81 81 81
Attr.: 3 3 3 3 3 2 2 02
[Link] size: 8 8 8 6 1 40 40 0040
Polling interval: 0A 0A 0A 0A FF 00 00 00
Interface descriptor
[Link]: 1 1 1
Alt.: 0 0 0
Endpoints: 1 1 1
Intf. Class: 3 3 3
Endpoint descriptor
Endpoint address: 82 82 82 02 02 83
Attr.: 3 3 3 02 02 03
[Link] size: 3 8 8 40 40 0008
Polling interval: 0A 0A 0A 00 00 20
Device descriptor
Cette section concerne le descriptif général du périphérique, on trouvera en particulier :
• Usb version : Version et vitesse de fonctionnement du périphérique (Usb 1.1 ou Usb 2).
• Device class : Type de périphérique, soit défini directement ou plus généralement si
valeur égale a 0 défini dans la section interface descriptor.
Valeur courantes device class
00 : Défini dans interface class 08 : Stockage de masse (Hdd, Clé mem)
01 : Audio 09 : Hub
02 : Communication (Modem, Ethernet) 0B : Lecteur de carte a puce
03 : HID (Clavier, Souris, Joystick ) 0E : Video
06 : Image (Scanner, Apn …) 10 : Audio/video
07 : Imprimantes E0 : Sans fil (Wifi, bluetooth ..)
Les caractéristiques du périphériques peuvent être vérifiées avec une recherche sur le web des
valeurs des registres Vendor Id et Product id, ou a l'aide du tableau disponible a cette adresse par
exemple : [Link]
Interface descriptor
Cette section se rapporte plus aux fonctionnalités offertes par le périphérique. Plusieurs sections
d'interface descriptor différentes peuvent être proposées par un seul périphérique a l'exemple de
l'ensemble clavier / souris sans fil.
Bibliothèque HidBoot.h
Les périphériques HID peuvent utiliser des protocoles propriétaires associés à des drivers
spécifiques. Certains utilisent un tronc commun USB-Boot standardisé par l'USB-IF permettant un
fonctionnement minimal de base sans charger ces drivers. C'est ce protocole de base qui sera utilisé
par exemple pour accéder au bios d'une carte mère à l'aide d'un clavier lors de son démarrage.
Seuls ces derniers périphériques sont gérés par la bibliothèque HidBoot native, comme les
claviers et souris standard, certains périphériques fonctionnant en mode émulation clavier comme
certains scanners code barre peuvent aussi être pris en charge.
Se rapporter au document " Device Class Definition for Human Interface Devices (HID) " édité par
l'USB implementers' forum :
[Link]
Pour pouvoir être géré par les fonctions clavier/souris de la bibliothèque le périphérique devra
renvoyer ces valeurs suivantes dans la section Interface descriptor lors d'un test avec l'exemple
USB_desc :
Dans la liste des périphériques analysés a titre d'exemple dans le chapitre gestion USB, la
bibliothèque HidBoot fonctionnera avec les différents claviers et souris listés mais ne fonctionnera
pas avec le joypad guillemot ni bien sur avec les hubs et autres périphériques.
[Link]
Scan code
Touche A Cap look + A 7 pavé num. Ver num puis 7 Shift Q Ctrl + AltGr + Q
DN >14< DN >39< DN >5F< DN >53< LeftShift changed RightAlt changed
ASCII: q UP >39< UP >5F< UP >53< DN S >04< LeftCtrl changed
UP >14< DN >14< DN >5F< ASCII: A DN C >04< A
ASCII: Q ASCII: 7 UP S >04< ASCII: a
UP >14< UP >5F< LeftShift changed UP C >04< A
RightAlt changed
LeftCtrl changed
[Link]
La valeur de retour de la souris est renvoyée dans la structure MOUSEINFO associée dans
l'exemple à la variable mi. Cette structure sur 3 octets a la forme suivante :
• Octet 1 : 3 premiers bits = position boutons (Gauche, Droit, Central) et 5 bits vides.
• Octet 2 : Valeur de déplacement X de la souris depuis le dernier appel de la collection.
• Octet 3 : " " Y " "
L'association de la classe ainsi crée a l'objet Usb après sa déclaration est réalisée dans les lignes
suivantes ? Comme pour le clavier pas d'info sur le fonctionnement de ces lignes pour le moment.
Liens
Révision
[Link]
[Link]
4444jjjjj