Tests de continuité avec une Arduino

Bonjour à tous,

Je me permet d'ouvrir ce nouveau sujet car j'ai une utilisation de l'Arduino assez peu conventionnelle et de ce fait assez peu documentée. J'ai vu un seul sujet assez similaire mais qui n'aboutit pas réellement à une solution. J'avais déjà un peu échangé à ce sujet avec des habitués du forum mais dans un autre contexte (raccorder ce projet à un autre).
Alors voilà, tout comme sur un multimètre, j'aimerais créer un testeur de continuité à partir d'une Arduino Due que j'ai à ma disposition. Ces tests seront conçus pour les 9 pins d'une carte SD. Le but étant de tester pin à pin toutes les combinaisons (pin 1 avec tous les autres, puis pin 2 avec tous les autres, etc...).
Avant de vous écrire, j'ai bien évidemment pas mal avancé sans réellement aboutir à une solution : ma première idée était de faire des mesures ohmiques, comme ce qui est fait sur le multimètre. En dessous d'une certaine valeur de résistance entre deux points (environ 40 ohms selon les multimètres et le réglage), on bip, au-dessus, on ne signale pas de court-circuit. Cependant, cela demanderait un pont diviseur de tension, des mesures analogiques, et des sorties analogiques sauf que les pins AnalogInput sont, comme leurs noms l'indiquent, incapables d'être des sorties. Réaliser cette idée me semble donc totalement infaisable. Je l'ai donc mise de côté au profit de ma deuxième idée.
La deuxième idée, que j'ai développée cette fois, consiste à connecter tous les pins de la carte SD directement aux pins digitaux. Le processus est simple : on envoie un "HIGH" (3.3V donc avec ma Due) sur un pin et on lit tous les autres. La présence d'un "HIGH" sur un autre pin signifie la présence d'un court-circuit, la présence d'un "LOW" signifie l'absence de court-circuit. Il y a plusieurs soucis avec cette méthode puisque tout est flottant, et je ne sais pas si j'attend suffisamment longtemps entre les changements d'états etc... pour que la mesure ai du sens.
Voici le code Arduino que j'ai développé et commenté :

// Déclaration du nom de mes pins SD associés aux pins digitaux
const int DT3 = 40;
const int CMD = 41;
const int Vs1 = 42;
const int Vcc = 43;
const int CLK = 44;
const int Vs2 = 45;
const int DT0 = 46;
const int DT1 = 47;
const int DT2 = 48;


void setup() {
  Serial.begin(9600);
// Tous les pins en OUTPUT
  pinMode(DT3, OUTPUT);
  pinMode(CMD, OUTPUT);
  pinMode(Vs1, OUTPUT);
  pinMode(Vcc, OUTPUT);
  pinMode(CLK, OUTPUT);
  pinMode(Vs2, OUTPUT);
  pinMode(DT0, OUTPUT);
  pinMode(DT1, OUTPUT);
  pinMode(Vs2, OUTPUT);
}

void loop() {
  // Tester chaque broche individuellement toutes les 5 secondes
  Serial.println("Pin tested: DT3");
  testPin(DT3);
  delay(5000);
  Serial.println("Pin tested: CMD");
  testPin(CMD);
  delay(5000);
  Serial.println("Pin tested: Vs1");
  testPin(Vs1);
  delay(5000);
  Serial.println("Pin tested: Vcc");
  testPin(Vcc);
  delay(5000);
  Serial.println("Pin tested: CLK");
  testPin(CLK);
  delay(5000);
  Serial.println("Pin tested: Vs2");
  testPin(Vs2);
  delay(5000);
  Serial.println("Pin tested: DT0");
  testPin(DT0);
  delay(5000);
  Serial.println("Pin tested: DT1");
  testPin(DT1);
  delay(5000);
  Serial.println("Pin tested: DT2");
  testPin(DT2);
  delay(5000);
}

