¿Microprocesadores para múltiples (~40) dispositivos SPI?

Estoy buscando construir un producto que combine más de 40 interruptores de botón pulsador LCD (ejemplo aquí que se comunican a través de SPI). He estado buscando microprocesadores para manejar esto, pero tengo problemas para encontrar alguno. Lo más alto que ofrece Atmel es 12 dispositivos ( como se encuentra aquí ), y ARM no se ve mejor.

¿Cuál es la mejor manera de controlar tantos dispositivos SPI? ¿Necesito vincular varios procesadores en un maestro?

¿Te das cuenta de que no estás obligado a usar un pin de selección esclavo dedicado? De hecho, puede usar cualquier GPIO o esquema que desee para generarlos, siempre que se asegure de que sean válidos en el tiempo. Entonces, realmente su límite son las cargas eléctricas en el autobús. Hay formas en que podría lidiar con eso, pero podría considerar un fan-in de datos de procesamiento por lotes de micros esclavos para un maestro. O potencialmente un FPGA, operando múltiples buses al mismo tiempo y tratando datos por lotes con la MCU anfitriona.
¿Se da cuenta de que los dispositivos XMEGA a los que se refiere su enlace pueden manejar hasta 12 buses SPI como maestros, no solo 12 clientes SPI? Podría dividir los 40 dispositivos en 10 buses, por ejemplo, y aún debería tener suficientes GPIO libres para las líneas de selección de esclavos. Pero tal vez me estoy perdiendo el punto.
@ChrisStratton No me di cuenta de eso, gracias. Soy un programador que está tratando de incorporarse, por lo que hay mucho aprendizaje por hacer.
@ Rev1.0 Probablemente no me perdí el punto, solo soy nuevo en esto. Entonces, ¿los "40 dispositivos divididos en 10 buses" ofrecen una solución al problema de la capacitancia de entrada que Majenko mencionó a continuación?
¿Puede proporcionar una hoja de datos que muestre las conexiones típicas y el protocolo SPI que utiliza el interruptor LCD?
@kfriede: no proporcionó información sobre la longitud esperada del seguimiento del bus y los requisitos de velocidad del reloj SPI, por lo que es difícil saber si no necesita mantener baja la cantidad de clientes por bus. Dependiendo del diseño de los botones físicos, tal vez divida los 40 dispositivos en 4 buses y ubique el controlador en el "centro" para mantener los rastros lo más cortos posible. Si tiene alrededor de 10 clientes por bus y puede mantener las longitudes de seguimiento por debajo de 10 cm, debería poder obtener una velocidad de reloj de más de 1 MHz. Pero eso es sólo una estimación personal rápida.
@user2943160 el enlace titulado "aquí" arriba lo tiene, que dirige a: nkkswitches.com/pdf/IS15EBFP4RGB09YN_Wide64x32ShrtTrvl.pdf
@kfriede Esa hoja de datos no proporciona ni el protocolo SPI ni un diagrama de conexión típico. Por eso pregunté. La conexión en cadena de los dispositivos podría ser muy útil.

Respuestas (3)

Use demultiplexores como el 74HC138 para la selección de esclavos o use diodos OR con una selección de matriz.

O si el protocolo lo permite, puede encadenar todos los botones y usar una transferencia SPI larga para todos ellos.

Ahora que dices eso, el demultiplexor tiene mucho sentido. Ni siquiera se me pasó por la cabeza. Gracias.
Como señala la respuesta de Majenko, también querrá multiplexar los pines MISO (maestro en la salida del esclavo) y demultiplexar los pines MOSI (maestro en la salida del esclavo).
No, usted demultiplexa la selección de esclavos y conecta las líneas MISO y MOSI. El punto central de SS es que puede unir todos los MOSI y, con los dispositivos esclavos correctos, unir todas las líneas MISO.

Una palabra de precaución cuando esté utilizando tantos dispositivos SPI en un solo bus:

  • Capacitancia de entrada.

Esa cantidad de dispositivos pondrá una gran cantidad de capacitancia en el bus. A menos que tome precauciones, limitará severamente su frecuencia máxima de bus y, por lo tanto, la velocidad a la que puede actualizar los contenidos de la pantalla, etc. (Básicamente, la capacitancia de entrada junto con la impedancia de salida de los pines IO de la MCU forman un filtro de paso bajo que convierte la frecuencia más alta ondas cuadradas en más como ondas sinusoidales, lo que a SPI no le gusta - interfiere con el tiempo).

Si está dispuesto a usar velocidades de comunicación más bajas, está bien; sin embargo, recomendaría dividir el bus en varios segmentos más pequeños y almacenar en búfer cada señal SCK y MOSI para mantener la capacitancia en cada segmento dentro de niveles razonables. Una alternativa es usar un solo búfer de unidad de alta corriente para reducir la impedancia de salida de los pines SCK y MOSI.

Muy buena pista. Preferiría dividir los buses en lugar del almacenamiento en búfer. Esto mantendrá los picos de corriente mucho más bajos (solo un bus a la vez necesita estar cambiando) reduciendo el ruido y los problemas de desacoplamiento.

NO hay límite para la cantidad de dispositivos SPI que se pueden conectar a un solo SPI, suponiendo que haya suficientes IO para seleccionar el dispositivo correcto.

Pero en la práctica puede haber algunas dificultades cuando el número es mayor a velocidades más altas. Pero eso es raro.

Puede conectar MISO MOSI y SCK en paralelo a todos los dispositivos. Pero debe conectar el GPIO del controlador al pin SS (selección de esclavo) de una manera individual.

Elija expansores GPIO o multiplexores solo si la cantidad de GPIO en el controlador es limitada