lundi 12 janvier 2015

  

Un copieur vidéo pour lecteurs DVD et magnétoscopes

 
Cet appareil nettoie et régénère le signal de sortie des lecteurs de disques optiques (communément appelés “lecteurs de DVD”).
Il permet un parfait visionnage de tous les disques audiovisuels, y compris ceux affublés de systèmes de protection contre la copie pirate et, de ce fait, affectés de perturbations plus ou moins accentuées. Il agit de la même manière pour les signaux sur cassettes vidéo. Bien entendu, il ne doit être utilisé que dans le cadre de la loi.


Les fournisseurs de produits audiovisuels sur cassette vidéo ou DVD ont mis en oeuvre des procédés de protection contre la copie abusive, mais ceux-ci dégradent également la vision normale et licite du produit. Les techniques adoptées introduisent des interférences que les magnétoscopes ou les lecteurs de DVD ne réussissent parfois pas à supprimer.
Voilà bien un paradoxe, un de ceux dont notre monde postmoderne a le secret : l’usager payant “plein pot” une cassette ou un DVD qu’il visionne en famille sans en faire la moindre copie, même de sauvegarde, doit supporter les désagréments normalement destinés à gêner (car au fond ils n’empêchent rien) les pirates numériques.
Dans l’attente de méthodes de protection ne lésant pas le “visionneur” honnête, la seule solution pour goûter correctement un film en cassette ou en DVD, sans avoir à changer son matériel de lecture, consiste à insérer avant la prise péritel (SCART) de son téléviseur ou de son magnétoscope, un filtre en mesure de restaurer le signal vidéo et d’en permettre un parfait visionnage.

Notre montage
Cet article vous propose justement la réalisation d’un dispositif de ce type, un filtre numérique régénérant la composante vidéo et restituant un signal débarrassé de toute perturbation, bien visible sur n’importe quel téléviseur et enregistrable sur n’importe quel magnétoscope à cassettes.
Ce montage, consacré à la lecture sereine des films en DVD, fonctionne par échantillonnage du signal d’entrée, extraction des composantes significatives et par suite régénération d’un autre signal composite dans lequel les synchronismes sont synthétisés et par conséquent débarrassés des altérations introduites par les systèmes de protection.
Entre autres avantages, notre appareil travaille (c’est-à-dire reconstruit les synchronismes et les parties du signal vidéo) seulement quand il détecte des perturbations : dans le cas contraire, le signal vidéo transite par l’appareil sans aucune intervention de celui-ci.



Le fonctionnement
Avant de passer à l’examen du schéma électrique, expliquons dans les grandes lignes comment le filtre travaille, ledit schéma n’en sera ensuite que plus compréhensible. A la différence de beaucoup de dispositifs du commerce, le nôtre ne coupe pas les premières lignes de chaque image : ainsi, on a la garantie qu’aucune information éventuelle concernant la télé-vidéo n’aura été éliminée. Il est en outre capable de détecter la présence de la composante de protection et de faire en conséquence : si le signal entrant n’est pas protégé, il se déconnecte (il devient “transparent”) et, au moyen d’interrupteurs CMOS, transfère la composante vidéo directement de l’entrée vers la sortie. Si, en revanche, il détecte un code de protection, il se connecte et élabore le signal restauré.
Parmi les fonctions installées, il a été prévu un indicateur de niveau permettant de visualiser le niveau de bruit dû à la protection. Une LED indique aussi (en s’allumant) que l’oeuvre audiovisuelle qu’on est en train de regarder est codée et donc que le filtre est en fonction.
Mais, si les détails vous intéressent, il est temps maintenant de jeter un coup d’oeil au schéma électrique.

Copier un DVD est illégal… mais obtenir un signal vidéo “propre” est un droit !


Vous savez sans doute tous que la duplication d’un DVD (comme, d’ailleurs, celle d’un CD, d’une cassette audio ou vidéo) est absolument illégale. Malgré cela, les copies pirates sont toujours plus nombreuses dans le monde. C’est pourquoi les producteurs de disques et de cinéma étudient sans cesse des systèmes anti-copie afin de sauvegarder leur intérêt commercial. Dans le domaine du DVD, il existe quatre formes de protection contre les copies :

1) CGMS
Chaque disque contient des informations supplémentaires indiquant si le contenu peut ou non être dupliqué.
C’est un système conçu pour empêcher les copies en série ou les copies des copies. L’information CGMS est incorporée au signal de sortie vidéo. Pour que le CGMS puisse fonctionner, l’appareil créant la copie doit reconnaître et respecter le CGMS. Le standard analogique (CGMS/A) code les données sur ligne 21 NTSC (dans le service XDS).
Le standard numérique (CGMS/D) est appliqué aux connexions numériques comme IEEE 1394/FireWire.

2) Content Scrambling System (CSS)
Le “Content Scrambling System” (CSS) est un schéma de cryptage et d’authentification des données prévu pour éviter la copie des “files” (fichiers) vidéo directement à partir du disque. Le CSS a été développé principalement par MATSUSHITA et TOSHIBA. A chaque licencié du CSS est attribuée une clé parmi un “set” principal de 400 clés mémorisées sur chaque disque crypté avec CSS. Cela permet d’annuler une licence en ôtant la clé correspondante des futurs disques. L’algorithme de décryptage CSS échange les clés avec le “drive”, de manière à produire une clé de cryptage qui est ensuite utilisée pour confondre l’échange des clés du disque et du titre, nécessaires pour décrypter les données du disque. Les lecteurs de DVD ont des circuits CSS décryptant les données avant qu’elles soient décodées et visualisées.
Quant aux ordinateurs, le matériel et le logiciel de décodage DVD doivent inclure un module de décryptage CSS.
Tous les “drive” DVD-ROM ont un “firmware” (programme résidant en ROM) additionnel afin de remplacer les clés d’authentification et de décryptage par le module CSS dans le PC. Depuis le début 2000, les nouveaux lecteurs DVD-ROM doivent supporter la gestion des régions en union avec le CSS. Les constructeurs d’appareils utilisés pour visionner les DVD-vidéo (unités, puces de décodage, logiciels de décodage, platines vidéo, etc.) doivent demander une licence CSS. Il n’y a pas de coûts pour une licence CSS, mais il s’agit d’un processus très lent et il est donc conseillé, pour les intéressés, de les appliquer le plus tôt possible. A la fin 1997, les licences CSS ont finalement été concédées pour le décodage logiciel.
La licence est extrêmement restrictive et ce dans l’espoir de maintenir secrètes les clés de l’algorithme du CSS. Mais il n’est pas possible de maintenir secret longtemps ce qui est utilisé sur des millions de lecteurs dans le monde entier. En octobre 1999, l’algorithme CSS a été violé et diffusé sur Internet, ce qui a provoqué d’infinies controverses et batailles juridiques.

3) Digital Copy Protection System (DCPS)
Pour obtenir que les connexions numériques entre les éléments ne permettent pas de parfaites copies numériques, CEMA 5 a proposé des systèmes de protection numérique des copies. Le principal est le DTCP (“Digital Transmission Content Protection”), se basant sur IEEE 1394/FireWire mais pouvant être appliqué à d’autres protocoles. L’ébauche du système proposé (appelé 5C pour les 5 maisons l’ayant développé) a été faite par INTEL, SONY, HITACHI, MATSUSHITA et TOSHIBA en février 1998. SONY a distribué une puce DTCP mi 1999. Sous le DTCP, les dispositifs numériquement connectés, comme un lecteur DVD et un téléviseur ou un enregistreur vidéo numérique, on échange des clés et certificats d’authenticité afin d’établir un canal sécurisé. Le lecteur DVD crypte le signal audiovisuel codifié et l’envoie au dispositif de réception devant le décrypter. Cela interdit aux autres dispositifs connectés mais non authentifiés d’intercepter le signal. La sécurité peut être “rénovée” par un nouveau matériel (comme de nouveaux disques ou de nouvelles émissions) et par de nouveaux dispositifs contenant des clés mises à jour et listes de révocation (afin d’identifier les dispositifs non autorisés ou compromis).
Une proposition analogique, XCA (eXtended Conditional Access), de ZENITH et THOMSON, est semblable au DTCP mais fonctionne avec une interface numérique à une seule voie (comme le EIA-762 RF remodulateur standard) et utilise des cartes smart pour mettre à jour le système de sécurité.
D’autres propositions ont été faites par MRJ Technology, NDS et PHILIPS. Pour les cinq, le matériel est marqué par un “flag” (indicateur d’état) de type CGMS comme “librement copiable”, “copiable une fois”, “non copiable” et parfois “n’est plus copiable”. Les dispositifs numériques ne faisant pas autre chose que reproduire de l’audio et de la vidéo pourront recevoir toutes les données (étant donné qu’ils sont reconnus comme appareils de lecture seule). Les dispositifs d’enregistrement numérique sont en mesure de recevoir seulement les données marquées comme copiables et doivent changer le “flag” en “ne pas copier” ou “n’est plus copiable” si l’original est marqué “copiable une fois”. Le système numérique CPS est conçu pour la prochaine génération de téléviseurs numériques, récepteurs numériques et enregistreurs vidéo numériques. Il réclamera de nouveaux lecteurs DVD avec connecteurs numériques (comme dans les appareils DV).

4) Analog CPS
La copie sur cassette vidéo analogique est empêchée par un circuit de protection présent sur chaque lecteur. Le terme générique est APS (Analog Protection System). Même la platine vidéo d’un ordinateur avec sortie vidéo-composite ou S-vidéo (Y/C) doit utiliser l’APS.
Cette méthode de protection ajoute un signal “colorburst”, modulé rapidement (“Colorstripe”) avec impulsions dans le signal de synchronisme vertical (“AGC”), aux sorties vidéo-composites et S-vidéo. Cela confond les circuits du synchronisme et du niveau automatique d’enregistrement dans 95 % des magnétoscopes du commerce. Cependant, cela peut impliquer une dégradation de l’image, surtout avec des appareils anciens ou hors standard : ce type de protection peut se manifester sous forme de raies de couleur, distorsion, rotation, images en N/B et alternance de clairs/sombres. Cela provoque des problèmes à beaucoup de doubleurs de ligne. Les disques contiennent des “bits de régulation” indiquant au lecteur s’il doit ou non activer la protection contre l’ajout optionnel de raies colorées à 2 ou 4 lignes. Les régulations se produisent environ une fois par seconde, ce qui permet de paramétrer simplement quelle partie de la vidéo est protégée et laquelle ne l’est pas. Tout comme pour les cassettes vidéo, certains DVD sont protégés et d’autres ne le sont pas.
Comme on peut facilement le comprendre d’après les brèves explications précédentes, les trois premières méthodes de protection agissent de façon directe afin d’empêcher la copie du DVD et la dernière, “l’Analog CPS”, détériore le signal vidéo de sortie en utilisant la fonction de contrôle automatique de gain présente dans les magnétoscopes. Cela peut déterminer des variations de luminosité de l’image, même pendant la lecture.
C’est assurément une injustice !
Après avoir fait (voir les pubs sur le “Home” Cinéma, on devrait d’ailleurs dire “Home Movie” tant qu’à faire) dépenser des fortunes à l’usager pour l’acquisition de son “Home Theatre” avec DVD, Dolby surround et écran géant de 32 pouces, le signal vidéo visionné est finalement et tout de même détérioré par un système de protection censé décourager les “vidéopirates”… Flagrant délit d’absurdité : il nous sera plus avantageux de voir une vidéo diffusée par ces derniers car elle aura été débarrassée des protections qui gênent notre lecture et qui n’auront pas le moins du monde su gêner leur piratage !


Figure 1 : Notre filtre DVD.