//Fonction pour tester le pin
void testPin(int pinToTest) {
// On va placer un HIGH on met donc la broche en mode INPUT temporairement
  pinMode(pinToTest, INPUT);
  delay(100);
  // Mettre la broche à l'état HIGH
  digitalWrite(pinToTest, HIGH);
  delay(100); // Attendre que le signal se stabilise

  // Lire l'état de toutes les broches
  int dt3State = digitalRead(DT3);
  int cmdState = digitalRead(CMD);
  int vs1State = digitalRead(Vs1);
  int vccState = digitalRead(Vcc);
  int clkState = digitalRead(CLK);
  int vs2State = digitalRead(Vs2);
  int dt0State = digitalRead(DT0);
  int dt1State = digitalRead(DT1);
  int dt2State = digitalRead(DT2);

  // Afficher les résultats sur le moniteur série
  Serial.print("DT3: "); Serial.println(dt3State);
  Serial.print("CMD: "); Serial.println(cmdState);
  Serial.print("Vs1: "); Serial.println(vs1State);
  Serial.print("Vcc: "); Serial.println(vccState);
  Serial.print("CLK: "); Serial.println(clkState);
  Serial.print("Vs2: "); Serial.println(vs2State);
  Serial.print("DT0: "); Serial.println(dt0State);
  Serial.print("DT1: "); Serial.println(dt1State);
  Serial.print("DT2: "); Serial.println(dt2State);
// J'attend un peu au hasard entre les opérations
  delay(100);
  // Remettre la broche à l'état LOW pour le prochain test
  digitalWrite(pinToTest, LOW);
  delay(100);
// Remettre la broche en OUTPUT
  pinMode(pinToTest, OUTPUT);
  delay(100);
}

Le soucis de ce programme, c'est qu'il ne me donne pas du tout les résultats auxquels je m'attendais. je m'attendais à ce que le seul court-circuit soit entre les pins Vss1 et Vss2 (c'est le cas lorsque j'essaye avec un multimètre). En réalité j'ai des "0" partout qui s'affichent dans la console :

Je sais que la mesure du pin sur lequel on envoie le "HIGH" n'a pas de sens puisqu'on ne peut pas à la fois commander la sortie d'un pin et la lire mais je m'attendais tout de même au moins à voir des HIGH sur les broches sur lesquelles j'envoie du 3.3V.

Peut-être devrais-je repasser à mon idée initiale et tout faire analogiquement ? Ou rester sur cette idée ? Qu'en pensez-vous ?

Merci d'avance pour votre aide précieuse !

Je précise que j'ai pensé à l'utilisation d'une méthode toute simple avec une LED qui s'allume lorsque le circuit est fermé par exemple. Cependant, mon objectif est d'avoir des données exploitables dans l’ordinateur et écrites dans le moniteur série. Je vois mal comment je pourrais utiliser la LED dans ce cadre là, à part éventuellement en plaçant une photo-résistance en face et en déterminant lorsqu'elle est allumée ou éteinte ? Mais cette méthode me semble très "maison" et très peu pro tout de même.

ben si... rien ne vous empêche de faire

analogRead(A0);

puis plus tard

pinMode(A0, OUTPUT);
digitalWrite(A0, HIGH);

si si vous pouvez faire

pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
•••
if (digitalRead(2) == HIGH) {
  •••
} 

➜ rien ne vous empêche de lire l'état d'une pin qui est en OUTPUT

D'accord donc j'avais clairement un soucis de compréhension et de connaissance des pins analogiques de l'Arduino. Je ne savais même pas qu'on pouvait effectuer un digitalWrite sur ces pins.
Par contre j'ai du mal à comprend l'intérêt d'initialiser les pins de l'Arduino à INPUT ou OUTPUT si finalement on peut lire ou écrire à sa guise dessus, sans regard du pinMode dans lequel il est.

Dois-je en retenir que vous trouvez donc que ce système devrait fonctionner en théorie ? Et que surtout, je devrais au moins avoir un 1 aux pins sur lesquels j'écris un "HIGH" ?

un analogRead configure la pin en entrée du DAC et donc c'est un role particulier

quand vous mettez une pin en INPUT ça semble logique de lire ce que vous recevez
quand vous mettez une pin en OUTPUT, c'est le micro-contrôleur qui décide (enfin, votre code) si vous devez avoir cette pin HIGH ou LOW. Cet état est conservé dans un registre et lorsque vous faites un digitalRead sur cette pin en OUTPUT, vous lisez en fait l'état dans le registre

