Version ou configuration d'encodage sur PCB

10

Je dois encoder des informations sur la version ou la configuration sur la carte / électriquement, afin que le firmware puisse détecter la disposition de la carte utilisée.

Quelles options sont possibles et quels sont leurs avantages / inconvénients?

Henrik Hansen
la source
1
Il y a aussi ce Q depuis un certain temps, les réponses sont similaires à celles déjà données (ce qui est bien!): Electronics.stackexchange.com/questions/41757/…
awjlogan

Réponses:

14

Du haut de ma tête, deux solutions faciles me viennent à l'esprit.

  1. Ayez n lignes attachées au GPIO de votre microcontrôleur. Attachez-les haut ou bas en fonction de la version de votre planche. Cela vous donnerait options de configuration de carte n . Cela utiliserait n broches sur votre microcontrôleur. La consommation de courant statique serait négligeable.2n
  2. Avoir une entrée vers l'ADC du microcontrôleur et utiliser un diviseur de tension avec des valeurs différentes selon la configuration de la carte. Cela n'utiliserait qu'une seule broche de microcontrôleur. Cela présente l'inconvénient qu'il y aura une consommation de courant statique à travers le diviseur. Il serait également sujet à des erreurs de nomenclature, tandis que la première suggestion est câblée à la carte.

Ces deux suggestions ont une faiblesse dans la mesure où l'utilisateur final pourrait facilement les modifier, par exemple pour ouvrir des fonctionnalités "verrouillées". Ce n'est peut-être pas une préoccupation pour vous, mais quelque chose à garder à l'esprit.

awjlogan
la source
1
Il existe également une combinaison de [1] et [2]. Vous pouvez utiliser une broche de microcontrôleur pour ADC, mais utilisez le même composant de valeur connecté en parallèle pour former un diviseur de tension. Ainsi, par exemple, vous pouvez avoir quatre résistances 10k formant 10k / float (pull to vcc), float / 10k (pull to gnd), 10k / 10k (vcc / 2), 5k / 10k (2/3 of vcc), 10k / 5k (1/3 de vcc). Donc en bref: une ligne dans la nomenclature, juste une quantité différente et une entrée ADC requise. Cela aide également visuellement.
Socrate
2
Vous pouvez vous débarrasser de la consommation de courant statique de la solution ADC si vous pouvez épargner une deuxième broche: au lieu d'un diviseur de tension entre VCC et GND, remplacez VCC ou GND par la deuxième broche - vous n'avez besoin de lire la configuration de la carte qu'une seule fois , au début du programme, placez la broche haute / basse comme requis pour activer le diviseur de tension, effectuez la mesure ADC, puis basculez la broche de sorte que les deux extrémités du diviseur de tension soient au même potentiel et sans courant.
Aleksi Torhamo
1
La version GPIO est également sujette aux erreurs de nomenclature, car elle est généralement configurée avec des liaisons zéro ohm. Vous pouvez le faire dans le schéma et la mise en page, mais qui est plus coûteux (temps de mise en page coûts ).
Graham
1
Concernant l'ADC, c'est ce que nous avons utilisé sur les produits où je travaille actuellement. Vous devez cependant faire attention aux tolérances des résistances. Si vos deux résistances ont une tolérance de 1%, la tension peut aller jusqu'à 2%, donc tout au plus vous obtenez 50 étapes que vous pouvez résoudre. En pratique, il est plus sûr de réduire de moitié cela. Donc, si vous avez 1% de résistances et une plage de 5 V sur votre ADC, vous voulez que les versions soient signalées par étapes de 0,2 V.
Graham
9

J'ai utilisé un registre à décalage avec des broches attachées haut et bas pour coder la révision de la carte avant maintenant, si vous utilisez déjà SPI pour quelque chose sur votre carte, il est trivial de le lire.

Si vous devez être en mesure de modifier l'ID au moment de l'exécution, l'utilisation de cavaliers plutôt que de lier les entrées avec des traces serait une bonne idée.

Colin
la source
Je cherchais des CI de variante de numéro de série en silicium non uniques, mais c'est une alternative intelligente. Surtout si vous le combinez avec un extenseur d'E / S monofil.
Jeroen3
7

Quelques options auxquelles je peux penser: -

Liens de résistance SMD PADS / O OHM. Utilisez un système binaire pour la configuration matérielle afin de réduire le nombre de broches pour votre processeur.

Cavaliers. La carte aurait des broches de connecteur 2xN ajoutant un cavalier à la broche droite vous permettant de sélectionner votre configuration. Une erreur est plus facile à résoudre. Cela peut être un peu coûteux et utiliser plus d'espace sur la carte en fonction du cavalier.

Si vous avez une EEPROM sur la carte, il vous sera peut-être possible d'incorporer la configuration dans la mémoire.

Est-il possible de changer le firmware lui-même en utilisant un #define ou similaire? Ensuite, vous n'avez pas besoin d'espace sur la carte et de broches supplémentaires pour la détection de version.

R.Joshi
la source
1

Les EEPROM à un fil sont une bonne solution car elles ne nécessitent qu'un seul GPIO mais peuvent stocker une grande quantité d'informations de configuration. Ils permettent également au microcontrôleur d'écrire ces informations pendant le test de la carte (par exemple, les données d'étalonnage). Beaucoup ont une broche de protection en écriture ou un bit programmable unique pour empêcher d'autres changements.

D'autres avantages incluent des fonctionnalités utiles telles que des numéros de série uniques garantis.

Cette option est utilisée dans de nombreux systèmes, tels que les sondes d'oscilloscope et les batteries, car elle ne nécessite qu'une seule ligne de données. L'EEPROM peut même être alimentée à partir de la ligne de données elle-même.

Le principal inconvénient est le coût. Le coût n'est pas élevé, mais sur les produits fabriqués en série, quelques centimes peuvent être importants.

Un exemple d'une telle EEPROM est le DS2431, qui stocke 1 Ko.

utilisateur
la source