Concevoir mon propre bus

8

Cette question fait suite à ma précédente: Alternatives au SPI en raison de l'EMI . Je joue avec l'idée de concevoir mon propre bus de communication. Je serais reconnaissant si quelqu'un pouvait jeter un œil sur ma conception préliminaire et me dire où je suis fou ...

J'utilise actuellement 2 MHz SPI transporté sur des fils de 10 cm de long à sept ADC sur des PCB séparés (CS partagé, mais chaque ADC a sa propre ligne MISO. Le problème est qu'il n'y a pas beaucoup d'ADC avec un bus différentiel, donc je me demande s'il est possible de concevoir mon propre bus. Au moins la couche physique, et peut-être aussi le protocole.

Objectifs de conception du nouveau bus:

  • utiliser des composants physiquement petits
  • faible EMI
  • pas plus de 4 fils de données (deux paires)
  • bande passante de> 300 kbps à partir de chaque ADC. (> 2,1 Mbps au total)

Avant de m'écrire comme fou de penser à cela, considérez que ce n'est peut-être pas si difficile à faire sur un PSoC5 . Sur cette puce, je peux certainement concevoir mon propre protocole dans Verilog et le faire implémenter dans le matériel. Et dans une certaine mesure, je pourrai peut-être également inclure les composants de la couche physique. De plus, je peux peut-être avoir sept de ces choses en même temps, toutes fonctionnant en parallèle dans le maître, une pour chaque esclave afin que je puisse obtenir une bonne bande passante globale.

Et voici mon idée préliminaire:

entrez la description de l'image ici

Il serait basé sur I2C, légèrement modifié pour l'aider à se connecter aux composants de la couche physique. Les lignes SDA et SCL sont maintenant des paires différentielles. La paire SDA a la propriété OR-ing. Ceci est réalisé en utilisant une broche qui ne peut conduire qu'en haut et une qui ne peut conduire qu'en bas. La paire SCL est entraînée exclusivement par le maître. Le débit de données serait augmenté à au moins 1 Mbps.

Le maître serait un PSoC5 avec 7 modules maîtres. Les esclaves seraient également des PSoC5, avec un module esclave, et utiliseraient l'ADC intégré.

Pensées:

  • Je ne sais pas trop quelle est la meilleure façon de mettre en œuvre les résistances de rappel et les composants de limitation de vitesse de balayage.
  • Je suppose que je n'ai pas besoin de résiliation. Si je limite la vitesse de balayage à environ 80 ns, cela devrait être bon pour un câble de 10 cm de long.
  • Ce n'est évidemment pas un émetteur-récepteur différentiel approprié. Suis-je en train de perdre mon temps à essayer d'en fabriquer un avec des portes?
  • Ces portes non provoquent un certain biais. Est-ce que cela risque d'être un problème?
Rocketmagnet
la source
Peut-être que LVDS vaut le coup d'œil si vous voulez une signalisation différentielle?
Saad
Je ne pense pas avoir vu de périphériques esclaves de style I2C avec des entrées et sorties SDA distinctes. De plus, si vous utilisez un esclave I2C basé sur un microprocesseur, vous devez autoriser les esclaves à maintenir le SCK bas de manière à ce que le maître puisse le voir (le maître retiendra ensuite l'envoi du bit suivant jusqu'à ce que l'esclave libère SCK). Sinon, si le maître envoie des données sans attendre que les esclaves soient prêts, les choses échoueront gravement. Alternativement, vous pouvez utiliser SPI et n'utiliser que certaines valeurs d'octets pour envoyer des données (de sorte que chaque octet de données "réelles" serait transmis sur deux octets). Si vous faites ça ...
supercat
... puisque la plupart des implémentations SPI suppriment des multiples d'octets entiers en cas de dépassement / dépassement de données, vous pouvez demander au maître de détecter quand l'esclave n'a pas pu suivre et retransmettre des octets individuels jusqu'à ce que l'esclave soit en mesure de les reconnaître.
supercat

Réponses:

4

Eh bien, si vous allez avoir tout autour de la PSoC5, je lisais récemment sur IEEE 1355 . La variante de liaison de signal DS-SE-02 peut faire ce que vous voulez. Il nécessite 4 lignes de signal: une ligne de données et une ligne stroboscopique dans chaque direction. Le seul matériel dédié que je peux trouver qui implémente 1355 est un équipement Spacewire durci aux radiations , mais cette présentation IEEE prétend qu'il peut être implémenté sur un FPGA avec 1/3 des portes d'un UART et fonctionnant à des vitesses 100 fois plus rapides qu'un UART .

Une copie publique de la norme complète est disponible avec l'aimable autorisation du CERN si vous êtes prêt à lire un peu. Je n'ai pas eu la chance de m'asseoir avec tout ça, donc je ne peux pas parler pour ses performances EMI. En regardant dans la section DS-SE, il semble que vous devez contrôler l'impédance dans la ligne de transmission et terminer à la réception.

Joe Baker
la source
Merci pour cette idée. Ça semble intéressant. Tout ce qui s'appelle Spacewire me convient. Je vais y jeter un œil maintenant ...
Rocketmagnet
4

Avez-vous pensé à utiliser RS485?

Il existe déjà de nombreux composants conçus pour fonctionner sur les bus RS485.

Bruno Ferreira
la source
Oui j'y ai pensé. C'est certainement une option. Je ne pense pas qu'ils effectuent une opération OR, mais le maître peut transmettre de manière asynchrone sur une paire, tandis que les esclaves se relaient sur l'autre paire. Le seul problème était que je ne pouvais pas trouver de très petits émetteurs-récepteurs. Ai-je mentionné que je manque désespérément d'espace.
Rocketmagnet
2
SOIC 8 est-il trop grand pour vos besoins? J'ai récemment envisagé d'utiliser un Intersil ISL83485IBZ ou un émetteur-récepteur Texas Instruments SN65HVD11D sur l'un de mes projets. Les deux ont des packages SOIC 8.
Bruno Ferreira
@Bruno - SOIC-8, vous plaisantez? :-) Le PCB mesure 11 mm x 13 mm .
stevenvh
@stevenvh N'a pas remarqué les dimensions de l'autre question. Je suppose qu'un package MSOP ne résout pas votre problème. Si c'est le cas, vous pourriez peut-être utiliser ADM1485
Bruno Ferreira