1 Like

bonjour

exact.
digitalWrite() écrit dans les registres PORTx :

  • chaque bit définit l'état de la broche concernée configurée en sortie ;
  • ou alors l'état de la pull-up interne si la broche est une entrée.

vrai ... et faux : il ne s'agit pas du même registre.
la lecture d'une broche numérique, qu'elle soit entrée ou sortie, se réalise par la lecture d'un registre PINx.
cette lecture est réellement effectuée au travers du tampon d'entrée, qui reste actif quelle que soit la direction de la broche, et qui permet la mise à jour de PINx à chaque coup d'horloge.
pour une entrée la lecture de PORTx ne donnera que l'état de la pull-up, pas de la broche.

conclusion :
digitalRead() ne donnera pas forcément l'argument de digitalWrite() car ce sont deux registres différents qui sont utilisés.

1 Like

En êtes vous bien sûr sur AT91SAM3X8E ? (C’est un Arduino Due)…

C'est une configuration assez classique dans les microcontrôleurs.
Les noms des registres sont différents de la famille ATmega mais l'organisation est très proche.

De vos différentes contributions, je vois que cette méthode avec les pins digitaux n'est peut-être pas la meilleure approche. Je pense que je dénature le côté très analogique des tests de continuité en voulant à tout prix faire de manière digitale. Je suis donc reparti sur l'idée de faire des mesures ohmiques entre chaque pins. J'ai fais le schéma électrique suivant : (désolé c'est assez brouillon avec ce nombre de fils j'aurais dû faire des labels)

Et je vous partage ce bout de code qui est la partie "importante" (le reste est beaucoup trop long pour être partagé ici) :

void testContinuity() {
  int pins[] = {DT3, CMD, Vs1, Vcc, CLK, Vs2, DT0, DT1, DT2};
  int numPins = sizeof(pins) / sizeof(pins[0]);
  
  for (int i = 0; i < numPins - 1; i++) {
    for (int j = i + 1; j < numPins; j++) {
      selectChannelsMUX(pins[i],pins[j]);
      delay(1000);
      
      float U2 = analogRead(A10) * 3.3 / 1024; // Mesure de la tension dans le pont diviseur
      float R2 = (U2 * 100) / (3.3 - U2); // Calcul de la valeur de la résistance
      
      Serial.print("Resistance between pins ");
      Serial.print(pins[i]);
      Serial.print(" and ");
      Serial.print(pins[j]);
      Serial.print(": ");
      Serial.println(R2);
      delay(1000);
    }
  }
}

void loop() {
  if (!alreadyExecuted) {
    testContinuity();
    alreadyExecuted = true;
  }
}