La figure du haut montre les détails du signal de perturbation inséré par le système de protection : des pics très élevés de luminosité positionnés dans une zone normalement non visible de l’écran du téléviseur. En fait, il s’agit de signaux présents dans le synchronisme de cadre.
La seconde image montre, en revanche, le signal vidéo avant le filtre stabilisateur et après le passage par notre appareil. On remarque tout de suite que les pics de luminosité perturbant le signal vidéo ont été éliminés.

Le schéma électrique
Examinons le schéma électrique de la figure 2 dans ses principaux éléments.
Le circuit filtre le signal vidéo et le régénère grâce à un puissant XC9572XL, un CPLD (dispositif à logique programmable) élaborant les composantes du signal vidéo-composite prélevées sur un séparateur de synchronisme. Ce dernier (U5), un LM1881, extrait du signal vidéo quatre nouveaux signaux : un synchronisme composite (H+V) et le synchronisme vertical, le “burst” (éclatement) et une forme d’onde qui communique au processeur U6 la succession des lignes paires et impaires.
Le “burst” de chrominance extrait du LM1881 est prélevé sur la broche 5 et atteint la broche 36 de la puce XILINX où il est échantillonné, avec ensuite séparation du niveau du noir (amplitude maximum avant les impulsions de synchronisme) de la composante couleur proprement dite. Cette dernière est régénérée débarrassée de toutes les perturbations typiques de la protection, de telle sorte que le nouveau signal de chrominance apparaît débarrassé des pics que l’on apercevrait en examinant le signal vidéo-composite original avec un oscilloscope numérique.
Une autre opération accomplie par U6 consiste en l’élimination de la composante continue ajoutée à la chrominance et ensuite superposée en sortie au niveau du noir.
La puce XILINX travaille à une fréquence très élevée afin de garantir les meilleures prestations en matière de traitement des signaux vidéo. Le “clock” (horloge) est obtenu par un générateur externe à 24 MHz, un oscillateur à quartz alimenté par la ligne du 5 V, fournissant son signal à travers R26 (elle protège la broche 5 de U6, étant donné que l’oscillateur travaille à 5 V alors que U6 fonctionne sous 3,3 V). Le niveau du noir, correspondant à l’amplitude maximale du signal vidéo-composite, passe à travers le réseau U7, U2b et U3b : pour être précis, il est obtenu par abattement du signal vidéo proprement dit au moyen du filtre passe-bas R10/C10.
Le filtre permet d’obtenir une composante quasi continue dont l’amplitude est celle du noir. Quand le circuit est en fonction, la broche 26 de U6 pilote la 5 de l’interrupteur CMOS U2b avec un signal rectangulaire faisant commuter ce composant, de telle sorte qu’il s’ouvre et se ferme très rapidement.
Cela détermine de brefs instants durant lesquels la composante vidéo sortant du “buffer” (tampon) U7 passe par le filtre R10/C10. Une sorte d’échantillonnage permettant, justement, d’obtenir le niveau du noir. La tension qui en dérive traverse le “buffer” U3b, passe de sa broche 1 à l’entrée d’un autre interrupteur CMOS U2d. Pour la superposition de la chrominance régénérée, le circuit se fie à U2c, commandé à travers la broche 25 par le circuit intégré XILINX. Le signal vidéo ainsi reconstruit est envoyé par U2d (géré par la broche 27 de U6) à U8 (un amplificateur opérationnel rapide de type OPA353, en tout point identique à U7, monté en “buffer” d’entrée) configuré en mode non inverseur pour un gain en tension de 2. Cette amplification sert à compenser la perte due au fait que R23 et R24 (en parallèle pour faire 75 ohms) forment un pont avec l’impédance d’entrée du téléviseur ou du magnétoscope connecté à la sortie de notre appareil. Comme cette impédance est de 75 ohms, le pont divise l’amplitude par deux. Voici comment, en amplifiant deux fois et en divisant par deux, avec U8 on obtient une adaptation d’impédance sans altérer le niveau du signal, lequel reste au standard de 1 Vpp, comme cela s’impose pour des dispositifs travaillant avec des signaux vidéo-composites.

Figure 2 : Schéma électrique du filtre électronique.

Liste des composants
R1 = 150 Ω
R2 = 150 Ω
R3 = 47 kΩ
R4 = 47 kΩ
R5 = 680 kΩ
R6 = 220 Ω
R7 = 220 Ω
R8 = 2,2 kΩ
R9 = 330 Ω
R10 = 1,5 kΩ
R11 = 2,2 kΩ
R12 = 47 kΩ
R13 = 47 kΩ
R14 = 18 kΩ
R15 = 10 kΩ
R16 = 220 Ω
R17 = 2,2 kΩ
R18 = 2,7 kΩ
R19 = 47 kΩ
R20 = 47 kΩ
R21 = 1 kΩ
R22 = 1 kΩ
R23 = 150 Ω
R24 = 150 Ω
R25 = 3,3 kΩ
R26 = 100 Ω
R27 = 22 Ω 1/2 W
C1 = 100 nF
C2 = 10 μF 63 V électro.
C3 = 10 μF 63 V électro.
C4 = 100 nF
C5 = 100 nF
C6 = 100 nF
C7 = 100 nF
C8 = 100 pF céramique
C9 = 100 nF 63 V polyester
C10 = 100 nF
C11 = 22 μF 35 V électro.
C12 = 22 μF 35 V électro.
C13 = 47 μF 25 V électro.
C14 = 100 nF
C15 = 220 μF 50 V électro.
C16 = 10 μF 36 V électro.
C17 = 100 nF
C18 = 220 μF 50 V électro.
C19 = 100 nF
C20 = 100 nF
C21 = 220 μF 50 V électro.
C22 = 100 nF
C23 = 470 μF 25 V électro.
C24 = 47 μF 25 V électro.
C25 = 100 nF
D1 = 1N4148
D2 = 1N4148
D3 = 1N4148
D4 = 1N4007
DZ1 = 3,3 V 1 W
LD1 = LED verte 3 mm
LD2 = LED rouge 3 mm
T1 = BC547
T2 = BC547
U1 = 7805
U2 = 4066
U3 = LM358
U4 = Oscillateur 24 MHz
U5 = LM1881
U6 = PAL C9572XL/MF436 programmé en usine
U7 = OPA353
U8 = OPA353
L1 = Self 470 μH

Divers :
1 Support 44 broches
1 Support 2 x 7
2 Supports 2 x 4
1 Support de led 3 mm pour face avant
1 Vu-mètre *
1 Prise d’alimentation
6 Prises rca pour circuit imprimé
1 Dissipateur ML26
4 Vis autotaraudeuses 5 mm
4 Boulons 3MA 8 mm
1 Circuit imprimé double face à trous métallisés S0436
* Option (voir texte)


Figure 3 : Brochage du LM1881.

L’Analog CPS en détail.


Il a été utilisé pour la première fois par CBS-FOX sur la cassette vidéo du film Crocodile Dundee et, depuis lors, ce système de protection est devenu un standard au niveau mondial. La protection agit sur le contrôle automatique de gain (AGC) et sur le “burst” couleur des magnétoscopes, ce qui interdit un enregistrement correct de l’image : l’effet de la protection consiste en une perturbation de la luminosité de l’image et en un déphasage de la couleur. Le contrôle automatique de gain des magnétoscopes fonctionne seulement pendant l’enregistrement ; en lecture, l’AGC n’est pas actif et, par conséquent, le visionnage correct de la cassette vidéo est possible.
Les téléviseurs sont en principe immunisés contre la protection car ils ne sont pas pourvus de CAG (AGC vu côté français) sur le signal vidéo entrant. Sur les modèles les moins récents des téléviseurs, il est possible qu’apparaissent des perturbations de phase ou de luminosité de la partie supérieure de l’image car l’élaboration du signal de synchronisme horizontal peut être perturbée par des impulsions de luminosité introduites par le système de protection, lesquelles perturbent indirectement aussi le circuit de “clamping” (serrage) DC. JVC est propriétaire du brevet pour le standard VHS et ce même JVC a stipulé un accord selon lequel à partir d’une certaine date plus aucun magnétoscope VHS autorisé par JVC ne devra être en mesure d’enregistrer un signal vidéo contenant des impulsions de protection contre la copie.
Ainsi les fabricants de magnétoscopes sont obligés désormais de construire des CAG sensibles aux impulsions du système de protection.
Dans le même temps, il est demandé aux constructeurs de téléviseurs de concevoir des circuits capables d’ignorer les impulsions de protection. Certains magnétoscopes vétustes pourraient fonctionner correctement même en présence de l’Analog CPS car ils ne comportent pas de CAG.
Cette technique de protection, dans les DVD, fonctionne d’une manière différente de celle des magnétoscopes, mais le résultat est le même. Dans les magnétoscopes le signal de perturbation est enregistré conjointement avec le signal vidéo, alors que dans les DVD il est activé au niveau du logiciel quand on insère un DVD protégé anti-copie : dans ce cas, c’est le lecteur de DVD lui-même qui produit et ajoute au signal vidéo de sortie le signal de protection.
Il existe quatre types de protection :
Type 0 - OFF                         La protection est déshabilitée. Il est possible
                                     de copier la vidéo.

Type 1 - AGC                         La protection agit seulement sur le CAG.
                                     La copie n’est pas possible :
                                                  la vidéo est sujette à d’intenses
                                                  variations de luminosité.

Type 2 - AGC+2 lignes “colorstripe”  La protection agit sur l’AGC et ajoute 2 lignes
                                     de perturbation dans le “burst” couleur.
                                     La copie n’est pas possible :
                                                  la vidéo est sujette à d’intenses
                                                  variations de luminosité et
                                                  changements de phases de couleur.

Type 3 - AGC+4 lignes “colorstripe”  La protection agit sur l’AGC et ajoute 4 lignes
                                     de perturbations dans le “burst” couleur.
                                     La copie n’est pas possible :
                                                  la vidéo est sujette à d’intenses
                                                  variations de luminosité et
                                                  changement de phases de couleur.


Si le signal est propre
On l’a dit, une des performances du circuit consiste à distinguer une protection du signal reproduit : il s’agit d’une fonction dévolue au logiciel programmé dans la puce XILINX : ce programme analyse la composante de “burst” et le synchronisme afin d’y rechercher des traces de codage actuellement mis en oeuvre pour protéger de la copie le DVD. S’il trouve le code, il élabore le signal comme décrit plus haut. Sinon, il désactive U2b, U2c et U2d et n’active que U2a : ainsi, tout le système de régénération est court-circuité et le signal vidéo passe de la broche 6 du “buffer” U7 à C13 et C14, puis à l’amplificateur opérationnel de sortie U8.

