Créer pcb micro SD + électronique

Bonjour à tous,

Tout d’abord je sais pas si je poste sur le bon type de forum (excusez moi si ce n’est pas le cas). Si vous avez un autre forum typé “électronique” pour ce genre de question, n’hésitez pas à me rediriger.

Contexte
Je cherche à créer mon propre module de lecture de carte micro SD. Je sais que ça va me coûter plus cher. Je fais ce petit projet pour acquérir de l’expérience dans la création/design de PCB ainsi que la soudure de composants SMD.

Recherches
Après diverses recherches je suis tombé sur ce module (en page 9) : https://www.mouser.be/ds/2/185/DM3_catalog-939223.pdf
D’après les specs (https://www.sdcard.org/developers/overview/), les SD ne fonctionnent que dans une plage de tension de 2.7 à 3.6V. L’arduino étant en 5v, je vais devoir convertir ces tensions.
Voici aussi une vidéo sur la soudure d’une telle pièce : Soldering a microSD card to the Quick Proto on Vimeo

Finalement, voici un schéma tout fait trouvé sur le site dfrobot :

Questions

  • D’après le schéma donné avant, on remarque un diviseur de tension (2.2k/(1k + 2.2k)) pour les données arduino->SD. Dans l’autre sens (SD->arduino), il n’y a rien. On suppose qu’un thresold de ~3.4v est donc suffisant pour détecter correctement un flanc montant ?
  • Pourquoi avoir utiliser des résistances en “kilo-ohm” et pas des valeurs plus hautes ? Par exemples centaines de KOhm ? Ainsi le module consommerait moins (rendement meilleur). Est ce que la détection d’un flanc montant passe aussi par un courant minimal (au travers de chaque pin)? Ou pourrait-on trouver ces specs ?
  • On remarque des capas de découplages C32 sur 5V et C31 sur 3.3v. Comment trouver leurs valeurs ?
  • A la lecture de la datasheet (p9 schéma en bas à gauche), je ne comprends pas comment on peut “voir” les parties où il faut souder. On a bien évidemment les pins qu’on devine mais les autres parties ? C’est indiqué nul part il me semble ? La seule chose précisée c’est le “non conductive traces”. J’ai pu comprendre comment faire en regardant la vidéo, ainsi on voit le modèle utilisé.

J’espère que mes questions ont été assez claires, sinon faite le moi savoir.
Merci à tous,

Renaud

Si tu parles anglais, tu as peut-être plus de chances d'avoir des réponses sur la partie General electronics du forum.

Ici tu devrais trouver pas mal de réponse à tes questions :

.

Quelques réponses vite fait :
Sens direct Sd->arduino, on devrait plutôt dire SD->atmega.
Le seuil de basculement d'une entrée est soit normé (CMOS par exemple : seuil bas = 0,2 Vcc, seuil haut 0,8 Vcc) soit propriétaire.

Les atmega de la famille avr d'Atmel ont un seuil de basculement propriétaire.
Pour un micro alimenté sous 5V le seuil de déclenchement bas vers haut = 2,5V et haut vers bas = 2,4V.
Ces micros sont donc compatibles en entrée avec des composants alimentés en 3,3V.

Première conclusion cela fonctionne avec un avr mais avec un micro d'un autre fournisseur il faudrait vérifier.

Où trouver les spec ?
Mais bien évidement dans la datasheet du microcontroleur à télécharger sur le site d'Atmel pour être assuré d'avoir la dernière version.
La consultation des datasheets doit devenir un réflexe.

Valeur des résistances :
En électronique, comme ailleurs, on ne fait que des compromis entre :

  • la théorie
  • la réalité du terrain
  • la baisse des coûts

Commençons par le dernier : un fabricant a tout intéret à limiter le nombre de valeurs de résistances qu'il utilise : moins de stockage, prix d'achat en plus grosse quantité.

La théorie : tu as raison sur le papier on pourrait le faire
La réalité : aucun composant n'est parfait, tous ont des imperfections et des éléments parasites. Parmis les imperfections il y a le courant de fuite. Aucun composant n'est un parfait isolant, un petit courant, dit de fuite, est toujours présent et ce courant double tous les 10 degrés. Il peut finir par devenir non négligeable.

C'est pour cela que dans les montages on évite de tutoyer de trop près cette zone de valeur de courant de fuite et qu'on ne desend pas à des valeurs de résistance trop basses.

Condensateurs :
Compromis entre les valeurs suffisament grandes pour être efficace et éviter des stocks trop divers pour obtenir des prix planchers.
Les condensateurs filtrent le bruit.
Le bruit est un phénomêne qui peut s'assimiler a des signaux sinusoîdaux de fréquences élevées.
Un condensateur est un isolant pour le continu (a l'exeption de son courant de fuite bien évidement).
Plus la fréquence augmente plus le condensateur se rapproche d'un court-circuit.
Pour les inductances et condensateurs on utilise la notion d'impédance qui est la généralisation à l'alternatif de la notion de résistance du continu
Par tradition ont utilise la lettre Z pour éviter la confusion avec le R de la résistance qui continue à exister en alternatif.
Pour un condensateur :
Z = 1/ (2PIFC)
Pour une inductance c'est l'effet inverse :
Z = 2
PIFL

Tu trouvera le plus souvent des gros condensateurs (dit chimique ou aluminium) avec des valeurs de 10 à 20 µF pour les filtrages de sortie d'alimentation et des petits condensateurs "céramique" de 100 nF pour les découplages au plus près des circuits intégrés.
Les "gros" sont là pour filtrer les fréquences basses, par contre avec tous leurs éléments parasites ils sont des passoires pour les fréquences élevées.
Les "petits" céramiques sont insufisants pour les fréquences basses par contre ils sont très efficaces pour les fréquences élevées.
100 nF est une valeur passe-partout qui permet d'avoir des prix très bas.

Dernier conseil :

La surface de base d'un circuit imprimé fabriqué dans l'empire du soleil levant est 10 exemplaires de 10cm par 10 cm.
Tu peux demander moins mais le prix ne baissera pas.

Avec ce que tu veux faire tu aura du mal à occuper plus du tiers de la surface.

Ce serait dommage de ne pas utiliser le restant de cm2.
Réfléchis a ce que tu pourrait ajouter.

Moi je vois bien quelques empreintes pour circuits intégrés 2x4 ou 2x8 pins avec un trou métallisé en extrémité de chaque connexion de pin.
Un peu comme l'image du lien Soldering a microSD card to the Quick Proto on Vimeo
Des groupes de couples de 2 trous métallisés : pour pouvoir souder des résistances et des fils de connexion.
Si je n'ai pas été clair je peux faire un dessin.

Tu va tester le SPI avec la carte SD, pourquoi ne pas profiter de la place dispo pour tester l'I2C.
Au choix horloge RTC (DS3231 recommandée) ou un circuit multifonction comme le PCF8591 (ADC, DAC)

Bonsoir,

D'après le schéma donné avant, on remarque un diviseur de tension (2.2k/(1k + 2.2k)) pour les données arduino->SD. Dans l'autre sens (SD->arduino), il n'y a rien. On suppose qu'un thresold de ~3.4v est donc suffisant pour détecter correctement un flanc montant ?

  • Pourquoi avoir utiliser des résistances en "kilo-ohm" et pas des valeurs plus hautes ? Par exemples centaines de KOhm ? Ainsi le module consommerait moins (rendement meilleur). Est ce que la détection d'un flanc montant passe aussi par un courant minimal (au travers de chaque pin)? Ou pourrait-on trouver ces specs ?

Pour passer de 5V à 3V3, on peut certes mettre deux résistances en diviseur de tension. Le problème est que l'on fait un filtre passe-bas avec la capacité d'entrée de la porte (ici la carte SD) et toutes les capa parasites. La fréquence de coupure dudit filtre est 1 / (2 * pi * RC).

En pratique, cela avachit les flancs du signal, ce qui n'est pas bon du tout pour la reconnaissance des niveaux.

Pour abaisser la fréquence de coupure, on choisit, quand on veut aller vite, ce qui est le cas d'une carte SD, de diminuer la résistance puisqu'on ne peut rien faire sur les capas.
Avec les valeurs données, la résistance équivalente est d'un peu plus d' 1kOhm (R1 // R2).
Si on estime la capa à 50pF, cela donne une fréquence de coupure vers 3MHz. Ca devrait pouvoir marcher, mais sans garantie... Et il n'est pas raisonnable de baisser encore la valeur des résistances de manière significative.

Sur les shields Ethernet / carte SD, il y a de vrais circuits changeurs de niveau... Si vous vous lancez dans un pcb, sauf à avoir testé avant que le diviseur de tension fait l'affaire en dynamique, ne prenez pas de risques et mettez un vrai changeur de niveau. Vous n'avez qu'à copier ce qui marche sur les shields...

Pour ma part, je limite les adaptations 5V -> 3V3 à résistances à du 9600 bds.

Dans le sens 3V3 5V, cela marche en direct dans la majorité des cas.

Bonne bidouille

MicroQuettas

Bonjour à tous,

Merci pour vos réponses bien complète. J’ai pris soin de tout analyser.
Je connais bien toutes ces histoires de filtres mais je n’y avais même pas pensé… Et si j’y avais pensé, j’aurais sans doute négliger tout ça.
Dès lors je comprends pourquoi on diminue fortement les performances de notre circuit en augmentant les valeurs de résistances.

Reprenons l’exemple de MicroQuettas, avec nos résistances en parallèles ainsi que notre résistances parasite estimée à 50pF, on obtient fc = 4.6MHz (R// = 0.685 kOhm)
Sachant que 1000 Baud = 1KHz, on aurait 4600 0000 baud ! Largement suffisant non ? (source : http://www.microchip.com/forums/m105451.aspx)

J’ai analysé cette datasheet : http://www.farnell.com/datasheets/1840541.pdf?_ga=2.165899390.1701671506.1521565430-738419759.1520536286&_gac=1.183624532.1521566019.CjwKCAjw4sLVBRAlEiwASblR-_iQkqfitJ1ksEVKVQXt396XSMdxDwWkoah7T1iP5zcqncULnysVvxoC6ZAQAvD_BwE

Après lecture, est-on d’accord que :

  • VSS c’est le GND ? (En gros la tension de référence du circuit)
  • Pour passer de 5V à 3.3V logique, je branche VCC = 5V et VDD = 3.3V

Mes deux questions concernant cette datasheet :

68tjs

Ce “petit” projet s’inscrit dans un plus gros, plus complexe. Je vais allègrement remplir ma carte de 10cm² ;).

Merci encore pour votre temps

Bonsoir,

Sans vouloir chipoter, dans votre cas 2k2 en parallèle avec 2k2+1k cela fait 1k3, donc une fréquence de coupure, toujours en estimant les capas parasites à 50pF à 2,4 MHz.

Si j'ai bien compris, vous allez utiliser une liaison SPI pour communiquer avec la carte SD. Dans la notice de l'AVR 328, la fréquence de la liaison SPI (Cf. § 19) est de Fck /4 et peut-être portée à Fck/2. Avec une fréquence horloge typique de Fck=16 MHz, on est donc à 4Mhz, voire à 8 Mhz. Le signal va être atténué et surtout avachi... Pas sûr du tout que cela marche...

Maintenant, Arduino peut avoir ralenti l'horloge, mais je ne vois pas pourquoi ils l'auraient fait.
En conséquence, avant de réaliser un CI, faites un essai. Si dans les shields Ethernet/SD ils ont mis de vrais changeurs de niveau sur les liaisons SPI, il y a une raison...

Voila, et surtout, bonne bidouille !

MicroQuettas

MicroQuettas:
Sans vouloir chipoter, dans votre cas 2k2 en parallèle avec 2k2+1k cela fait 1k3, donc une fréquence de coupure, toujours en estimant les capas parasites à 50pF à 2,4 MHz.

Ma première question faisait référence à ce schéma : http://image.dfrobot.com/image/data/DFR0229/MicroSD%20ModuleV1.0_Sch.pdf

Je pense que vous avez confondu ce que j'ai écris dans mon premier post (2.2k/(1k + 2.2k)) par (2.2k**//**(1k + 2.2k))

Concernant le reste de votre réponse, en effet le signal sera avachi. Ce qui est assez suprenant c'est que la carte microSD de chez dfrobot est la meilleure que j'ai eu l'occasion de tester. Et elle fonctionne bien en FULL_SPEED avec la lib sdFat.

Je vais regarder tout ça sur un oscillo quand j'ai le temps ( et que mon ami me prête le sien, ça coûte un pont ces jouets)

Concernant mes précédentes questions, quelqu'un sait m'aider ?

Merci encore à vous,

Renaud

PS : Si on connaît la vitesse du signal (disons 8MHz), et qu'on estime +/- la capa, on pourrait connaître son atténuation en DB pour redimensionner les résistances correctement. C'est plus du chipo tout ça c'est sur.

J'ai bel et bien décidé de passer sur un level shifter.

En première approximation le circuit est équivalent à une résistance en série associée à une capacité connectée à la messe.

Le pont par le théorème de Thévenin se transforme en une source de tension équivalente à la sortie du pont de résistance a vide avec une résistance série correspondant aux deux résistances du pont mises en parallèle.

La suite c'est une charge bien connue de circuit RC.
Toute la documentation existe sur internet en commençant par Wikipédia.

C'est un domaine où il n'existe pas de formule qu'il suffit d'appliquer pour avoir une seule solution.
Déjà tout dépend du récepteur : quels sont ses seuils de commutation.

Influence de la fréquence:
Si la fréquence est élevée la période du signal sera petite.
Tout va dépendre du rapport entre le temps de montée du signal qui dépend de la constante de temps RC et la durée de la période.
Si la constante de temps RC est trop grande devant la période du signal, le condensateur n'aura jamais le temps d'atteindre la valeur des seuils de commutation du circuit récepteur.

A ta place je câblerais au mieux c'est à dire en utilisant obligatoirement des résistances et condensateur CMS.
Surtout pas les horreurs absolues vues des hautes fréquences que sont les résistances à piquer.
L'idéal serait un format 0603, mais 0805 sera plus facile à souder et améliorera bien les choses.

Soigne le plan de masse : c'est un vrai composant à lui tout seul et c'est AMHA le plus important.

Rien que cela devrait sans difficulté te permettre de fonctionner à 8 MHz qui reste quand même une fréquence basse.
Si cela ne fonctionne pas, sache que la fréquence du SPI est modifiable.
Tu baisses drastiquement la fréquence SPI pour valider câblage et programme (on ne sait jamais, il ne faut jamais rien exclure) et tu augmente la fréquence jusqu'à trouver la limite de fonctionnement.

Mise en garde sur les mesures à l'oscilloscope :
La prise de masse de la sonde de mesure doit être très courte sinon la mesure sera folklorique et ne signifiera rien.