Avant exécution, j'avais testé les résistances pins à pins sur une carte SD et ça allait de 200kΩ à 1MΩ (sans compter les 2Ω entre Vss1 et Vss2). Au lancement, je m'attendais à voir des valeurs qui saturent à 1000 (car mon R1 est de 100Ω seulement) ou très proches de 0 pour Vss1/Vss2 mais sûrement pas les 36 valeurs que j'obtiens :
Resistance between pins 1 and 2: 56.34
Resistance between pins 1 and 3: 56.34
Resistance between pins 1 and 4: 61.77
Resistance between pins 1 and 5: 55.86
Resistance between pins 1 and 6: 61.26
Resistance between pins 1 and 7: 60.50
Resistance between pins 1 and 8: 65.70
Resistance between pins 1 and 9: 56.10
Resistance between pins 2 and 3: 63.06
Resistance between pins 2 and 4: 68.42
Resistance between pins 2 and 5: 62.80
Resistance between pins 2 and 6: 68.14
Resistance between pins 2 and 7: 67.59
Resistance between pins 2 and 8: 72.68
Resistance between pins 2 and 9: 63.32
Resistance between pins 3 and 4: 68.98
Resistance between pins 3 and 5: 63.32
Resistance between pins 3 and 6: 68.42
Resistance between pins 3 and 7: 68.14
Resistance between pins 3 and 8: 73.27
Resistance between pins 3 and 9: 63.58
Resistance between pins 4 and 5: 70.67
Resistance between pins 4 and 6: 76.25
Resistance between pins 4 and 7: 75.34
Resistance between pins 4 and 8: 80.60
Resistance between pins 4 and 9: 71.24
Resistance between pins 5 and 6: 69.54
Resistance between pins 5 and 7: 69.26
Resistance between pins 5 and 8: 74.74
Resistance between pins 5 and 9: 65.16
Resistance between pins 6 and 7: 77.47
Resistance between pins 6 and 8: 82.21
Resistance between pins 6 and 9: 71.81
Resistance between pins 7 and 8: 82.53
Resistance between pins 7 and 9: 71.52
Resistance between pins 8 and 9: 79.96
J'ai donc cette fois mesuré la résistance sur les pins lorsqu'ils sont connectés à tout ce montage et sans surprise, à cause des multiplexeurs, j'ai connecté ensemble dans leur électronique interne les 9 pins de la carte SD, et les ai donc court-circuités entre eux. J'ai donc des résistances qui vont de 30Ω à 90Ω avec le multimètre (de quoi même le faire "bipper" entre certains pins car <40Ω). Je pense donc avoir court-circuité les pins et mesurer tout simplement la Ron du multiplexeur. Ce que je ne m'explique pas cependant, c'est pourquoi elle varie légèrement mais cela pourrait être dû à l'électronique interne des MUX et les différents composants siégeant entre les entrées; qu'en pensez-vous ?

Je pense donc que l'idée de l'usage de MUX est à bannir pour les tests de continuité que je souhaite faire. Je commence à être à court d'idées.... Il faudrait que je branche tous mes pins SD à des AnalogInput et que je trouve une manière magique de faire fonctionner un pont diviseur avec ça.

Après vérification de toutes mes connexions au multimètre, il y avait un faux contact les multiplexeurs n'étaient pas alimentés en +9V. J'ai relancé le code et j'ai encore plus étrange et mes théories tombent à l'eau :
Resistance between pins 1 and 2: 102296.98
Resistance between pins 1 and 3: 102296.98
Resistance between pins 1 and 4: 102296.98
Resistance between pins 1 and 5: 102296.98
etc... bref j'ai cette valeur de résistance qui s'affiche partout y compris sur Vss1/Vss2

U2 doit être très proche de 3.3V et au moment donc de la division par 3.3-U2, j'ai quelque chose de très grand

J'ai décidé d'augmenter R1 en prenant une résistance de précision de 332Ω et j'obtiens des choses beaucoup plus cohérentes :

Resistance between pins 1 and 2: 339625.94 (valeur de saturation avec R1=332Ω)
Resistance between pins 1 and 3: 339625.94
Resistance between pins 1 and 4: 1567.26
[ça continue de saturer]
Resistance between pins 2 and 3: 339625.94
Resistance between pins 2 and 4: 1556.71
[ça continue de saturer]
Resistance between pins 2 and 9: 339625.94
Resistance between pins 3 and 4: 692.00 (valeur basse entre Vss1 et certains autres pins -> logique)
Resistance between pins 3 and 5: 895.32
Resistance between pins 3 and 6: 464.18 (valeur la plus basse entre les deux pins Vss -> logique)
Resistance between pins 3 and 7: 895.32
Resistance between pins 3 and 8: 927.14
Resistance between pins 3 and 9: 339625.94
[ça continue de saturer]
Resistance between pins 5 and 9: 339625.94
Resistance between pins 6 and 7: 869.30
Resistance between pins 6 and 8: 890.91
Resistance between pins 6 and 9: 339625.94
Resistance between pins 7 and 8: 339625.94
Resistance between pins 7 and 9: 339625.94
Resistance between pins 8 and 9: 339625.94

Le soucis que j'ai maintenant c'est que j'aimerais avoir des mesures de résistance cohérentes et proches de la réalité (je peux accepter une marge d'erreur de +/-50% je pense). Mais pour cela il faudrait que je change R1 selon la valeur de la résistance que je m'apprête à mesurer... ça ne va pas être une mince affaire de calibrer pour obtenir les vraies valeurs de résistance...

