Interfaz Periférica Serial - pregunta esclavo múltiple

0

Al implementar la comunicación SPI entre un maestro y varios esclavos, hay básicamente dos topologías para elegir: reenviar los mismos datos a cada esclavo o sincronizar los datos a través de todos los esclavos en el modo de cadena.

Mi pregunta es la siguiente: ¿supongo que el maestro debe cambiar continuamente el contenido de un solo registro a 16 microcontroladores esclavos idénticos a la velocidad más alta posible, de modo que no pierda tiempo reenviando los mismos datos o sincronizando bits a través de todos los esclavos?

¿Sería posible unir todos los SS (así que seleccionar todos los esclavos al mismo tiempo) y las líneas MOSI juntas e ignorar (o desconectar) todas las líneas MISO si no está interesado en los datos que regresan de los controladores esclavos?

¿Hay alguna manera de lograr esto?

    
pregunta Peterstevens

2 respuestas

4
Al implementar la comunicación SPI entre un maestro y varios esclavos, hay básicamente dos topologías para elegir: reenviar los mismos datos a cada esclavo o sincronizar los datos a través de todos los esclavos en modo de cadena.

No tengo idea de qué rincón oscuro de Internet obtuviste esto. La forma estándar, más común y obvia de manejar múltiples esclavos SPI es que cada uno tenga su propia línea de selección de esclavos. Eso es precisamente para lo que son.

Conecta las líneas MOSI, SCK y MISO todas juntas, luego cada esclavo obtiene su propia línea de selección de esclavos. El maestro afirma que una de las selecciones de esclavos a la vez, y solo ese esclavo puede conducir la línea MISO.

La misma información para todos los esclavos

En el caso especial de enviar los mismos datos a todos los esclavos, puede vincular todos los conjuntos de esclavos o hacerlos valer todos al mismo tiempo.

Sin embargo, necesitas manejar MISO de manera diferente. Incluso si se supone que todos los esclavos son idénticos, suceden cosas y podría haber un conflicto. Si nunca se preocupa por los datos devueltos de cualquiera de los esclavos, entonces puede dejar las líneas MISO individuales desconectadas. Ponga un menú desplegable en la entrada MISO del maestro para que no esté flotando.

Otra opción es poner despliegues en todas las líneas MISO, luego ejecutarlas todas en una puerta OR amplia, luego la salida de eso en la entrada MISO del maestro. Eso permite una comunicación bidireccional normal con esclavos individuales si solo se afirma una selección de esclavos, y la salida de 1 a N solo si se realizan múltiples selecciones de esclavos. En ese caso, simplemente ignora los datos recibidos en el maestro.

    
respondido por el Olin Lathrop
1

Lógicamente, sí.

Físicamente es posible que desee prestar atención ya que declara que desea conducirlos "a la velocidad más alta posible". Ahora hay dos temas que vienen a mi mente:

  • Las altas velocidades de reloj generalmente significan bordes rápidos que, a su vez, requieren prestar atención al eco, a los timbres, ... todos los problemas agradables que se presentan una vez que se adentra en el diseño de alta velocidad. Por lo tanto, desea que sus trazas de señal estén alrededor de los 50 ohmios para que terminen correctamente (¿su microcontrolador proporciona algún tipo de terminación de señal en sus pines de entrada?). Ahora, a menos que sus esclavos estén ubicados muy cerca uno del otro y la distancia de la señal sea muy baja, puede que se salga con la suya, pero no lo recomendaría. Es posible que veas todo tipo de efectos que probablemente no quieras ver.
  • Lo más probable es que su maestro solo tenga una capacidad de unidad de salida limitada (fan-out). Es posible que desee considerar el uso de un búfer de bus para disminuir la carga que realmente le impone (tanto capacitancia como resistiva).
respondido por el Tom L.

Lea otras preguntas en las etiquetas