5 votos

Control maestro SPI dual

Estoy buscando una interfaz SPI maestra dual, necesita funcionar a 20MHz lo que significa push-pull para mí. Mi principal preocupación es la corriente de salida de los microprocesadores, fácilmente podría exceder la corriente máxima absoluta si un ingeniero de software decide poner una salida en alto y la otra en bajo en el microprocesador si están configuradas como push-pull.

La salida abierta no va a funcionar debido al requisito de 20MHz y la cantidad de capacitancia que tengo en mis GPIOs. Entonces mi pregunta es ¿qué circuito debo usar para seleccionar entre dos maestros duales?

esquemático

simular este circuito – Esquemático creado utilizando CircuitLab

5voto

TonyM Puntos 41

Un multiplexor digital unidireccional de 4 vías haría el truco. Puedes usar un 74244 para realizar esta función (74HCT244 para lógica de 5 V, 74LVC244 para 3.3 V). Contiene dos buffers tristate de 4 bits (ver abajo).

74244

(Lo siento, no puedo dibujar un esquema en este momento.)

Cada maestro puede tener un canal de 4 bits. Las señales SCK, MOSI y /CS de cada maestro controlan las entradas de los buffers 1A o 2A con MISO tomando una salida del buffer 1Y o 2Y. Los otros lados de los buffers del canal están conectados a tu esclavo SPI. No olvides poner un pull-up de 10 K en el /CS del esclavo. El SCK del esclavo también necesita un pull-up o pull-down de 10 K para llevarlo a su estado inactivo, dependiendo del modo SPI que se use.

Conecta /1OE a una señal de selección y /2OE a la inversa de la señal de selección. Entonces puedes cambiar entre los dos maestros usando la selección.

1voto

krum85 Puntos 306

El dispositivo para colocar en medio se llama árbitro. El árbitro puede funcionar utilizando varios algoritmos:

  • quien llega primero (maestro #1 o maestro #2)
  • round robin
  • configuración de prioridad (por ejemplo, #1 tiene mayor prioridad)
  • cualquier otro adecuado a sus necesidades.

Debe considerar la prioridad de la solicitud, asegurarse de que ambos maestros sean atendidos a tiempo, y que no haya conflictos entre los maestros y que el software/firmware de ambos esté al tanto de los ciclos de espera.

Editar: Lo estaba implementando en FPGA, y es posible instanciar hardware lógicamente separado allí. En su caso puede conectar pines solo en caso de que garantice que solo un conjunto estará activo a la vez, y otro conjunto estará en alta impedancia. El diseño también puede requerir pull-ups/downs (no debería ser un problema) para asegurar que no haya alta impedancia si ningún dispositivo está activo. Sin embargo, si uno de los maestros se bloquea, debe haber una forma para que otro maestro lo detecte y pueda reiniciar el maestro bloqueado. Esta no es una tarea trivial. Por ejemplo, ambos maestros deberían poder escribir en los cables de salida, y también leerlos para ver qué está sucediendo allí, y tener implementados watchdogs/timers que indiquen la condición de bloqueo. Además, puede haber alguna interconexión separada entre los maestros que indique su estado en relación con su operación de bus SPI.

Recomiendo considerar otra pieza de hardware que lo haga. Será un costo e incluso probablemente un riesgo en términos de confiabilidad (más componentes -> menos confiabilidad), pero si todos los dispositivos son configurables, podrá actualizar su firmware para resolver errores lógicos (y no podrá resolver errores "físicos" ya que requerirá cambios de hardware en el campo que son mucho más costosos).

1voto

DmitrySandalov Puntos 129

Reconsideraría si este es realmente un problema: ¿cuánto afecta la velocidad de la señal al agregar una resistencia en serie en cada extremo (por lo general, en los MISO de los maestros y en el MOSI del esclavo) si el pin de entrada está correctamente en estado de alta impedancia?

En caso de una falla de arbitraje, una resistencia de 100Ω podría ser más que suficiente para limitar la corriente a niveles "saludables".

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X