Autre petite erreur : j'étais sur du 5V et non pas 3.3V dans mon pont diviseur. Après avoir rectifié et placé du 3.3V, j'obtiens ce genre de valeurs : (dont surtout le 0.00 entre Vss1 et Vss2)


Ca prend forme, peu à peu! J'ai juste peur de ne jamais trouver de solution viable pour obtenir des valeurs de résistances du bon ordre de grandeur (le multimètre me donne des résistances entre 250k et 1M entre les pins...)

J'ai suivi de très loin ce sujet parce qu'il me paraissait flou.
Je n'ai pas vu clairement si la carte SD est ou non alimentée.

En attendant, je précise la manière dont généralement les multimètres fonctionnent.

En position ohmmètre, le multimètre force dans l'objet à mesurer un courant parfaitement calibré. Sous l'effet de ce courant forcé une tension se développe.
La détermination de la valeur de la résistance est faite par la partie voltmètre du multimètre. Un peu d'électronique numérique s'occupe de l'affichage.

Attention les indications de cette mesure ne sont justes que si l' objet à mesurer est une vraie résistance.
Si l'objet n'est pas une résistance pure la mesure dépendra de la valeur du courant injecté dans cet objet.
C'est ce qui se passe pour le test des diodes ou des transistors bipolaire.

Qu'il y a-t-il derrière ces pin ?
Tester une continuité ne peut être que résistif pur, c'est à dire purement
passif.

Ton schéma est bien fait, mais je pense que tu devrais établir le schéma fonctionnel détaillé de la mesure d'une seule pin.
Il serait plus simple à suivre et a comprendre et tu pourrais y faire figurer plus d'informations.
Exemple une sortie de microcontroleur n'est pas simple, les transistors de sortie ont une résistance résiduelle d'environ 30 ohms pour les avr, valeur différente pour le micro de la DUE.
Sans schéma fonctionnel clair on ne peut pas dire si cette résistance intervient et s'il faut la prendre en compte.
La DUE est aussi bien plus limitée en capacité de délivrer des mA par une sortie.
Pin high curent = 15 mA en mode source 9mA en mode sink
pin low current 3 mA en mode source et 6 mA en mode sink -> il y a peut-être une inversion dans le tableau que j'ai trouvé : à vérifier.
Quelle est la sortance en mA des sorties utilisées ?

Encore une fois je n'ai pas vraiment compris ce qui était mesuré, mais ceci me laisse perplexe :

Non la carte SD n'est pas alimentée. Le but est de faire des mesures passives de continuité entre les pins et le tracé de caractéristiques courant-tension de ceux-ci (mais ce n'est pas le sujet ici). Ni plus ni moins!

J'ignorais le fonctionnement des multimètres en mode ohmmètre. Par contre je suis conscient que cette résistance variera selon le courant injecté. C'est pour cela que j'aimerais que le courant que j'injecte reste toujours le même : pour pouvoir comparer les mesures ohmmiques entre une carte SD non détériorée et détériorée. Mais avec un pont diviseur irréalisable.

L'électronique interne des cartes SD dépend grandement du fabriquant, ce qu'on retrouve quasiment constamment, ce sont des diodes protectrices ESD en surtension positives/négatives, et un raccordement au microcontrôleur qui gère la NAND. Grosso modo. Par contre je ne sais évidemment pas précisément ce qu'il y a derrière ces pins et ce n'est pas le but puisque cela change selon les modèles de cartes SD (le but ici est de créer une méthode de vérification de l'intégrité de n'importe quelle carte SD avant de la mettre sous tension sur un ordinateur par exemple). Si la méthode révèle un court-circuit autre part qu'entre Vss1 et Vss2 -> on en conclut un endommagement et on réfléchit avant de la brancher. Si la méthode trace des caractéristiques courant tension étranges -> pareil.

C'était dans mes intentions de réaliser un schéma fonctionnel et effectivement cela clarifierait grandement la chose. J'essayerais de le partager sur ce fil dès que possible.