Pour voir le niveau
On a intégré dans le circuit un dispositif de visualisation permettant de connaître le niveau du signal de perturbation dû au code de protection du signal : l’amplitude est visualisée par le vumètre, piloté à son tour par une composante continue produite par un circuit dont le fonctionnement est assimilable à un “sample & hold”. La puce XILINX pilote la base de T1, à travers R11, avec une onde rectangulaire émise par la broche 4 : ce signal court-circuite et bloque ce NPN, dont le collecteur présente des impulsions positives, lesquelles traversent D1 et chargent C9.
Aux bornes de ce dernier, on trouve ainsi une tension continue dont le niveau est à peu près celui du signal vidéo-composite auquel s’ajoutent les perturbations dues à la protection. La tension pilote, à travers T2 (monté en émetteur suiveur), le vu-mètre dont la borne négative est polarisée par le potentiel traversant R9, C8 et L1.
Les LED connectées aux broches 18 et 19 servent, la rouge (LD2) pour indiquer que le filtre est actif, c’est-à-dire que le signal d’entrée est protégé, la verte (LD1) signale que la tension d’alimentation de la totalité du circuit est trop faible (moins de 7,5 V) pour garantir un bon fonctionnement. Cette dernière fonction est utile si l’on a l’intention d’alimenter l’appareil avec des piles ou une batterie rechargeable. Elle est obtenue en faisant surveiller par le programme de U6 le potentiel restitué par le comparateur U3a : celui-ci, prenant comme référence (sur la broche 6) la tension stabilisée présente à la sortie du régulateur U1, évalue le potentiel en aval de D4 et met la broche 2 de U6 au niveau logique bas (0) si la tension détectée est inférieure à 7,5 V. Cela produit le clignotement de la LED verte, laquelle en revanche reste allumée fixe (broche 19 du XILINX au niveau logique haut) quand la tension est bonne et que la sortie du comparateur est, par conséquent, au niveau logique haut.
Concluons l’analyse du circuit en précisant que sur la carte transitent aussi des signaux audio, lesquels, bien sûr, ne subissent aucune élaboration. Leur passage a pour seul but de fournir un point d’ancrage pour les connexions de sortie du DVD et pour celles d’entrée du téléviseur ou du magnétoscope branché à la suite de notre filtre.

Figure 4 : Schéma synoptique du CPLD XC9572XL. Pour plus d’information : www.xilinx.com

La réalisation pratique
Pour sa construction, le filtre électronique requiert un minimum d’expérience et d’attention, car il utilise quelques composants CMS montés sur un circuit imprimé double face à trous métallisés.
Ce dernier peut toutefois, si l’on souhaite le fabriquer soi-même, être réalisé par la méthode décrite dans le numéro 26 d’ELM : on effectuera cependant de sérieux repérages par trous “stratégiques” pour bien faire coïncider les deux faces et on n’oubliera pas de palier l’absence de métallisation des trous pratiqués en interconnectant les deux faces avec des morceaux de queues de composants (à souder des deux côtés) sans oublier un seul des trous représentés sur les figures : bien sûr, les composants qui ne sont pas des CMS contribuent à ces interconnexions des deux faces…, pourvu qu’on n’oublie pas de souder leurs pattes et broches des deux côtés du circuit imprimé.
Bref, quand, d’une manière ou d’une autre, vous êtes en possession du circuit imprimé, commencez par mettre en place les circuits intégrés CMS (les deux OPA353), en les centrant parfaitement par rapport aux pastilles de cuivre, puis, à l’aide d’un fer à souder de 30 W au maximum, muni d’une panne fine et de tinol de bonne qualité d’un diamètre de 0,5 mm au plus, soudez une broche de chaque circuit intégré pour les fixer puis soudez toutes les broches avec beaucoup de minutie (ni court-circuit ni soudure froide collée).
Continuez en insérant les composants suivants par ordre de hauteur : les résistances et les diodes (pour ces dernières, pensez à orienter correctement leurs bagues dans le bon sens en vous fiant aux indications de la figure 5a), puis les supports de circuits intégrés (non CMS, bien sûr) DIL et pour U6, le XC9572XL, carré (orientez bien leurs repère-détrompeurs, en U et à pan coupé, dans le bon sens montré par la figure 5a). U6 est déjà programmé en usine MF436.
Montez les transistors en ayant soin de tourner leurs méplats dans le sens indiqué par la figure 5a. Placez le régulateur U1 7805 couché dans son dissipateur (RTh 16°C/W) et maintenu par un petit boulon 3MA. Insérez et soudez les condensateurs en respectant bien la polarité des électrolytiques (patte la plus longue = le positif +) : là encore, faites confiance à la figure 5a. Soudez U4, l’oscillateur 24 MHz et L1, la self 470 μH. Assurez-vous que vous n’avez rien oublié de placer ni de souder complètement.
Pour alimenter le circuit à l’aide d’une alimentation extérieure, une prise pour circuit imprimé avec positif externe a été prévue : placez-la et soudez-la.
Placez et soudez les six prises RCA pour circuit imprimé.
Les LED sont à monter à une certaine distance par rapport à la carte, de façon qu’elles affleurent juste sous la face avant : vous effectuerez ce réglage avant de souder. Pour le vu-mètre, des sorties sont visibles sur le circuit imprimé : il est facultatif et si vous décidez de le monter, il faudra percer la face avant en conséquence. N’oubliez pas de le relier à la platine à l’aide de deux fils torsadés, en respectant la polarité.
Quand toutes les soudures sont terminées, insérez dans leurs supports les circuits intégrés LM358, LM1881 et CD4066, puis la puce PAL XILINX. Procurez-vous ensuite une alimentation en mesure de fournir une tension de 9 à 12 Vcc et un courant de 100 mA au moins. Le circuit doit fonctionner tout de suite sans aucun réglage.

Figure 5a : Schéma d’implantation des composants du filtre électronique pour DVD.
Attention : les deux “buffers” OPA353 sont des CMS.


Figure 5b : Photo d’un des prototypes vu de dessus.


Figure 5c : Dessins, à l’échelle 1, du circuit imprimé double face à trous métallisés.

Figure 6 : Photo d’un des prototypes vu du côté des prises CINCH.

Figure 7 : Les zones du DVD.

En dehors des protections examinées plus haut, il faut savoir que, toujours à cause de la piraterie, les DVD sont produits de manières différentes en fonction du lieu de destination prévu : le monde a été divisé en 6 sections (dessin ci-contre).
L’objectif d’une telle partition est la sauvegarde des droits sur les “sorties” des films dans les divers continents. En effet, les sorties cinématographiques en Amérique sont nettement anticipées par rapport à l’Europe et par conséquent, afin d’éviter que le consommateur ne trouve la “home video” en Amérique en même temps que la sortie européenne du film en salle, on a songé que des codes pourraient empêcher l’utilisation du logiciel sur les machines des différentes zones. A cela s’ajoute la diversité des standards de production des signaux vidéo : PAL, SECAM et NTSC.

Voci le détail des zones partitionnant le monde du DVD :
1 - Canada, Usa - 2 - Europe, Egypte, Japon, Moyen Orient, Afrique du Sud
3 - Asie (territoires Est et Sud-Est), Hong Kong
4 - Australie, Nouvelle Zélande, Amérique centrale et du Sud, Caraïbes
5 - Ex URSS, Inde, Pakistan, Afghanistan, Afrique, Corée du Nord, Mongolie
6 - Chine.


Figure 8 : La face avant et le panneau arrière du boîtier du filtre électronique.
 
 

Réduire la tension secteur 230 VAC en une tension CC sans transformateur

Figure 1 : Schéma électrique du circuit d’alimentation sans transformateur et liste des composants.

Voici un bon moment que je me débrouille pour obtenir les basses tensions dont j’ai besoin pour mes montages directement à partir du secteur 230 V sans utiliser un transformateur, composant lourd, encombrant … et coûteux, du moins pour ma bourse d’étudiant en IUT !
Je remplace le transformateur réducteur de tension par le phénomène de réactance capacitive : vous savez que lorsqu’une tension alternative est appliquée en série à une capacité, celle-ci oppose une résistance au passage du courant (c’est la réactance).
Cette valeur résistive R (en ohms) est fonction de la capacité C (en μF) et de la fréquence F de la tension alternative (en Hz), selon la formule :

R = 159 000 : (F x C)

Dans mon circuit j’ai monté deux condensateurs de 1 μF 250 V en série, ce qui fait une capacité totale de 0,5 μF ; avec la fréquence du secteur 50 Hz, la valeur résistive de ces condensateurs sera de :

159 000 : (50 x 0,5) = 6 360 ohms ou 6,36 k.

J’ai mis en série deux condensateurs de 250 VCC de tension de service, ce qui divise la capacité par deux mais double la tension de service (c’est-àdire d’utilisation continue sans problème) et la porte donc à 500 VCC.
Toujours en série avec la tension du secteur 230 V, j’ai ajouté une résistance de 56 ohms 1/2 W comme protection pour l’ensemble du circuit.
En sortie je monte une zener de 1 W dont la tension nominale est légèrement supérieure à la tension que je désire obtenir : pour 12 V je choisis une zener de 15-16 V afin d’éviter qu’en l’absence de charge la tension ne grimpe en flèche. Pour obtenir une tension de sortie de 9 V je choisirais une zener de 10 V.
Je suis certain que ce petit montage intéressera d’autres passionnés d’électronique comme moi.

Liste des composants
R1 ..... 56 1/2 W
C1 ..... 1 μF 250 V polyester
C2 ..... 1 μF 250 V polyester
C3 ..... 220 μF 25-33 V électrolytique
DZ1 .... zener 1 W (lire le texte)
RS1 .... pont redresseur 250 V


Note de la redaction
oublie de préciser que, cette alimentation étant directement reliée à une prise du secteur 230 V, si quelqu’un touche n’importe quelle partie du circuit quand il est sous tension, il recevra un choc électrique pouvant être mortel.
Il faut savoir en outre qu’il ne sera pas possible d’obtenir de cette façon un courant dépassant 15 à 20 mA.
Le lecteur pourra réaliser ce montage sur une plaque perforée pastillée ou à bandes ; il pourra aussi s’entraîner à dessiner un véritable circuit imprimé (c’est très facile, voir la méthode de la pellicule bleue, dans le numéro 26 d’ELM, ou à défaut interroger nos annonceurs).


         
 

Un émetteur audio/vidéo stéréo à 4 canaux sur 2,4 GHz

Nous avons plaisir de vous présenter la première application réalisée avec le nouveau module A/V émettant dans la bande amateur des 2,4 GHz, le FM2350TSIMP, dont les prestations sont absolument incroyables : petit, facile à programmer et, surtout, puissant (200 mW à l’antenne !). A partir de ce module, nous avons construit un émetteur complet audio/vidéo stéréophonique à 4 canaux utilisant peu de composants externes si l’on exclut le microcontrôleur nécessaire pour commander, via le bus I2C, le PLL.





L’utilisation des modules émetteurs et récepteurs tout montés et prêts à fonctionner a énormément simplifié le travail des passionnés d’appareils radio de contrôle à distance ou de transmission de signaux analogiques (audio, vidéo, etc.).

En particulier, les modules AUREL ont permis à des milliers d’amateurs, pas du tout férus de HF, de réussir des montages hyper-sophistiqués.

Ces derniers temps, de nouveaux modules, opérant presque tous dans la bande des 2,4 GHz, capables d’émettre des signaux audio et vidéo, ont fait leur apparition sur le marché.

Ces modules n’ont pas besoin de beaucoup de composants externes et leur fréquence est contrôlée par bus I2C. Ces modules permettent, si on choisit la version 10 mW, de transmettre des signaux A/V sur une centaine de mètres de distance. De tels dispositifs sont également utilisés par les radioamateurs, puisqu’ils englobent deux bandes allouées à ceux-ci (2 303 à 2 313 MHz et 2 440 à 2 450 MHz).







Notre montage

Nous avons autrefois proposé quelques montages utilisant ces éléments : “demo-board”, systèmes multi-fréquence, “scanners” et “scramblers” mettant en oeuvre la technique de “frequency hopping” (saut de fréquence). Ce mois-ci, nous réitérons avec un nouveau module émetteur de 200 mW pouvant couvrir une distance très supérieure. Bien sûr, vue la puissance émise et étant données les normes légales en la matière, l’utilisation de ce composant est destinée aux radioamateurs qui ont droit, eux, à une puissance de 10 W dans leurs bandes réservées.

Quant à nous, nous avons réalisé avec ce module émetteur une “demo-board” très compacte permettant d’effectuer tous les essais souhaitables et les résultats ont été pour le moins satisfaisants.

