¿Modo SPI multi maestro? ¿O alguna forma inteligente de cambiar solo el tiempo entre dos maestros?

1

Tengo una pantalla LCD que funciona con un micro muy potente, con GPU y todo tipo de cosas. Sin embargo, resulta que tardará más de 5 segundos en arrancar el núcleo. Desde la perspectiva de la experiencia del usuario, 5 segundos para ver cualquier imagen de inicio / animación en la pantalla después de encenderlo es inaceptable.

Estaba pensando en incluir un micro muy barato por separado que pueda contener la línea maestra durante los primeros segundos y proporcionar la imagen de arranque. Luego entregaría el bus SPI al micro principal.

Por supuesto, este no es el único caso de uso del micro más pequeño. También lo usaría para todo el control de retroiluminación. El micro más grande podría entrar en un estado de reposo y me gustaría que el micro más pequeño aún mantenga la pantalla encendida. (Así que, básicamente, el micro principal simplemente le dirá al micro pequeño qué brillo para mantener las cosas y un brillo predeterminado en caso de que el micro principal duerma).

¿Hay alguna manera de mantener el micro pequeño como maestro durante los primeros 5 segundos y luego soltar el micro principal durante el resto del tiempo (y como recompensa, devolverlo al micro pequeño cuando el micro principal va a dormir)?

Gracias!

    
pregunta Hassan Nasir

4 respuestas

1

El principal problema aquí es probablemente no elegir un MUX adecuado: la mayoría de los conmutadores analógicos probablemente funcionarán. Pero más bien cómo sincronizar "GPU" y "MCU". Debido a que MCU debería estar hablando la mayor parte del tiempo, excepto cuando la GPU toma el control, entonces debería estar tranquilo.

La GPU no puede simplemente cortar los cables SPI cuando le plazca, porque entonces dañará una transferencia SPI en curso. Esto puede tener efectos secundarios muy graves si se interrumpe la MCU al escribir comandos en la pantalla.

Puede resolver esto haciendo que los dos dispositivos escuchen entre sí / líneas SS y utilicen eso como un medio de "arbitraje".

GPU:

  • Cuando la línea de salida / SS de la MCU se baja, permanezca en silencio durante la transmisión en curso.
  • Cuando / SS de MCU se pone alto, tome el bus iniciando una transferencia SPI y, por lo tanto, extraiga / SS de GPU bajo.

MCU:

  • Antes de iniciar una transmisión SPI, verifique la línea / SS desde la GPU.
  • Si la línea / SS de la GPU es alta, podemos enviarla.
  • Si la línea / SS de la GPU es baja, pase al modo pasivo / reposo durante un período de tiempo determinado, antes de volver a verificar.

MUX:

  • Cablee para que las dos líneas diferentes / SS se usen como selección de canal, determinando la fuente de MOSI y CLK. (MISO no debería ser necesario para la mayoría de las pantallas). Ya sea encontrando un interruptor adecuado o invirtiendo la señal de uno de los maestros a través de BJT o similar.
  • Quizás pueda hacer recesiva la MCU / SS conectándola a través de una resistencia de extracción de 10k, de modo que la GPU / SS pueda anularla sin tener dos salidas en competencia. Supongo que hay muchas maneras de resolver esto.
respondido por el Lundin
1

Probablemente sería más sencillo elegir un "pequeño micro" que tenga dos interfaces SPI. Utilice uno como maestro para controlar la pantalla y el otro como esclavo adjunto al "micro grande".

Luego, el firmware de su pequeña micro puede arbitrar entre pasar las transacciones de la micro grande a la pantalla y enviar sus propios comandos.

Tenga en cuenta que enviar datos a la pantalla de esta manera es sencillo. Pero si el micro grande necesita leer algo de la pantalla, se requiere un poco más de reflexión.

    
respondido por el Dave Tweed
0

La forma directa de implementar lo que desea es insertar algunos circuitos entre los procesadores y la pantalla. Este circuito puede tomar dos formas:

  1. Use un chip multiplexor de cuatro bits de ancho que pueda ejecutar las cuatro líneas de control SPI (SPI_CS, SPI_CLK, MISO, MOSI) para cada uno de los dos maestros en la interfaz de pantalla. El control de selección para el MUX provendría de su MCU de bajo costo.
  2. Use dos búferes separados de estado triple de 4 bits separados para seleccionar una interfaz maestra u otra para la interfaz SPI en la pantalla. Normalmente, la misma parte se usaría para ambos maestros y, por lo tanto, se necesitarían dos líneas de control de la MCU de bajo costo para controlar el estado triple de los dos búferes (u otra puerta del inversor agregada). Alternativamente, con una selección cuidadosa de las partes, puede encontrar dos chips de búfer triples, uno con una habilitación alta activa y el otro con una habilitación baja activa que se puede conectar y controlar desde un pin de la MCU de bajo costo.

Este esquema requiere que tenga cuidado cuando en realidad cambia la pantalla de un maestro a otro. Desearía evitar el cambio mientras haya una transacción activa de SPI en curso en la interfaz. Algunos dispositivos podrían confundirse cuando esto sucede. Otros dispositivos SPI se recuperarían simplemente llevando la señal SPI_CS al nivel inactivo durante un período de tiempo.

    
respondido por el Michael Karas
0

El interruptor analógico Quad SPDT también funcionaría como enlace Ese es un nivel de 3.3V, también hay interruptores de nivel de 5V.

    
respondido por el CrossRoads

Lea otras preguntas en las etiquetas