Je ne pense pas que cela soit très important car ces résistances de sortie du MCU seraient négligeables. Ici on cherche à avoir une détection des courts-circuits en premier lieu, et le luxe serait d'avoir accès à une valeur de résistance pas trop déconnante qui permette une information supplémentaire. Le tout est de déterminer la valeur "seuil" à partir de laquelle on considère qu'il y a un court-circuit.

ça c'est quelque chose que j'aimerais savoir, mais comme je commande en tension mon pont diviseur avec un pin digital en HIGH, j'imagine que le courant est modulé selon la résistance entre les pin présents ? Donc pour Vss1/Vss2 qui sont en court-circuit : I=3.3V/332Ω=10mA et pour les autres pins un courant encore moindre car on ajoute leur résistance dans la maille. Sachant que le courant que peut supporter une carte SD se situe entre 50 et 100mA, je suis ok au niveau de la protection de celle-ci.

Le sujet est assez documenté sur internet, mais en termes de tests de continuité je n'ai trouvé qu'un seul sujet sur le forum arduino.

C'est plus logique de faire le schéma fonctionnel avant le schéma électrique complet et normalisé.

Je n'ai pas posé la question pour avoir une réponse mais pour te faire réagir.

Si on ne sais pas pas ce qu'il y a derrière les 9 broches je vois mal comment on peut faire quelque chose de dont on est sur à 100 %. Parce qu'il est évident que l'électronique des cartes va réagir ..................presque pas, ..........ou un peu, ...........ou beaucoup.
Si la carte SD n'est pas alimentée le fait d'injecter un courant ou d'appliquer une tension sur une entrée pourra provoquer une alimentation parasite de la carte et que se passera-t-il ? Je dis je ne peux rien dire.

Rien n'est négligeable à priori.
Seule les indication dans la datasheet du microcontroleur et l'étude du schéma fonctionnel peut permettre d'espérer pouvoir conclure positivement ou négativement.

Tu sors du train train arduino, du confort arduino et tu ne vérifies pas !
Ton "obligation" est de te référer à la datasheet du micro de la DUE pas à la doc arduino et encore moins youtube.

Je n'imagine pas que tu puisses travailler saus la carte du pinout de la DUE.
Si tu n'en a pas tu fais une recherche "Due arduino pinout".
En réponse tu aura des cartes réalisées pas des bénévoles. Ces cartes regorgent de renseignements.
Nota : ces cartes de pinout existe aussi pour les cartes basées sur Espressif, Tensy, STM32, etc ........

Ce qu'il te faut ce n'est pas un projet exemple avec des continuité sur des fils isolés.
Tu ne maitrises pas la charge de tes fils, c'est une énorme différence.
Il te faut un projet basée sur des mesures d'impédance aléatoire.
Aléatoire parce que rien ne dit que d'un fabricant de carte SD à l'autre tu obtiendra le même résultat.

As-tu fait une manip basique :

  • Prendre des cartes en état de fonctionnement de différents fabricants et de différentes capacités.
  • Faire les mesures que tu envisages.
  • Faire un tableau avec comparaison des résultats

C'est ce que j'aurais fait (peut-être l'as-tu déjà fait mais je n'ai pas trouvé) avant d'écrire la moindre ligne de code.
Je suis un électronicien et avant d'automatiser une mesure j'en valide le principe avec des mesures manuelles poussées

Si tu as déjà fais cette validation c'est bon.
Si tu ne l'a pas encore faite, a mon humble avis il est urgent de le faire.

Tout d'abord merci pour le temps que vous apportez pour m'aider à développer ce projet. je vais essayer de répondre point par point :

A vrai dire j'ai réalisé une ébauche à main levée sur papier d'un schéma fonctionnel mais rien d'assez concret. Vous avez raison, j'aurais dû commencer par là.