Comme récepteur, nous avons utilisé le montage proposé dans l'article : "Un système de transmission évolutif 4 canaux vidéo et audio stéréo sur 2,4 GHz" (voir figures 7 et 8).



Le module, son brochage et les caractéristiques audio

Dans les pages du présent article, nous décrivons les étapes de construction de l’émetteur de 200 mW utilisant comme coeur le module FM2350TSIMP.

Celui-ci se présente sous l’aspect d’un boîtier de blindage en tôle étamée pour circuit HF duquel sort une prise coaxiale SMA (sortie antenne souple) et 16 broches (par-dessous pour permettre le montage sur circuit imprimé).

Nous donnons le brochage complet du connecteur constitué par ces dernières à la figure 1. Est-il besoin de préciser que le 5 V sert à alimenter l’étage numérique de contrôle et le PLL ; le 9 V, l’émetteur et l’étage HF ; le potentiel négatif, l’étage d’accord ? Non ? Je m’en doutais ! Les broches de masse (GND) sont à réunir et à connecter à la masse de l’alimentation principale.

A l’entrée vidéo-composite, broche 11, on peut appliquer une composante vidéo standard de 1 Vpp d’amplitude sur 75 ohms. Quant à l’audio, chaque broche s’occupe d’un canal : la 6 pour le gauche (sur la porteuse à 6 MHz) et la 4 pour le droit (modulant la porteuse à 6,5 MHz). Chacune peut recevoir un ou deux signaux dont le niveau ne doit pas dépasser 1 Vpp (soit environ 350 mVeff). L’impédance caractéristique est de 1,4 kilohm entre 100 Hz et 10 kHz. La bande passante va de 20 Hz à 35 kHz (minimum) pour une distorsion, au niveau maximum acceptable, inférieure à 3 %.

Pour éviter les bruits, toujours présents dans les communications audio, le module prévoit une préaccentuation avec constante de temps de 50 μs : les signaux audio sont donc davantage amplifiés dans la bande située autour des 20 kHz, de manière à ce que, à la réception, si l’on atténue dans la même proportion, on obtienne une bande passante linéaire mais avec un meilleur rapport entre les aiguës et le bruit de fond. Cette technique est adoptée depuis toujours pour les émissions radiophoniques et l’audio télévisuel.

Le module peut ainsi garantir un rapport signal/bruit (S/N ratio) de 40 dB, ce qui est plus que suffisant pour la majorité des applications. Si vous ne devez émettre, en revanche, qu’un seul signal audio (mono), vous devez court-circuiter à la masse l’entrée non utilisée, ou bien réunir les deux entrées et les piloter simultanément : vous éviterez ainsi que des bruits et autres ronflements captés par la broche non connectée ne se produisent sur le canal qui n’est pas piloté.





Figure 1 : Le module émetteur FM2350TSIMP.



Il est le coeur de notre émetteur à 4 canaux. La caractéristique la plus importante est la puissance de sortie (+24 dBm, soit 200 mW). Le module nécessite trois tensions d’alimentation (+5 V, +9 V et –1,4 V) et consomme 300 mA. La fréquence de travail est contrôlée par une ligne bus I2C avec laquelle on peut agir directement sur le PLL interne. Les dimensions du module sont indiquées sur le dessin. La correspondance entre les broches et les fonctions est reportée dans le tableau ci-contre. Les lignes SDA et SCL du bus I2C correspondent aux broches 14 et 15.



Le schéma électrique du circuit de contrôle

Si vous jetez un coup d’oeil au schéma du TX TV de la figure 2, vous pouvez voir les deux broches de MOD1, la 14 et la 15 : vous comprendrez leur fonction en connaissant le mode de contrôle de l’émetteur. Le TX peut travailler sur 4 fréquences différentes mais, en fait, il n’y a pas d’éléments permettant ce paramétrage. Le module possède un oscillateur pouvant théoriquement travailler entre 2 300 et 2 500 MHz, soit une bande très vaste : c’est le PLL qui pourvoit à faire fonctionner l’oscillateur sur cette plage de fréquences.

Mais qu’est ce qui commande le PLL ?

Voici l’astuce : ce dernier, de type programmable, se contrôle au moyen d’une commande envoyée le long de l’interface bus I2C dont le composant est pourvu. Les broches 14 et 15 sont respectivement le SDA (Serial DAta) et le SCL (Serial CLock) de cette commande. Bien sûr, cette disposition impose la gestion de l’émetteur par un système intelligent, capable de lui fournir les informations nécessaires.

Pour notre part, nous avons confié la tâche à un microcontrôleur PIC16C54-MF177, déjà programmé en usine, pour remplir des opérations très simples pour lesquelles, à dire vrai, une simple logique programmable eût suffi. En d’autres termes, le microcontrôleur produit un flux de deux octets pour chaque combinaison des microinterrupteurs reliés à ses broches 6, 7, 8, 9, 10, 11, 12 et 13. Avec 8 bits, on obtiendrait 256 combinaisons et par conséquent le même nombre de canaux.

En réalité, le logiciel du PIC a été écrit pour accepter et interpréter seulement quatre combinaisons, correspondant aux fréquences prévues : tous les micro-interrupteurs fermés pour obtenir 2,4 GHz exactement ; le premier micro-interrupteur seul ouvert pour 2,427 GHz ; le deuxième micro-interrupteur seul ouvert pour 2,454 GHz et les deux premiers micro-interrupteurs ouverts pour 2,481 GHz. La figure 3 parlera d’elle-même.

L’envoi du flux de commande a lieu à la mise en marche, le microcontrôleur lit le paramétrage de ses huit entrées et produit les différentes données. Ces dernières sont acquises et conservées par le PLL programmable du TX, lequel se paramètre en conséquence.

En ce qui concerne les connexions audio/vidéo, les broches 6 et 4 sont reliées à deux prises RCA “cinch” pour circuit imprimé auxquelles vous pouvez brancher les sorties de n’importe quelle source audio mono ou stéréo, en respectant toutefois les niveaux et les impédances indiqués plus haut.

La broche 11, en revanche, est désaccouplée en continu au moyen du condensateur électrolytique C10 (pour garantir que le signal vidéo-composite appliqué n’est pas unidirectionnel). La composante vidéo appliquée à la prise RCA correspondante, peut être réglée en amplitude au moyen du trimmer R14, permettant de limiter le niveau à 1 Vpp (afin d’éviter la saturation du TX et d’optimiser la qualité de la liaison télévisuelle) dans tous les cas, même si le niveau arrivant au connecteur excède, de façon significative, le seuil toléré.

L’étage d’alimentation mérite une attention toute particulière en ce qui concerne sa conception mais aussi par la condition qui lui est imposée : le module réclame deux tensions positives et une tension négative par rapport à la masse. Afin de ne pas compliquer le circuit, nous avons eu recours à un artifice : le 1,4 V négatif est obtenu par l’interposition de deux diodes en série, polarisées directement, entre la masse de la platine et le négatif de l’alimentation.

Ainsi, la chute de tension de D1 et D2 (atteignant 1,4 V environ) produit un “gap” (entrefer) entre la masse et le –V, de telle manière qu’en reliant la broche 2 à cette piste, le module “a l’impression” que sa broche 2 est négative.

Mais si, d’un côté, ce subterfuge permet d’obtenir une tension négative en utilisant simplement deux diodes, de l’autre, il implique une limitation : en effet, la masse de la prise RCA et de l’antenne ne correspond pas à celle de l’alimentation.

Ce n’est pas un problème si l’alimentation ne fait fonctionner que l’émetteur de télévision, mais si nous voulions, avec la même alimentation, alimenter, par exemple, une caméra vidéo ou un microphone amplifié, ce ne serait pas possible car, les masses n’étant pas au même potentiel, la ligne des diodes serait court-circuitée, ce qui annulerait la tension négative et le circuit ne fonctionnerait plus correctement.

Pour conclure sur le chapitre de l’alimentation, voyons comment sont produits le 9 et le 5 V : tout le circuit est alimenté en 12 V au moins (mieux vaudraient 14 ou 15 V) entre les points + et – V, soit sur la prise pour circuit imprimé prévu. La masse est rehaussée de 1,4 V grâce aux diodes D1 et D2. Plus exactement, le point de référence du zéro volt est l’anode de cette dernière (GND). Le régulateur 7809 (U2), dont la broche M est connectée à la masse artificielle, fournit le 9 V stabilisé envoyé au point 9 du module.

Sa sortie alimente aussi l’entrée d’un 7805 (U3) produisant le 5 V destiné à la broche 1 du module TV.

Tout ceci étant vu, nous pouvons passer à la réalisation.



Figure 2 : Schéma électrique de l’émetteur A/V stéréo à 4 canaux.



Figure 3 : L’émetteur peut travailler sur 4 fréquences différentes, réglées par les 2 premiers micro-interrupteurs de DS1. Les micro-interrupteurs 3 à 8 doivent être en position ON (fermés).



Figure 4 : Schéma d’implantation des composants de l’émetteur A/V stéréo à 4 canaux.



Figure 5 : Photo d’un des prototypes.



Figure 6a : Dessin, à l’échelle 1, du circuit imprimé double face de l’émetteur A/V à 4 canaux côté cuivre. La réalisation d’un circuit double face demande une certaine expérience. Si vous décidez de le réaliser vous-même, n’oubliez pas toutes les liaisons entre les deux faces. Pour graver le cuivre, vous pouvez mettre en oeuvre la méthode décrite dans l'article : "Comment fabriquer vos circuits imprimés facilement ?".

Les circuits professionnels sont à trous métallisés et sont sérigraphiés.




Figure 6b : Dessin, à l’échelle 1, du circuit imprimé double face de l’émetteur A/V à 4 canaux côté composants.



Figure 7 : Le récepteur à utiliser.



Les fréquences de travail de l’émetteur décrit dans cet article ont été programmées de manière à pouvoir utiliser le récepteur mentionné dans l'article : "Un système de transmission évolutif 4 canaux vidéo et audio stéréo sur 2,4 GHz". Cet appareil utilise un module récepteur A/V stéréo dont les caractéristiques sont parfaitement adaptées à notre émetteur : modulation de fréquence (FM), 2 canaux audio pour la stéréo avec sous-porteuses à 6 et 6,5 MHz, fréquence de travail de 2 400, 2 427, 2 454 et 2 481 MHz.

Le choix du canal se fait au moyen d’un poussoir avec lequel il est possible de sélectionner séquentiellement les quatre fréquences prévues. L’allumage de la LED correspondante signale quel canal a été sélectionné.





Figure 8 : Le module récepteur FM2400RTIM.



Le module récepteur est semblable, par ses dimensions, au module émetteur. Le circuit dispose d’un plus grand nombre de broches (toutes ne sont pas utilisées dans notre application) parmi lesquelles les deux de la ligne bus I2C au moyen de laquelle il est possible de programmer le PLL interne et, par conséquent, la fréquence de réception. Le signal de sortie (audio stéréo et vidéo) est disponible sur la broche BB (bande-base).



La réalisation pratique de l’émetteur

Tout d’abord procurez-vous ou réalisez le circuit imprimé double face dont la figure 6 donne les dessins à l’échelle 1. Il pourra être réalisé par la méthode décrite dans l'article : "Comment fabriquer vos circuits imprimés facilement ?" en prenant comme repères entre les deux faces les trous d’interconnexion à pratiquer dès que l’une des deux faces a été “dessinée” à l’aide de la pellicule à transfert bleue. N’oubliez pas, après la gravure des deux faces et le forage complet, de réaliser les interconnexions à l’aide de petits morceaux de queues restantes de composants.

