Ce circuit spécialisé pour USB est inspiré de mes projets précédents
Multiuse Tiny 1 et
Multiuse PCB2.
Cette fois, comme un micro-contrôleur supportant USB nativement est utilisé, il est possible
de communiquer en mode pleine vitesse (Full speed) 12 Mbit/s alors qu'avant, puisqu'un stack
logiciel (V-USB) était utilisé, la vitesse était limitée à 1.5Mbit/s (Low speed).
Outre la vitesse de transfert plus élevée, il est également possible de faire en sorte que
l'hôte (le PC) interroge l'adaptateur à des intervalles plus rapprochés, ce qui est d'une aide
irremplaçable pour réduire les délais (latency).
Finalement, puisque le logiciel n'a plus à s'occuper de la communication USB en temps réel,
certaines contraintes tombent. Par exemple, l'impossibilité déactiver les interruptions lors
d'opérations dont le timing est critique, un obstacle majeur dans certains cas, n'est plus.
Caractéristiques:
Micro-contrôleur Atmel atmega32u2 cadencé à 16MHz.
Connecteur mini USB
8 pads d'entrée/sortie
Pads 3.3v, 5v et GND disponibles sur la face supérieure.
Régulateur 3.3v LM1117-3.3 (800mA LDO) à bord
Dimensions: 1.825" x 0.619" x 0.217" (46.36mm x 15.73mm x 5.5mm)
Pré-programmé avec le bootloader DFU d'atmel. Programmez votre propre firmware par USB sans outils spéciaux!
Un connecteur mini-USB est soudé directement sur le circuit, alors pour USB il suffit simplement
de brancher le câble. Pour les autres signaux, des PADs sont disponibles sur l'une ou l'autre des faces.
Signal
Face
Étiquette
PD0 (INT0/AIN0)
Supérieure
0
PD1 (INT1/AIN1)
Supérieure
2
PD2 (INT2/AIN2/RXD1)
Supérieure
1
PD3 (INT3/TXD1)
Supérieure
3
PB1 (SCLK)
Inférieure
SCK
PB2 (MOSI)
Inférieure
MOSI
PB3 (MISO)
Inférieure
MISO
PD7 (HWB)
Inférieure
HWB
Face supérieure
Face inférieure
Oui, les étiquettes 2 et 1 sont inversées.
Schéma
Rien de bien compliqué ici, mais voici tout de même quelques précisions:
Les résistances « pull up » R5 à R8 peuvent être alimentés soit à 3.3v (configuration par défaut) ou à 5 volt (option). C'est l'installation de R15 plutôt que R13
qui permet de faire le choix.
Les résistance séries R9 à R12 aident à protéger les entrées/sorties du micro-contrôleur. Comme elles ne sont que de 22Ω (valeur plutôt basse) elle ne nuisent
pas au fonctionnement.
Les composantes identifiées « DNP » ne sont pas installées par défaut. (Note: DNP = Do Not Place [ne pas installer])
Programmation
Option 1 : Bootloader DFU
L'IC Atmega32u2 sur lequel est basé ce circuit est programmé à l'usine d'Atmel avec un bootloader USB DFU (Device Firmware Update). Il est donc possible
d'y installer un firmware sans équipement supplémentaire en utilisant un logiciel prévu à cette fin du côté PC.
Pour pouvoir installer un firmware, il faut cependant d'abord entrer dans le bootloader. Il y a différentes manières d'y arriver:
Lorsque le chip est neuf, il suffit de brancher le câble USB car le bootloader ne fait rien lorsqu'aucun firmware n'est installé.
Si le chip a déjà été programmé, il faut soit:
Utiliser une commande spécifique au firmware pour sauter vers le bootloader.
Effectuer un reset via le PAD reset tout en maintenant signal HWB à zéro (gnd)
Un logiciel côté PC fonctionnant bien pour programmer: dfu-programmer. C'est ce que j'utilise.
# Programmation d'un firmware avec dfu-programmer:
$ dfu-programmer atmega32u2 erase # Étape 1: Efface le firmware courant
$ dfu-programmer atmega32u2 flash ppusbcomm.hex # Étape 2: Programme le nouveau firmware
$ dfu-programmer atmega32u2 start # Étape 3: Démarrage du nouveau firmware
Option 2 : AVR-ISP
Ceci est la méthode traditionnelle de programmation des micro-contrôleurs AVR effectuée avec un outil spécial. Cette méthode n'est pas normalement nécessaire mais
peut parfois servir:
Pour installer un bootloader différent
Pour utiliser l'espace flash au complet
Pour modifier les « fuse bytes »
Les signaux nécessaires sont exposés via les PADs sur la face inférieure du circuit. Il suffit de souder les 6 fils à un connecteur 2x3 correspondant
au programmeur. Pour plus d'informations sur l'équipement requis, voir ma page sur la programmation d'AVR.
Développement
LUFA
Je recommande d'utiliser LUFA (http://www.fourwalledcubicle.com/LUFA.php) comme infra-structure USB. La popularité
du projet LUFA fait qu'il y a des tonnes d'exemples pour toutes sortes de périphériques USB et un bon mailing list
si jamais il vous faut de l'aide.
Voici un exemple simple utilisant LUFA: MouseShaker.tar.gz. Ce firmware, dérivé de l'exemple Demos/Devices/ClassDriver/Mouse fourni avec LUFA
implémente une souris dont le pointeur tourne en rond. Presque utile pour empêcher l'écran de veille de s'activer.
Alternatives à LUFA
La documentation de LUFA mentionne quelques alternatives. Je n'ai essayé aucunes d'entre elles. Alternative USB AVR Stacks
Tout faire sois-même
Il est bien sûr possible de développer son propre code USB en programmant les registres du micro-contrôleur directement (c'est ce que j'ai fait pour le projet PPUSBComm).
C'est très bien pour apprendre et bien comprendre ce qui se passe, et aussi pour avoir les droits d'auteur afin de pouvoir être complètement libre quant à la manière
de l'utiliser. Par contre, il faut être prêt à y passer beaucoup de temps.
PPUSBComm est un outil permettant de copier des fichiers depuis un système Linux doté d'un port USB vers un système tournant sous DOS via son port parallèle.
Projets usagers
Si vous avez publié un projet que vous avez réalisé sur ce PCB, faites moi en part!
FAQ
Si vous avez des questions, n'hésitez pas à m'écrire.
En attendant, voici quelques entrées anticipés:
Q: Où puis-je me procurer ce circuit?
R: Il est offert en version pré-assemblé, incluant un câble USB et une gaîne thermorétractable dans mon magasin en ligne.
Q: Pourquoi avoir fait un nouveau circuit alors que des options similaires (Teensy par exemple) existent déjà à bas prix?
R: Pour avoir exactement et tout ce que je voulais:
Dimensions adéquates pour fabriquer mes adaptateurs (ex: Pour pouvoir protéger le circuit avec une gaine thermorétractable, les fils doivent
sortir aux extrémités)
Pour avoir un régulateur 3.3v capable d'alimenter plusieurs manettes Gamecube et N64
Pour avoir des pull-up externes vers 3.3v alors que le micro-contrôleur est alimenté à 5volt
Pour les faire fabriquer en grande quantité et avoir le meilleur prix (ce qui se traduit par des adaptateurs finis à un prix plus compétitif).
Avertissement
Je ne saurais être tenu responsable pour les dommages
que l'utilisation des informations ou la mise en œuvre des instructions présentées
sur cette page pourrait causer à votre équipement,
à vous-même ou à autrui. Aussi, je ne donne aucune garantie quant
à l'exactitude des informations et à leur fonctionnement.