C'est tout le principe du projet justement. Rien n'est sûr à 100% puisque l'on travaille avec de l'électronique "commune", mais totalement hors de son domaine de fonctionnement commun. L'esprit de mon projet, c'est déjà de concevoir un PCB shield Arduino qui me permettrait de réaliser une caractéristique courant-tension de chaque pin et une mesure ohmique des pins deux à deux. Ça s'arrête là ! L'analyse des résultats, il faut évidemment l'avoir en tête au moment de la conception du module d'automatisation, mais il faut aussi être conscient que c'est une toute autre partie réservée à l'utilisateur. L'usage typique de ces tests automatisés serait de réaliser dans un premier temps ces tests sur une carte SD neuve, de la même marque, même modèle, même capacité etc... On a alors des mesures "témoins" qui permettent de conclure ou non de l'intégrité de la carte SD potentiellement abimée.

Là je ne suis pas certain de comprendre où tu souhaites en venir. Je n'ai pas dis que je n'avais pas tenu compte de la documentation qui s'offrait à moi sur internet. Je ne serais d'ailleurs pas aussi avancé dans ce projet sans celle-ci. Je justifie simplement l'ouverture d'un nouveau sujet sur ce thème car je sais que parfois il existe des doublons qui agacent la modération ou même les helpers du forum. Je me réfère très fréquemment à la datasheet du micro. De toutes les façons, la doc fournie par arduino est assez faible (du moins la doc officielle) et se limite à un pinout. J'ai un pool de quelques pinout diagrams réalisées par la commu que j'utilise tout aussi fréquemment. Surtout que la Due est la première génération basée sur ARM Cortex et est donc une Arduino à part.

Exactement! Je n'ai aucune idée de la résistance que je m'apprête à mesurer. C'est ce qui complexifie le tout. Je pense avoir pris le problème dans l'autre sens que toi, peut-être à tort ça je ne sais pas : je me suis focalisé déjà sur avoir des mesures de résistance brutes. J'ai vérifié qu'il y avait une cohérence, à savoir, si Vss1 et Vss2 me donnaient bien une résistance proche de 0 et bingo c'était le cas. Déjà à partir de là, j'ai rempli le contrat car mon cahier des charges imposait simplement un test de continuité; la mesure ohmique "fiable" des pins est un bonus! C'est seulement après ce résultat que je me suis demandé si, pour les pins qui ne sont pas en court-circuit, je pouvais trouver un moyen d'obtenir une valeur en laquelle je peux avoir confiance. A savoir si je répète mon expérience 10 fois sur la carte SD, est-ce que j'obtiens le même résultat ? Et est-ce que j'obtiens le même résultat pour 2 cartes SD intactes du même modèle ?

Pour mon projet de caractéristiques courant-tension, j'ai bien sûr commencé par tracer les caractéristiques à la main (et on se rend compte de l'utilité d'automatiser tout ça vu le temps fou que ça prend!). Pareil pour les tests de continuité, j'ai commencé par des mesures de résistances faites à la main à l'aide de mon multimètre. J'ai fais ça sur une poignée de cartes SD et microSD que j'avais à ma disposition. Mais encore une fois : la prise de mesure se fait différemment avec le multimètre. Je ne maitrise pas le courant imposé par le générateur de courant de mon multimètre au moment de ses mesures ohmiques. Donc puis-je vraiment comparer mes valeurs automatisée aux valeurs manuelles ? La réponse simple est non, la compliquée c'est d'aller chercher l'information de courant injecté dans le cas automatisé et dans le cas manuel et comparer. Par ailleurs, si l'on voulait être parfaitement rigoureux, il faudrait même considérer l'utilisation d'un montage 4 fils pour les mesures de résistances très faibles (i.e qqs ohms). Sauf que là, on perd énormément en rapport coût/bénéfice... J'essaye de trouver le juste milieu dans ce projet.

Si j'ai bien compris (les zones de 20 lignes écrites au kilomètre sans sauts de ligne sont très difficiles à lire pour des yeux un peu vieux)
tu :

  • relies toutes les pins de la cartes SD a une sortie digitale de la DUE.
  • relies toutes les pins de la carte SD à une entrée analogique.
  • tu n'actives qu'une seule sortie numérique à la fois
  • tu mesures la rension présente sur toutes les autres pins.

Je fais une première remarque : la doc Kinston (micro SD) que j'ai trouvé indique 8 pins et non pas 9.
Il se peut que la neuvième soit sur certains formats une pin marquée NC ou DNC.