De même, vous devrez souder les composants des deux côtés du circuit, sauf les CMS, bien entendu, afin de compléter ces interconnexions.

Insérez les composants en commençant par les plus bas de profil, comme les résistances ou les diodes, pour finir par les plus hauts, comme les prises RCA, les supports de circuits intégrés, les micro-interrupteurs, les condensateurs électrolytiques verticaux, la prise d’alimentation et, bien sûr, le module émetteur avec son blindage.

Attention, certains composants sont des CMS, ce sont surtout des résistances et des condensateurs : leur soudage ne présente aucune difficulté, pourvu que vous utilisiez un fer à panne très fine.

Evidemment, les composants polarisés seront orientés dans le bon sens : pour cela on se servira, avec beaucoup d’attention, des figures 4 et 5. En particulier, orientez le support mais surtout le microcontrôleur lui-même dans le bon sens, c’est-à-dire repère-détrompeur en U vers la gauche du circuit imprimé.

De même, pour les deux régulateurs, à visser couchés dans leurs dissipateurs à ailettes (ne les intervertissez pas) et pour les micro-interrupteurs à 8 voies bipolaires (chiffres tournés vers l’extérieur du circuit imprimé).

Les deux diodes D1 et D2 sont têtebêche sur la plaquette. Le module émetteur, lui, ne peut se monter que dans le bon sens. Ce module est le dernier composant à insérer et à souder en ayant bien soin de l’enfoncer à fond, jusqu’à obtenir l’appui sur la plaquette.

Soudures terminées et dûment vérifiées (pas de court-circuit ni de soudure collée), insérez le microcontrôleur dans son support (repère-détrompeur en U vers la gauche, j’insiste).

Quand tout est assemblé, l’appareil est tout de suite prêt à l’usage sans aucun réglage à prévoir : en effet, le seul trimmer du circuit (il y en a deux autres dans le module proprement dit mais surtout n’y touchez pas) doit normalement être tourné au maximum (curseur totalement tourné vers l’entrée vidéo) et sa position ne sera modifiée que si l’image reçue sur le téléviseur ou le moniteur composite relié au récepteur apparaît peu nette ou dédoublée (et donc floue).

Avant de mettre l’appareil sous tension, il vous faut décider sur quel canal vous voulez opérer : ce paramétrage s’effectue en agissant seulement sur les deux-premiers micro-interrupteurs, comme nous l’avons expliqué plus haut.

L’alimentation externe sera en mesure de fournir 12 à 15 Vcc avec un courant d’au moins 300 mA ; il est vivement conseillé de prévoir une alimentation, au besoin non stabilisée, exclusivement consacrée à l’émetteur afin d’éviter les problèmes déjà décrits plus haut et concernant la présence dans le circuit de deux masses de potentiels différents.

Bien sûr, le circuit ne sera alimenté qu’après avoir connecté l’antenne au module émetteur, sinon l’étage final HF de ce module risque d’être endommagé.

De toute façon, sans antenne, la portée serait dérisoire.
 
    
   
 

Un lecteur / enregistreur de données sur carte SD pour port USB

 
Ce petit montage permet d’écrire des données sur une mémoire Secure Digital et de les relire, tout cela à partir du port USB d’un PC. Voyons comment cet appareil a été développé sur les plans matériel et logiciel, grâce à la mise en oeuvre d’un microcontrôleur doté d’un Universal Serial Bus.


Depuis quelques temps, on trouve dans le commerce, en tant que dispositifs autonomes ou fournis avec les APN, des appareils de lecture/écriture sur SDCard à interface USB ou, plus rarement, IEEE1394. Comme il s’agit d’appareils économiques, nous vous proposons ici une autoconstruction qui vous reviendra le même prix qu’un achat commercial, mais qui vous procurera la satisfaction d’une initiation à cette technologie sophistiquée.

Notre réalisation
Cet article vous propose en effet le schéma électrique et la réalisation pratique d’un tel lecteur/enregistreur de données sur carte SD pour port USB ; lisez-le, car c’est une bonne occasion d’expérimenter les concepts théoriques de la SD-Card (et que vous devez commencer à connaître puisque nous avons déjà publié maints montages utilisant une SD comme mémoire de données). Notre objectif est cette fois de réaliser un petit circuit qui permette d’écrire et de lire les blocs d’une SD en utilisant une interface USB. Le résultat final a été atteint grâce à la mise en oeuvre d’un PIC18F2550, entouré de quelques rares composants coomplémentaires, mais doté d’un remarquable programme résident. Sans parler du programme en Delphi tournant sur le PC. Il s’agit, une fois encore, d’une expérimentation didactique…mais dont les possibilités d’évolution sont multiples puisque, d’un côté nous intégrons un PIC à une énorme mémoire et que de l’autre nous l’interfaçons avec un système de communication rapide et efficace comme l’USB.
Ce sera une manière utile et passionnante de saisir sur le vif tout ce qu’on a acquis précédemment en théorie, ou même pour certains d’apprendre très simplement de façon concrète tout ce qu’une SD peut faire.

