Autor Tema: Distribución bus SPI entre Raspberry y varios nodos esclavos MCP23S17  (Leído 40 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado genisuvi

  • PIC12
  • **
  • Mensajes: 62
Bunos días, la verdad es que  no tengo muy claro en qué tema dejar esta duda; pero como es un proyecto basado en Raspberry, supongo que puedo dejarlo aquí.

Tenemos pensado usar una Raspberry3 o Raspberry4 para comunicarnos vía sPI o I2C con unos chips expansores de GPIO16 con la idea de procesar un gran número de GPIOs: escribir estado alto o bajo en algunas IO y leer de otras. Existen dos alternativas de puerto de comunicación: unos expansores se comunican por I2C y otros por SPI. Voy a valorar qué tal resultarían ambas opciones en el laboratorio.

En el caso de SPI:

* Modelo de chip expansor que se empleará: https://www.microchip.com/wwwproducts/en/MCP23S17#additional-features

Por lo que entiendo este tipo de dispositivo comparte las señales SPI procedentes del máster (que seria la Rasp) incluído la señal CS. Estos chips tienen un mecanismo de direccionamiento por hw que permite a los nodos esclavos ignorar el mensaje si la dirección no coincide. Eso le permite usar un mismo CS para esos nodos. Eso sí, puede direccionar hasta 8 chips de estos. Más no.
En total podría tener 8 nodos SPI connectados al mismo bus SPI de las Rasp. Si un expansor son 16 GPIO, con 8 obtienes 128.
Ahora pongamos que además quiero escalarlo y obtener 128xn a modo de tener una matriz de chips de estos tal que tengo n arrays(filas) de 8 chips. Sólo necesitaría multiplexar la señal de CS de n canales y listo. De este modo sólo puedo acceder a un único módulo cada vez, lo cual ya me interesa. Pero también me interesa garantizar que la transmisión de las 4 señales de control sea correcta y pueda llegar al nodo adecuadamente.

Pongamos que tengo n = 2 (por tanto: 2 filas de 8 nodos esclavos SPI = 8 chips expansores GPIO16). LAs 4 señales SPI de la Rasp se disribuirán hasta alcanzar a 8 + 8 chips de estos.
Y aquí está mi duda en cuanto al diseño electrónico de este sistema de comunicación SPI con varios nodos conectados al mismo puerto compartiendo las mismas señales. El tema o cuestión es que si pretendemos tener el puerto SPI de la Raspberry distribuido entre tantos nodos;

* necesito algún tipo de elemento de distribución de señales (buffers trietado o cosas así)? O puedo trazar las pistas directamente sin necesidad de añadir ningún elemento?
* Cómo puede afectar al nodo accedido "i" que las 4 señales eléctricas se estén propagando por el resto de pistas hasta el resto de nodos aunque únicamente sea ese "i" el que va a atenderlo?
* Y si n = 8, donde 8x8 = 64 nodos esclavos?


Adjunto imagen para que se entienda un poco la compartición de señales de la que hablo, pero con ejemplo de cómo sería si sólo fueran dos nodos:



Saludos a todos y gracias por vuestra atención.
« Última modificación: 26 de Mayo de 2020, 07:38:33 por genisuvi »

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1164
Re:Distribución bus SPI entre Raspberry y varios nodos esclavos MCP23S17
« Respuesta #1 en: 26 de Mayo de 2020, 12:35:36 »
Que tal genisuvi,

Has hecho una muy buena pregunta y la verdad la respuesta no es muy sencilla ya que depende de varios factores, entre ellos el más importante es la longitud total del bus SPI que será común para el array de expansores que pretendes realizar.

1) El bus SPI es un bus de muy alta frecuencia de operación, en este caso los MPC23S17 pueden operar hasta una frecuencia de 10MHz, pero esa frecuencia obviamente se verá afectada por los parasíticos creados en el trazo de las pista, por lo que entre más largas, más posibilidad tendrás de que la señal de reloj para esa frecuencia se deforme y no pueda ser reconocida correctamente. Así que la solución es reducir la frecuencia del bus SPI tanto como sea operacional y tolerable para la aplicación.

2) Si existe la necesidad de que los buses SPI sean algo extensos (digamos 10 o más centímetros) y necesitas operar los expansores de puertos a su máxima frecuencia de operación (10MHz), entonces vas a necesitar hacer uso de buffers.

3) Siempre la mejor opción para estos casos es reducir la frecuencia de operación del bus SPI. Creo que esta es la mejor opción para tu caso. De esta manera no tendrás que agregar hardware extra.

elreypic.


 

anything