Si elle est marquée DNC = do not connect, il est interdit d'y raccorder quelque chose. C'est réservé au fabricant du produit.

Si elle est marquée NC= not connected, en théorie rien n'est connecté dessus et elle peut servir pour relayer d'autres pistes.

Mais entre la théorie et la pratique il y a parfois des différences.
Une NC est parfois en réalité une DNC, donc méfiance surtout avec les produits chinois.

Dans ta méthode de mesure :

  • quand tu connectes une tension sur une pin, tu alimentes la carte par les diodes de protection anti ESD.
    C'est une alimentation parasite, rien n'est défini dans le fonctionnement.

  • Normalement au démarage du produit le concepteur s'arrange pour que toutes les pins soient en mode entrée. C'est parfaitement vrai pour les micros , est-ce pareil pour les cartes SD ? Je n'ai pas la réponse et il serait bon de s'en assurer.

    Si la pin qui reçoit un niveau "HIGH" se met du fait de l'alimentation parasite en mode sortie à LOW tu peux griller le transistor de sortie sauf si tu as prévu une limitation de courant qui protége également la sortie de la DUE, mais je n'ai pas vu où.

  • Pour calculer des ohms il faut connaître tension et courant, je n'ai pas compris comment tu fais.

Au stade actuel de ce que j'ai compris, ta méthode me donne plus d'interogations que de certitudes.
Si je peux me permettre de te donner un conseil, a ta place, je contacterai le support technique Kingston ou/et autres fabricants.
Tu leur exposes ton besoin.
Tu leur demandes si ta solution est viable et tu leur demande s'il n'en ont pas d'autres.

1 Like

ça n'était pas clair je m'excuse pour la confusion mais ça c'était ma première idée. Finalement, comme détaillé plus tôt dans ce fil, je suis parti sur l'idée de faire des résistances ohmiques entre chaque pin via un pont diviseur de tension et déterminer une valeur seuil à partir de laquelle je considère qu'il y a un court-circuit.
Tu peux voir le schéma électrique ainsi que le code Arduino sur le post #9. Les posts suivants, c'est moi qui parle tout seul parce que je me rend compte peu à peu d'erreurs/améliorations sur mon projet.
De plus, le circuit complet est bien plus complexe puisqu'il permet aussi la réalisation de caractéristiques courant tension de chaque pin.

Les microSD ont 8 pins, mais les SD en ont 9 car elles ont deux pins "Vss" (Vss1 et Vss2) tandis que les microSD n'ont qu'un seul Vss. Sur les adaptateurs microSD vers SD, les pins sont tout simplement raccordés uns à uns et seul le pin Vss2 de la carte SD est raccordé au Vss de la microSD.
Ce que je dis là, j'en suis sûr car j'ai pu avoir accès à certaines solutions me permettant de vérifier ce que j'avance. Donc aucun "NC" ou "DNC" : pas de soucis à ce niveau.

Les fabricants sont très peu bavards sur leurs produits surtout lorsque ça dépasse l'utilisation standard. On m'a déconseillé d'explorer cette piste là, surtout que chaque modèle SD est différent et la réponse qu'ils m'apporteraient (si tant est qu'ils m'en apporteraient) serait donc dépendante du modèle.

Par contre je retiens cette idée. Effectivement chez les constructeurs ils doivent avoir des moyens de test qu'ils utilisent en interne pour valider ou non un prototype de carte SD. Mais le problème du privé, c'est qu'ils sont pas très bavards sur leurs outils développés en interne... J'y connais rien mais je suppose que l'industrie électronique et des mémoires est suffisamment sujette à l'espionnage industriel mais je ne perd rien de tenter tu as raison!

La micro SD n'a que 8 broches
image

mais la SD en a 9

image

D'ailleurs, au passage, je voudrais faire la promo de pinouts.org qui publie "The Pinouts Book"

The Pinouts Book is a free digital book created for designers and engineers as a quick reference for remembering the different pinout functions in your electronics projects.
The book covers 130 commonly used components, such as connectors, single board computers, dev boards, memory cards, microcontroller chips, and more.

1 Like

Excellant.
Merci.