Le schéma électrique
Le circuit dont la figure 1 donne le schéma électrique est décidément fort simple ! Le seul problème que nous ayons rencontré concerne la réalisation d’un système qui puisse gérer au mieux la communication avec le PIC : celui-ci travaille, on le sait, avec des signaux en 0/5 V, alors que la SD nécessite des tensions comprises entre 0 et 3,6 V. Nous l’avons résolu une fois de plus (ce problème en effet n’est pas nouveau) de manière fort élégante : pour les lignes allant du PIC à la carte on utilise une diode schottky et une résistance de tirage.
Ainsi, quand le microcontrôleur présente à la SD le un logique, la diode est bloquée et la tension sur la broche de la carte est celle due à la résistance de tirage, soit 3,3 V (même si le PIC fournit 5 V). Quand le micro engendre un niveau logique bas, la diode conduit, ce qui porte à environ zéro volt également la broche de la carte. En ce qui concerne la connexion dans le sens inverse, de la SD vers le PIC, la chose est légèrement différente : pour rendre la traduction des niveaux logiques simple tout en restant efficace et précise, nous avons utilisé un “buffer/line driver” (pilote de ligne/tampon) en technologie HCT ; il s’agit d’un circuit intégré très économique mais d’une efficacité totale.
Nous en avons utilisé la version la plus courante, le 74HCT125 ; pour en habiliter les sorties, quatre broches OE1 à OE4 (Output Enable) sont utilisées : le signal d’entrée est présenté en sortie quand la ligne OE est au zéro logique. Comme nous voulons que le passage E vers S se fasse le plus rapidement possible, nous avons relié les broches OE directement à la masse. Par conséquent, chaque pilote de ligne est toujours actif. Les lignes d’entrée sont pleinement compatibles avec les signaux provenant des cartes SD, car les circuits intégrés basés sur la logique ACT/HCT acceptent en entrées des niveaux inférieurs aux TTL (par exemple 0/3V) et présentent en sortie des niveaux 0/5 V ; quand ils sont alimentés en 5 V, ils “voient” un niveau de 3 V comme si c’était un niveau TTL 5 V normal et fournissent en sortie 5 V, tension idéale pour commander directement les lignes d’entrée du PIC18F2550. La tension d’alimentation pour le PIC est prise directement sur le port USB (rappelons que ce standard prévoit la fourniture de 5 V 500 mA aux périphériques connectés). Le régulateur LM1086-CT-3.3, à partir de ce 5 V, engendre une tension de 3,3 V, suffisante pour faire fonctionner la SD.
Pour mettre en évidence les opérations que le micro doit accomplir, nous avons doté la platine de trois LED de couleurs différentes : la jaune indique que le circuit est bien alimenté ; la rouge qu’une opération de lecture ou d’écriture est en cours et la verte que la platine est prête à élaborer une commande envoyée par l’hôte. Si les deux LED rouge et verte sont allumées ensemble, c’est qu’une condition d’erreur a été détectée et qu’un transfert de données depuis ou vers la SD s’est produit (le “reset” du système doit par conséquent avoir lieu).
Vous vous êtes sans doute aperçus qu’aucune mémoire temporaire FRAM ou EEPROM n’est présente dans le circuit ; c’est parce que nous nous servons de la rapidité du bus US (Universal Serial Bus) pour envoyer directement à l’hôte les valeurs lues sur la carte ; de même, durant l’écriture, nous faisons en sorte que l’hôte envoie directement à la SD les données que nous voulons y inscrire. L’universalité de ce bus série (Universal Serial Bus) nous permet donc d’éviter d’alourdir le circuit avec un composant supplémentaire.
En outre, afin de rendre le système suffisamment efficace, nous aurions dû utiliser un “buffer” rapide, puisque sur une EEPROM traditionnelle chaque octet nécessite une pause de stabilisation de 10 ms. La lecture/écriture de données sur SD ne peut se faire que par blocs d’au moins 512 octets : par conséquent pour chaque opération de lecture/écriture le PIC attend l’arrivée des 512 octets, avec lesquels il forme un paquet qu’il envoie séquentiellement à la SD (ce qui crée de ce fait un interfaçage direct entre le bus SPI et le bus USB. La communication avec la SD se fait en mode SPI, au moyen de deux lignes de données série (une en entrée et une en sortie) synchronisées par un signal d’horloge et une ligne de “Chip Select” utile, dans le cas où l’on connecterait plusieurs cartes en même temps, pour indiquer avec laquelle on veut communiquer.

Figure 1 : Schéma électrique du lecteur/enregistreur de données sur SD-Card en USB.

Figure 2a : Schéma d’implantation des composants du lecteur/enregistreur de données sur SD-Card en USB.

Figure 2b : Dessin, à l’échelle 1, du circuit imprimé du lecteur/enregistreur de données sur SD-Card en USB.

Figure 3 : Photo d’un des prototypes du lecteur/enregistreur de données sur SDCard en USB.

Liste des composants
R1 ...... 4,7 k
R2 ...... 4,7 k
R3 ...... 4,7 k
R4 ...... 1,5 k
R5 ...... 1 k
R6 ...... 1 k
R7 ...... 1 k
C1 ...... 15 pF céramique
C2 ...... 15 pF céramique
C3 ...... 100 nF multicouche
C4 ...... 220 μF 25 V électrolytique
C5 ...... 100 nF multicouche
C6 ...... 220 μF 25 V électrolytique
C7 ...... 220 nF multicouche
D1 ...... BAT85
D2 ...... BAT85
D3 ...... BAT85
LD1 ..... LED 3 mm verte
LD2 ..... LED 3 mm rouge
LD3 ..... LED 3 mm jaune
U1 ...... PIC18F2550-ET611
U2 ...... LM1086-3.3
U3 ...... 74HC125
Q1 ...... quartz 20 MHz
SD1 ..... lecteur pour carte SD

Divers :
1 support 2 x 14
1 support 2 x 7
1 connecteur USB-B
Sauf spécification contraire, toutes les résistances sont des 1/4 W à 5 %.


Le programme résident
La complexité de ce projet vient, non pas du matériel, mais du programme résident et du “front-end” rédigé en Delphi. Pour le programme résident, nous avons utilisé le PICBasic afin de rendre plus simples les explications que nous vous devons ! Si vous avez suivi un cours de PICBasic, cela vous paraîtra même simpliste et constituera un exercice vous permettant de mettre en pratique la théorie acquise.
Commençons par analyser les parties les plus remarquables du dispositif, soit le fichier SDUSBdsc.asm. Pour ceux qui n’ont aucune idée de ce qu’est un descripteur, il faut préciser que le PIC18F2550 sera reconnu par le PC comme un périphérique HID (Human Interface Device) et que pour pouvoir communiquer de manière correcte au moyen de l’interface USB, il est nécessaire que l’ordinateur l’identifie comme tel. Le descripteur est une structure fournissant à l’hôte toutes les informations générales sur le dispositif et sur ses modes de fonctionnement.
Rappelons qu’en effet, sur le bus USB, c’est toujours l’ordinateur qui commande.
De plus, le descripteur établit quels et combien sont les ports de communication utilisables (les fameux “end-points”) : il est donc fondamental pour que le logiciel puisse envoyer les données au PIC et en recevoir de lui.
Dans le “Listing” 1 nous voyons les points les plus importants : nous établissons la taille (en octets) du “buffer” pour l’Endpoint0 (pour les dispositifs à faible vitesse la seule valeur est 8), la dimension du tableau (“array”) gardant la trace des configurations alternatives de chaque interface (rappelons qu’un dispositif peut avoir plusieurs interfaces, chacune avec plusieurs configurations, ou “settings”, que l’hôte peut sélectionner), le nombre maximum de “end-points” utilisables dans le projet (un seulement et on ne doit pas prendre en compte l’Endpoint0), le nombre de configurations et d’interfaces du dispositif, le mode de gestion des “buffers” associés à chaque “end-point”, la configuration du registre UCFG (USB Configuration Register) et la classe d’appartenance du dispositif (HID).
En particulier, en ce qui concerne le registre UCFG, nous avons décidé d’utiliser le transpondeur interne de la puce et une configuration de type “Low-Speed” (vitesse lente). Dans le tableau définissant les paramètres de la classe, nous avons précisé l’utilisation de l’Endpoint1 IN/OUT, avec un “buffer” à 8 octets (“Listing” 2).
Dans le descripteur Interface nous précisons le nombre de “end-points” utilisés (l’Endpoint0 ne comptant pas, car c’est celui de service). En outre, nous utiliserons deux ports de communication, un en sortie et l’autre en entrée (“Listing” 3).
Dans le descripteur des “end-points” (“Listing” 4) nous établissons que celui d’émission aura une longueur maximale de 8 bits (1 octet) et celui de réception de 5 octets. En effet, nous avons établi que le logiciel envoie au PIC des commandes de type CODAGE + 4 PARAMETRES (nous nous sommes inspirés de la structure définie dans les spécifications de Secure Digital pour les CMD17 et CMD24, soit les commandes de lecture/écriture qui sont suivies de l’adresse à 32 bits du bloc à lire/écrire. De l’autre côté, la carte répondra à travers des séquences d’octets. L’intervalle de “polling” (demande de la part de l’ordinateur) est fixé à 10 ms, ce qui est plus que suffisant pour les buts que nous nous sommes fixés.
Dans le descripteur Report (“Listing” 5) nous avons utilisé une structure hiérarchique. Les définitions des champs d’entrée et de sortie, dimensionnées en fonction de ce que nous avons dit plus haut, sont mises en évidence. On le voit, il s’agit de structures à 8 bits pour lesquelles on a fixé des limites logiques ordinaires (0-255).
Passons vite sur les Usage.
En ce qui concerne le descripteur String, nous avons utilisé les valeurs décrites dans le “Listing” 6. Ces valeurs sont reportées dans un panneau du logiciel dès que le dispositif achève le processus d’énumération.
Pour les néophytes, précisons que ce processus sert à faire en sorte que l’hôte (“host”) et le périphérique (“device”) fassent connaissance et puissent ensuite instaurer un canal de communication. Rappelons aussi que le nom du fichier contenant les descripteurs doit être inséré dans le fichier usbdesc.asm afin que le compilateur PBP l’inclue correctement dans la structure du .HEX que nous insèrerons ensuite dans la mémoire du PIC.
Nous avons entre autres utilisé, pour la compilation correcte du projet logiciel, un fichier p18f2550.inc dûment modifié, prévoyant une division de la fréquence d’oscillation en entrée égale à 5 et une division de la fréquence d’horloge du système égale à 4.
Ainsi, nous pouvons monter dans le circuit un quartz de 20 MHz et maintenir (grâce à l’activation d’un PLL) une horloge interne de 24 MHz. Pour la programmation du PIC nous utilisons le Melabs Programmer de microEngineering Labs et maintenons les configurations visible dans la fenêtre de dialogue de la figure 4.
Ceci dit, le moment est venu de passer au code proprement dit. Jetons un coup d’oeil au “Listing” 7, lequel comporte des déclarations : pour la communication avec la carte, nous utilisons le mode SPI comprenant un sous ensemble de commandes du protocole SD standard et c’est le plus simple à implémenter. Il n’utilise en effet que trois lignes pour communiquer : une pour l’horloge (SCK), une pour les données entrantes (SDI) et une autre pour les données sortantes (SDO) ; en plus, bien sûr, du signal CS (Chip Select) servant surtout à entrer en mode SPI et pour établir le commencement et la fin d’une transaction.
Nous avons en outre précisé les broches utilisées pour l’allumage et l’extinction des deux LED de signalisation.
Enfin vient la séquence des variables nécessaires pour le processus.
La paire IND0, IND1 sert à établir l’adresse du bloc à lire/écrire et compose la séquence des 32 bits envoyés par l’hôte comme liste de paramètres.
Le vecteur CMD, constitué de 5 octets, contient la séquence CODAGE + 4 PARAMETRES.
Le choix est dû à ce qui a été établi dans le descripteur report.
Comme le montre le “Listing” 8, le code d’initialisation est fort simple. Le PORTA est mis tout en sortie car nous n’utilisons que deux lignes pour commander les LED ; dans le PORTB on a prévu la broche RB2 comme ligne d’entrée pour les données provenant de la carte. L’extinction des deux LED est effectuée et on passe au code de mise en route du dispositif d’abord et de la SD ensuite.
Initialement la procédure d’énumération du dispositif est réclamée et une pause de stabilisation d’une demi seconde a lieu. A la fin de la procédure, le PIC est reconnu par le système d’exploitation de l’ordinateur et il est prêt à entrer en communication avec le logiciel que nous utiliserons pour la lecture/écriture de la carte. A la fin de cette procédure nous lançons une phase d’initialisation de la SD qui nous permettra d’abord de passer en mode SPI, puis d’établir les limites dimensionnelles des blocs de lecture/écriture. Pour résumer : nous pouvons distinguer deux phases fondamentales, RESET CARD (CMD0) et INITIALISATION (CMD1).
Dans le “Listing” 9 vous voyez comment se présente le code correspondant.
Notez que le “reset” est précédé d’une séquence de cycles d’horloge “à vide” (ou “Dummy Clock”, horloge fictive) comme le veulent les spécifications Secure Digital.
En particulier, le CMD0 est envoyé en maintenant la ligne CS à 0 : cette procédure permet d’entrer en mode SPI.
Une fois entrés, on lance l’initialisation du dispositif et on attend que la SD ait terminé cette phase (on vérifie l’arrivée de la réponse qu’elle envoie).
Rappelons qu’en mode SPI la carte est en mesure d’envoyer exclusivement deux types de réponse, une à 8 bits (RISP1) et une à 16 bits (RISP2), qui ont chacune une structure particulière de signalisation des erreurs. Notez que dans ces séquences un délai (“time-out”) a été prévu afin d’éviter qu’en cas d’erreur le système ne se bloque.
Dans ce cas, à travers un compteur (CONTA1), on établit la limite de répétition au delà de laquelle on suppose que la carte refuse de répondre ou que l’initialisation a échoué.La phase de définitions du nombre d’octets qui composeront le bloc de lecture/écriture de la SD est sautée, car on se sert de la longueur standard de 512 octets (“Listing” 10). Quand cette première procédure est terminée, nous allumons la LED verte (pour signaler que le dispositif est initialisé et qu’il est prêt à recevoir des commandes du logiciel tournant dans l’ordinateur).
Nous entrons en particulier dans une boucle d’attente sur le port USB, à travers lequel nous nous attendons à recevoir une séquence de 5 octets, dont le premier contiendra les codes de la commande à exécuter.
Dans le “Listing” 11 on voit clairement la séquence logique utilisée pour établir quelles instructions exécuter en fonction du premier octet reçu. Nous avons intentionnellement maintenu le codage utilisé dans la description du protocole SPI pour SD : la 17 lance la lecture (dans le protocole on utilise la CMD17) et la 24 l’écriture (CMD24). Si une quelconque autre commande arrive, elle est écartée et nous retournons à la lecture d’une nouvelle séquence de 5 octets. Notez que la fonction USBService, qui gère le module d’interface USB, est régulièrement appelée. Le code résultant, en effet, n’est plus basé sur la gestion des signaux d’interruption (“interrupt”), mais exclusivement sur une interrogation continue des registres associés au port devant identifier les diverses opérations à accomplir.
En ce qui concerne la procédure de lecture, nous avons convenu de recevoir l’adresse du bloc à lire dans les 4 derniers octets de la séquence de 5.
Nous lançons alors la commande de lecture en transférant les 512 octets sur le bus USB à travers l’instruction USBOUT. Les instructions résultantes sont visibles dans le “Listing” 12. Nous allumons la LED rouge pour signaler que l’élaboration de la commande est en cours. La CMD17 est envoyée à la SD en lui passant comme paramètres les 4 derniers octets reçus de l’ordinateur.
Quand la commande est acceptée, la carte envoie une séquence de bits particulière nommée “Start-Block”, après quoi l’émission commence en une séquence de 512 octets ; à chaque octet correspond immédiatement un envoi. A la fin, à travers la CMD13, le registre de Status de la carte est lu, afin de vérifier si l’opération a réussi ou si une erreur s’est produite.
Ensuite, un saut (“jump”) est fait jusqu’à l’étiquette AVVIOP où est localisé le code qui s’occupera d’attendre une nouvelle commande de l’hôte. La LED rouge est éteinte, la verte rallumée pour signaler à l’usager la possibilité d’envoyer une nouvelle demande de lecture/écriture. Et nous arrivons à l’étiquette SCRIVI contenant le code de l’écriture d’un bloc de 512 octets sur SD (“Listing” 13).
Nous allumons la LED rouge et nous valorisons adéquatement IND0 et IND1 avec l’adresse du secteur à écrire. A travers la CMD24 nous initialisons la transaction d’écriture et envoyons le “Start Block” (“Listing” 14).
L’hôte (“host”) nous envoie 104 paquets de 5 octets chacun : le premier se compose de l’identifiant de la commande à exécuter suivi de l’adresse du secteur correspondant. Les 103 restants sont constitués des valeurs à écrire sur la carte. Le dernier paquet a 3 octets de fermeture et donc, comme le montre le “listing”, nous ne déposons que les deux premiers dans la carte. Nous concluons donc l’opération d’écriture (“Listing” 15).
Signalons l’opération de AND logique pour l’extraction dudit “Data Response Token” envoyé pour chaque bloc de données écrit.
Cette séquence de bits devient très importante dans le cas d’opérations comme l’écriture de plusieurs blocs contigus (ici nous ne l’utiliserons pas). Si, en effet, un erreur se produit, le PIC doit bloquer la transaction à travers une CMD12.
Nous ne faisons pas autre chose que signaler l’erreur en allumant ensemble les LED rouge et verte (étiquettes ERRORE, ERRORE2) et en réinitialisant la carte. Ainsi, le circuit ne se bloque pas et retourne au cycle d’attente de la commande de la part de l’hôte. Comme pour l’opération de lecture, dans ce cas également nous utilisons la CMD13 pour connaître le Status de la SD. A la fin nous revenons à l’étiquette AVVIOP pour attendre la prochaine séquence de commande à travers l’USB.

"Listing" 1.

; **********************************************************************
; TABLEAU PARAMETRES GENERAUX
; **********************************************************************

#define EP0_BUFF_SIZE 8
#define MAX_NUM_INT 1
#define MAX_EP_NUMBER 1
#define NUM_CONFIGURATIONS 1
#define NUM_INTERFACES 1

#define MODE_PP _PPBM0
#define UCFG_VAL _TRINT|MODE_PP ; Low-Speed

#define USB_USE_HID

zzz L02 p38 zzz


"Listing" 2.

; **************************************************
; TABLEAU PARAMETRES CLASSES HID
; **************************************************

#define HID_INTF_ID 0x00
#define HID_UEP UEP1
#define HID_BD_OUT ep1Bo
#define HID_INT_OUT_EP_SIZE 8
#define HID_BD_IN ep1Bi
#define HID_INT_IN_EP_SIZE 8
#define HID_NUM_OF_DSC 1


"Listing" 3.

; **************************************************
; TABLEAU 3 DESCRIPTEUR INTERFACE
; **************************************************
Interface1
retlw (HIDDescriptor1-Interface1)/2 ; bLength
retlw DSC_INTF ; bDescriptorType
retlw 0x00 ; bInterfaceNumber
retlw 0x00 ; bAlternateSetting
retlw 0x02 ; bNumEndpoints
retlw 0x03 ; bInterfaceClass
retlw 0x01 ; bInterfaceSubClass
retlw 0x02 ; bInterface Protocol
retlw 0x05 ; iInterface


"Listing" 4.

; ******************************************************************
; TABLEAU 5 DESCRIPTEUR «END-POINTS»
; ******************************************************************
Endpoint1
retlw (Endpoint2-Endpoint1)/2 ; bLength
retlw DSC_EP ; bDescriptorType
retlw 0x81 ; bEndpointAddress
retlw 0x03 ; bmAttributes
retlw 0x01 ; wMaxPacketSize (low-b)
retlw 0x00 ; wMaxPacketSize (high-b)
retlw 0x0A ; bInterval
Endpoint2
retlw (EndConfig1-Endpoint2)/2 ; bLength
retlw DSC_EP ; bDescriptorType
retlw 0x01 ; bEndpointAddress
retlw 0x03 ; bmAttributes
retlw 0x05 ; wMaxPacketSize (low-b)
retlw 0x00 ; wMaxPacketSize (high-b)
retlw 0x0A ; bInterval
EndConfig1


"Listing" 5.

ReportDescriptor
retlw 0x06 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x01 ; Usage Page (low-b) (“Vendor Defined Page 1”)
retlw 0xFF ; Usage Page (high-b) (“Vendor Defined Page 1”)
retlw 0x09 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x01 ; Usage (“Vendor Defined Usage 1”)
retlw 0xA1 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x01 ; Collection (“Application”)
retlw 0x09 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x02 ; Usage (“Vendor Defined Usage 2”)
retlw 0xA1 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x00 ; Collection (“Physical”)
retlw 0x06 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x02 ; Usage Page (low-b) (“Vendor Defined Page 2”)
retlw 0xFF ; Usage Page (high-b) (“Vendor Defined Page 2”)
retlw 0x09 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x03 ; Usage (“Vendor Defined Usage 3”)
retlw 0x09 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x04 ; Usage (“Vendor Defined Usage 4”)
retlw 0x15 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x00 ; Logical Minimum (0)
retlw 0x26 ; Octet de préfixe (bTag,bType,bSize)
retlw 0xFF ; Logical Maximum (low-b) (255)
retlw 0x00 ; Logical Maximum (high-b)
retlw 0x75 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x08 ; Report Size (8 bits)
retlw 0x95 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x01 ; Report Count (1 campo dati)
retlw 0x81 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x02 ; Input (Data, Var, Abs)
retlw 0x09 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x05 ; Usage (“Vendor Defined Usage 5”)
retlw 0x15 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x00 ; Logical Minimum (0)
retlw 0x26 ; Octet de préfixe (bTag,bType,bSize)
retlw 0xFF ; Logical Maximum (low-b) (255)
retlw 0x00 ; Logical Maximum (high-b)
retlw 0x75 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x08 ; Report Size (8 bits)
retlw 0x95 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x05 ; Report Count (5 campi dati)
retlw 0x91 ; Octet de préfixe (bTag,bType,bSize)
retlw 0x02 ; Output (Data, Var, Abs)
retlw 0xC0 ; End Collection (“Physical”)
retlw 0xC0 ; End Collection (“Application”)
end_ReportDescriptor


"Listing" 6.

DEVICE NAME: Lecture/Ecriture SDCARD
MANIFACTURER: Microchip
SERIAL NUMBER: TAU333
CONFIGURATION: CFG1
INTERFACE: EP1/INOUT


"Listing" 7.

‘*********************************
‘*Connexion avec la SDCard
‘*********************************
SCK var PORTB.6 ‘CLOCK-CARD PIN5 (27 PIC)
SDI var PORTB.5 ‘DONNEES-ENTREE-CARD PIN2 (26 PIC)
SS var PORTB.4 ‘SELECTION-CARD PIN1 (25 PIC)
SDO var PORTB.2 ‘DONNEES-SORTIE-CARD PIN7 (23 PIC)
‘********
‘* LED
‘********
ROSSO var PORTA.3 ‘LED ROUGE
VERDE var PORTA.5 ‘LED VERTE
‘***************
‘* Application
‘***************
RISP1 var byte ‘REPONSE TYPE R1 PAR CARD (8bit)
RISP2 var word ‘REPONSE TYPE R2 PAR CARD (16bit)
IND1 var word ‘ADRESSE SDCARD WORD HAUTE BIT 16-31
IND0 var word ‘ADRESSE SDCARD WORD BASSE BIT 0-15
CAR var byte ‘CARACTERE A ECRIRE
CONTA VAR BYTE ‘compteur octets reçus
CMD VAR BYTE[5] ‘Séquence Commande+IND0+IND1
CONTA1 var word ‘COMPTEUR
CONTA2 var word ‘COMPTEUR
CTL var byte ‘OCTET DE CONTROLE FRAM
QX var byte ‘ANALYSE 4 BITS Réponse Données


"Listing" 8.

ADCON1 = 001111 ‘PIN RA Numériques
TRISA = 000000 ‘ PORTA en sortie
TRISB = 000100 ‘ RB6=CLOCK RB5=VERSO CARD
‘ RB4=SELEC CARD RB2=PAR CARD
PORTA = 0 ‘ Reset LED
ROSSO = 1
VERDE = 0

USBInit ‘ Processus d’énumération à la fin le dispositif ‘ entre dans l’état Configuré

Pause 500 ‘ Attente


"Listing" 9.

RESET:
SS=1
FOR CONTA1 = 1 TO 10
SHIFTOUT SDI,SCK,MSBFIRST,[$FF] ‘Envoie cycles d’horloge à vide
NEXT CONTA1
SS=0
PAUSE 50
‘********************************
‘* CMD0 maintenant SS à 0
‘********************************
SHIFTOUT SDI, SCK, MSBFIRST, [$40,$00,$00,$00,$00,$95] ‘Envoie CMD0
SHIFTIN SDO, SCK, MSBPRE, [RISP1] ‘Lis réponse R1 à partir de la Card
CONTA1 = 0
WHILE RISP1 <> 1
SHIFTIN SDO, SCK, MSBPRE, [RISP1] ‘Lit réponse R1 à partir de la Card
CONTA1 = CONTA1 + 1
IF CONTA1 >= 255 THEN ‘Time-Out écoulé, il sort
GOTO ERRORE
ENDIF
WEND
SS=1
PAUSE 50
SS=0


"Listing" 10.

‘********************************************************
‘* Envoie à répétition CMD1 jusqu’à réponse = 0
‘********************************************************
CONTA1 = 0
RISP1 = 1
WHILE RISP1 <> 0
SS=1
SHIFTOUT SDI,SCK,MSBFIRST,[$FF]
SHIFTIN SDO,SCK,MSBPRE,[RISP1]
SS=0
PAUSE 50
SHIFTOUT SDI,SCK,MSBFIRST,[$41,$00,$00,$00,$00,$FF,$FF] ‘Envoie CMD1
SHIFTIN SDO,SCK,MSBPRE,[RISP1]
CONTA1 = CONTA1 + 1
IF CONTA1 >= 255 THEN ‘Time-Out écoulé, il sort
GOTO ERRORE
ENDIF
WEND


"Listing" 11.

AVVIOP:
ROSSO = 0 ‘Extinction LED Rouge
VERDE = 1 ‘Allumage LED Verte
RICEVI:
USBService
CONTA = 5
USBIN 1,CMD,CONTA,RICEVI ‘Reçoit séquence commande
USBService
IF CMD[0] = 17 THEN ‘CMD17 = Lecture Secteur
GOTO LEGGI
ENDIF
IF CMD[0] = 24 THEN ‘CMD24 = Ecriture Secteur
GOTO SCRIVI
ENDIF
GOTO AVVIOP


"Listing" 12.

LEGGI:
ROSSO = 1 ‘Allumage LED Rouge
VERDE = 0 ‘Extinction LED Verte
IND0.BYTE1 = CMD[1] ‘Valorisation Adresse à lire
IND0.BYTE0 = CMD[2]
IND1.BYTE1 = CMD[3]
IND1.BYTE0 = CMD[4]

Initialisation de l’adresse du bloc à lire sur la carte à travers les 4 derniers octets de la séquence de 5.
‘* LECTURE 512 OCTETS SUR SDCARD SS=1 SHIFTOUT SDI,SCK,MSBFIRST,[$FF] SHIFTIN SDO,SCK,MSBPRE,[RISP1] SS=0 SHIFTOUT SDI,SCK,MSBFIRST,[$51,IND1.BYTE1,IND1.BYTE0,IND0.BYTE1,IND0.BYTE0,$FF]
Adresse du bloc à lire passé à la carte comme paramètre de CMD17.
‘Envoie CMD17 SHIFTIN SDO,SCK,MSBPRE,[RISP1] CONTA1 = 0 WHILE RISP1<> 0 SHIFTIN SDO,SCK,MSBPRE,[RISP1] CONTA1 = CONTA1 + 1 IF CONTA1 >= 255 THEN ‘Time-Out écoulé, il sort GOTO ERRORE ENDIF WEND ‘Réception START BLOCK SHIFTIN SDO,SCK,MSBPRE,[RISP1] CONTA1 = 0 WHILE RISP1<> $FE
Réception du Start-Block 11111110.
SHIFTIN SDO,SCK,MSBPRE,[RISP1] CONTA1 = CONTA1 + 1 IF CONTA1 >= 255 THEN ‘Time-Out écoulé, il sort GOTO ERRORE ENDIF WEND ‘Réception BLOC DONNEES FOR CONTA2= 0 TO 511 SHIFTIN SDO,SCK,MSBPRE,[CAR] INVIA: USBService USBOUT 1,CAR,1,INVIA ‘Envoie par USB
Réception de 1 octet et écriture sur FRAM.
NEXT CONTA2 ‘Réception CRC SHIFTIN SDO,SCK,MSBPRE,[RISP1] SHIFTIN SDO,SCK,MSBPRE,[RISP1] ‘Dès que la carte a fini de lire vérifie l’état de la carte ‘Envoie le CMD13 SS=1 SHIFTOUT SDI,SCK,MSBFIRST,[$FF] SHIFTIN SDO,SCK,MSBPRE,[RISP1] SS=0 SHIFTOUT SDI,SCK,MSBFIRST,[$4D,$00,$00,$00,$00,$FF]
Réception du statut de la carte à travers la réponse à 16 bits.
‘Reçois le status à 16 bits réponse format 2 SHIFTIN SDO,SCK,MSBPRE,[RISP2\16] CONTA2=0 WHILE RISP2.BYTE0 <> 0 SHIFTIN SDO,SCK,MSBPRE,[RISP2\16] CONTA2 = CONTA2 + 1 IF CONTA2 >= 255 THEN GOTO ERRORE2 ENDIF WEND GOTO AVVIOP "Listing" 13. SCRIVI: ROSSO = 1 ‘Allumage LED Rouge VERDE = 0 ‘Extinction LED Verte IND0.BYTE1 = CMD[1] ‘Valorisation Adresse à écrire IND0.BYTE0 = CMD[2] IND1.BYTE1 = CMD[3] IND1.BYTE0 = CMD[4] ‘------------------------------------------------------------ ‘* ECRITURE 512 OCTETS SUR SDCARD ‘------------------------------------------------------------ USBService SS=1 SHIFTOUT SDI,SCK,MSBFIRST,[$FF] SHIFTIN SDO,SCK,MSBPRE,[RISP1] ‘Envoie CMD24 écriture bloc sur SDCard SS=0 SHIFTOUT SDI,SCK,MSBFIRST,[$58,IND1.BYTE1,IND1.BYTE0,IND0.BYTE1,IND0.BYTE0,$FF]
Passage de l’adresse du bloc à écrire.
SHIFTIN SDO,SCK,MSBPRE,[RISP1] CONTA2 = 0 WHILE RISP1 <> 0
Vérifie si la carte est prête à recevoir des données.
SHIFTIN SDO,SCK,MSBPRE,[RISP1] CONTA2 = CONTA2 + 1 IF CONTA2 > 10000 THEN GOTO ERRORE ENDIF WEND ‘Envoie Start Block %11111110=$FE SHIFTOUT SDI,SCK,MSBFIRST,[$FE] "Listing" 14. FOR CONTA1 = 1 TO 102 RX5: USBService CONTA = 5 USBIN 1,CMD,CONTA,RX5
Réception bloc 5 octets.
USBService ‘Commence Ecriture sur SDCARD FOR CONTA = 0 TO 4 CAR = CMD[CONTA] SHIFTOUT SDI,SCK,MSBFIRST,[CAR]
Ecriture 5 derniers octets reçus.
NEXT CONTA NEXT CONTA1 RX6: USBService CONTA = 5 USBIN 1,CMD,CONTA,RX6 USBService CAR = CMD[0] SHIFTOUT SDI,SCK,MSBFIRST,[CAR] CAR = CMD[1] SHIFTOUT SDI,SCK,MSBFIRST,[CAR]
Fermeture du secteur.
"Listing" 15. SHIFTOUT SDI,SCK,MSBFIRST,[$FF,$FF] SHIFTIN SDO,SCK,MSBPRE,[RISP1] QX = 000000 QX = RISP1 & $0F
4 derniers bits réponse de la commande d’écriture : 0101 DONNEES ACCEPTEES 1011 DONNEES REFUSEES ERREUR CRC 1101 DONNEES REFUSEES ERREUR ECRITURE
IF QX <> 000101 THEN GOTO ERRORE ENDIF ‘Reçois le bit busy de la carte pendant l’écriture SHIFTIN SDO,SCK,MSBPRE,[RISP1] CONTA2=0 WHILE RISP1 = 0 SHIFTIN SDO,SCK,MSBPRE,[RISP1] CONTA2 = CONTA2 + 1 IF CONTA2 >= 255 THEN GOTO ERRORE ENDIF WEND ‘Envoie le CMD13 SS=1 SHIFTOUT SDI,SCK,MSBFIRST,[$FF] SHIFTIN SDO,SCK,MSBPRE,[RISP1] SS=0 SHIFTOUT SDI,SCK,MSBFIRST,[$4D,$00,$00,$00,$00,$FF] SHIFTIN SDO,SCK,MSBPRE,[RISP2\16]
Réception status de la carte.
CONTA2=0 WHILE RISP2.BYTE0 <> 0 SHIFTIN SDO,SCK,MSBPRE,[RISP2\16] CONTA2 = CONTA2 + 1 IF CONTA2 >= 255 THEN GOTO ERRORE2 ENDIF WEND GoTo AVVIOP


Le logiciel pour PC
Voyons maintenant le logiciel que nous ferons tourner sur l’ordinateur pour commander la lecture/écriture de la SD.
Il a été écrit en Delphi et utilise principalement l’objet TJvHidDevice-Controller : il s’agit d’un composant conçu lors d’un projet du JEDI (Joint Endeavour of Delphi Innovators), c’est-à-dire une communauté internationale d’un millier de développeurs Delphi, dont le but est de diffuser cet environnement et de son frère cadet Kylix. L’interface du programme est très simple à utiliser et elle permet d’expérimenter immédiatement les fonctions que nous avons introduites dans le programme.
L’écran principal (figure 5) visualise trois panneaux : l’un contient les données concernant l’USB, un autre permet de choisir la dimension de la carte et le troisième comporte les poussoirs nécessaires aux fonctions de lecture/écriture. Le tout est complété par une simple grille de 512 cellules divisée en 32 lignes de 16 éléments.
Il est ainsi possible de contrôler et de modifier les valeurs. Afin d’éviter les erreurs, on a prévu une procédure de contrôle de la congruence des données insérées, dès qu’une lecture/écriture ou une export/importation est lancée.
En cas d’insertion d’une valeur non admissible (incongrue), un message indiquant le numéro de la ligne et celui de la colonne (soit les coordonnées de la cellule fautive) est visualisé.
Si nous relions le circuit au port USB (la SD étant déjà insérée dans le lecteur) à la suite du processus d’énumération, les champs identifiants sont chargés dans ce panneau (valeur insérées dans le descripteur String).
Dans la liste des dispositifs apparaît le mot lecture/écriture SD-Card. Le Status de la communication est mis à jour (Relié ou Débranché) et si nous regardons notre platine, nous voyons que la LED jaune s’allume la première (la tension d’alimentation arrive bien), suivie de la LED verte (la carte a dépassé la phase de “reset”, l’entrée en mode SPI et le processus d’initialisation). Notez que si on relie le circuit sans SD dans le lecteur, les LED verte et rouge s’allumeront ensemble (pour signaler l’erreur).
Après cette première phase, on peut se positionner sur le panneau Paramètres Card pour sélectionner à travers les deux petites flèches la capacité de la carte.
Ainsi, la limite maximale des secteurs accessibles est recalculée. Le nombre se réfère à la quantité de sections de 512 octets utilisables pour stocker les données.
On peut alors se positionner sur le panneau Procedure. Ici nous insérons le nombre de secteurs que nous voulons élaborer ; naturellement, la modification de ces champs est liée à la limite dimensionnelle de la carte que nous venons d’établir. Au moyen des poussoirs du panneau, nous pouvons lancer 5 fonctions fondamentales (nous les analysons ci-dessous).
Leggi : un clic sur ce poussoir lance une lecture du secteur que nous avons précisé dans le champ (Blocco Let/Scr) ; l’avancement de la procédure est contrôlable au moyen de la fenêtre d’applet rouge (voir figure 5) ; au fur et à mesure de l’arrivée de la séquence d’octets au PC, les valeurs sont insérées dans la grille et sont directement visibles et modifiables.
Scrivi : lance une information d’écriture du secteur que nous avons précisé dans le champ (Blocco Let/Scr) et charge directement les données de la grille.
Cancella : vide la grille en insérant la valeur FFh dans toutes les cellules.
Importa : charge les données dans la grille à partir d’un fichier externe.
Esporta : envoie les données de la grille vers un fichier externe. En ce qui concerne les deux dernières fonctions, songez que les fichiers utilisés ont une extension de type .sdc, ce ne sont toutefois que des fichiers texte.
Leur structure est des plus simples : à chaque ligne correspond une valeur à insérer dans la grille.
La séquence est produite en lisant chaque ligne de gauche à droite et de haut en bas, comme on le ferait en lisant une feuille de papier. Avec un clic sur le poussoir Importa on ouvre une fenêtre de dialogue, comme le montre la figure 6.
Il est donc possible de sélectionner le fichier et de le charger par un clic sur Apri. Un contrôle des données insérées est effectué pour signaler éventuellement une ligne erronée. La procédure d’exportation fonctionne de manière essentiellement complémentaire.
Là encore, une fenêtre de dialogue s’ouvre, dans laquelle on peut insérer le nom du fichier que l’on veut créer.
Après quoi, avec un clic sur le poussoir Salva, la grille est transférée dans le fichier sélectionné.

Figure 4 : Pour la programmation du PIC nous utilisons le Melabs Programmer de MicroEngineering Labs, en maintenant la configuration visible dans cette fenêtre de dialogue.

Figure 5 : L’écran principal du programme présente trois panneaux.

Figure 6 : Un clic sur le poussoir Importer ouvre cette fenêtre de dialogue.

La réalisation pratique
La réalisation pratique de ce lecteur/enregistreur de données sur SD-Card en USB est des plus simples et des plus rapides (toute la complexité de l’appareil venant du programme résident et du logiciel pour PC). La platine est constituée d’un petit circuit imprimé simple face, dont la figure 2b donne le dessin à l’échelle 1. Fabriquez-le au moyen de la méthode dite de la “pellicule bleue” et, quand vous l’avez devant vous, gravé, percé, étamé, commencez par insérer les deux supports de circuits intégrés et les deux “straps” (sous R3 et entre C4 et C6). Vérifiez attentivement vos soudures (ni court-circuit entre pistes ou pastilles ni soudure froide collée). Insérez et soudez ensuite tous les composants (comme le montrent les figures 2a et 3), en poursuivant par les résistances, condensateurs, diodes schottky, LED, quartz (debout) et régulateur (debout sans dissipateur et semelle métallique tournée vers l’extérieur de la platine) et en terminant par le “périphériques” : à savoir le connecteur USB-B pour circuit imprimé. Attention à l’orientation des composants polarisés : circuits intégrés (repère-détrompeurs en U bien orientés vers le bas, mais insérez-les à la toute fin), diodes, LED, régulateur et électrolytiques.
N’oubliez pas de souder aussi les languettes de blindage du connecteur USB-B. Vérifiez bien toutes les polarités et (encore une fois) la qualité des soudures.
Voilà pour la face “ composants”.
Retournez la platine et soudez très minutieusement (directement sur les pistes du “côté cuivre”) le lecteur de carte (ou porte-SD) SD1. Insérez les circuits intégrés. Le microcontrôleur est disponible déjà programmé en usine (voir nos annonceurs). Vérifiez tout encore une fois.
Vous pouvez maintenant installer la platine dans un boîtier plastique de dimensions appropriées : le couvercle sera percé de 3 trous pour le passage des LED ; l’un des petits côtés d’un évidement carré pour le connecteur USB et l’autre petit côté d’une fente pour insérer la SD-Card. L’alimentation en 5 V se fait donc par le port USB de l’ordinateur. Pour relier la platine à l’ordinateur, utilisez un banal câble USB.

Conclusion
Quoique fort simple matériellement, cet appareil permet de se familiariser avec ce nouveau support de mémoire et de réaliser des expérimentations formatrices avant d’aborder des arguments plus complexes : par exemple, ce circuit vous aidera à anlyser les secteurs clés du formatage FAT16 comme le “boot-sector” et la “root-directory” (voir les précédents articles consacrés à des montages mettant en oeuvre une SD-Card).
Mais en dehors de cet aspect didactique (qui, il est vrai, nous a une fois de plus guidés), ce lecteur/enregistreur de données USB vous sera utile pour acheminer vers un ordinateur des données écrites par des appareils de tous types dans une carte SD ; ou bien pour transférer dans cette même SD des fichiers présents dans le PC.