Diseñando mi propio autobús


8

Esta pregunta está más allá de mi pregunta anterior: Alternativas a SPI debido a EMI . Estoy jugando con la idea de diseñar mi propio bus de comunicación. Estaría agradecido si alguien pudiera echar un vistazo a mi diseño preliminar y decirme dónde estoy loco ...

Actualmente estoy usando SPI de 2MHz transportado a través de cables de 10 cm de largo a siete ADC en PCB separados (CS compartido, pero cada ADC tiene su propia línea MISO. Es un poco golpeado), pero me gustaría reemplazarlo con algo diferencial para reducir EMI. El problema es que no hay muchos ADC con un bus diferencial, por lo que me pregunto si es posible diseñar mi propio bus. Al menos la capa física, y posiblemente también el protocolo.

Objetivos de diseño del nuevo autobús:

  • usar componentes físicamente pequeños
  • bajo EMI
  • no más de 4 cables de datos (dos pares)
  • ancho de banda de> 300 kbps de cada ADC. (> 2.1mbps en total)

Antes de que me descartes como loco por pensar en esto, ten en cuenta que puede que no sea tan difícil hacerlo en un PSoC5 . En ese chip ciertamente puedo diseñar mi propio protocolo en Verilog e implementarlo en hardware. Y hasta cierto punto, también puedo incluir los componentes de la capa física. Además, es posible que pueda tener siete de estas cosas al mismo tiempo, todas en paralelo en el maestro, una para cada esclavo, de modo que pueda obtener un buen ancho de banda general.

Y aquí está mi idea preliminar:

ingrese la descripción de la imagen aquí

Estaría basado en I2C, ligeramente modificado para ayudarlo a conectarse a los componentes de la capa física. Las líneas SDA y SCL ahora son pares diferenciales. El par SDA tiene la propiedad OR-ing. Esto se logra usando un pin que solo puede conducir alto y uno que solo puede conducir bajo. El par SCL es conducido exclusivamente por el maestro. La velocidad de datos se elevaría a al menos 1mbps.

El maestro sería un PSoC5 con 7 módulos maestros. Los esclavos también serían PSoC5, con un módulo esclavo, y usarían el ADC integral.

Pensamientos:

  • No estoy muy seguro de cuál es la mejor manera de implementar las resistencias pull up y los componentes que limitan la velocidad de rotación.
  • Asumo que no necesito ninguna terminación. Si limito la velocidad de rotación a aproximadamente 80 ns, debería ser bueno para un cable de 10 cm de largo.
  • Obviamente, ese no es un transceptor diferencial adecuado. ¿Estoy perdiendo el tiempo tratando de hacer uno con puertas?
  • Esas no puertas causan cierta inclinación. ¿Es probable que esto sea un problema?

¿Tal vez valga la pena echar un vistazo a LVDS si desea señalización diferencial?
Saad

No creo haber visto ningún dispositivo esclavo de estilo I2C con entradas y salidas SDA separadas. Además, si está utilizando un esclavo I2C basado en microprocesador, debe permitir que los esclavos mantengan el SCK bajo de tal manera que el maestro pueda verlo (el maestro se retrasará al enviar el siguiente bit hasta que el esclavo libera SCK). De lo contrario, si el maestro envía datos sin esperar a que los esclavos estén listos, las cosas fallarán gravemente. Alternativamente, puede usar SPI, y solo usar ciertos valores de bytes para enviar datos (por lo que cada byte de datos "reales" se transmitirá como dos bytes). Si haces eso ...
supercat

... dado que la mayoría de las implementaciones de SPI eliminarán múltiplos de bytes completos en caso de desbordamiento / descuido de datos, puede hacer que el maestro detecte cuándo el esclavo no pudo mantener el ritmo y retransmitir bytes individuales hasta que el esclavo pueda reconocerlos.
supercat

Respuestas:


4

Bueno, si vas a tener PSoC5 por todas partes, hace poco estuve leyendo sobre IEEE 1355 . La variante de enlace de señal DS-SE-02 puede hacer lo que desee. Requiere 4 líneas de señal: una línea de datos y una línea estroboscópica en cada dirección. El único hardware dedicado que puedo encontrar que implementa 1355 es el equipo Spacewire endurecido por rad , pero esta presentación de IEEE afirma que puede implementarse en un FPGA con 1/3 de las puertas de un UART y operar a velocidades 100 veces más rápidas que un UART .

Una copia pública del estándar completo está disponible por cortesía del CERN si está dispuesto a leer un poco. No he tenido la oportunidad de sentarme con todo el asunto, así que no puedo hablar por su rendimiento EMI. Mirando hacia la sección DS-SE, parece que tiene que controlar la impedancia en la línea de transmisión y terminar en el extremo receptor.


Gracias por esta idea Suena interesante. Cualquier cosa llamada Spacewire está bien para mí. Lo echaré un vistazo ahora ...
Rocketmagnet

4

¿Has considerado usar RS485?

Ya hay muchos componentes diseñados para funcionar en autobuses RS485.


Sí, lo he pensado. Ciertamente es una opción. No creo que hagan OR, pero el maestro podría transmitir de forma asíncrona en un par, mientras que los esclavos se turnan en el otro par. El único problema fue que no pude encontrar transceptores realmente pequeños. ¿Mencioné que estoy desesperadamente apretado en el espacio?
Rocketmagnet

2
¿SOIC 8 es demasiado grande para sus requisitos? Recientemente estuve considerando usar un transceptor Intersil ISL83485IBZ o un transceptor SN65HVD11D de Texas Instruments en uno de mis proyectos. Ambos tienen paquetes SOIC 8.
Bruno Ferreira

@Bruno - SOIC-8, ¿estás bromeando? :-) El PCB es de 11 mm x 13 mm .
stevenvh

@stevenvh No noté las dimensiones en la otra pregunta. Supongo que un paquete MSOP no resuelve su problema. Si es así, tal vez podría usar ADM1485
Bruno Ferreira el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.