¿Es correcto el diseño de mi multiplexación SPI?

2

Quiero que un RPi actúe como maestro SPI y pueda comunicarse con 24 esclavos SPI. La conexión SPI es full-duplex. Los esclavos SPI están a unos 50 cm del maestro (SPI se ejecuta en cables a otra placa PCB que no se considera aquí). Los 24 esclavos serán tableros Blue Pill STM32 , tengo que usar DMA en el SPI slave (CPU es muy ocupado).

Me he comunicado con éxito utilizando SPI con cables sin blindaje de 50 cm con una velocidad de transmisión suficientemente razonable para mi aplicación (9 MHz).

Estoy bastante seguro (aunque no lo he probado) que tendré problemas debido a los múltiples esclavos SPI y los cables largos, así que diseñé un esquema y me gustaría que me dijera qué puede funcionar y qué no. También es probable que haya espacio para simplificaciones.

Diseño

  • Planeo usar 3 registros de cambio de 74HC595 en cadena para generar 24 salidas que determinarán a qué esclavo SPI se conectará el RPi.
  • Planeo usar CD54HC125 quad tri-state buffers para aislar a los otros esclavos SPI cuando están conectados a uno, estos serían controlados por las salidas de los registros de desplazamiento.

Raspberry Pi

  • SER,SRCLKyRCLKmanejanlosregistrosdeturnos
  • SPI_CS,SPI_MISO,SPI_MOSIySPI_SCLKcontrolanlacomunicaciónSPI(RPieselmaestro)

registrosdeturnos

  • SER,SRCLKyRCLKcontroladosporelRPi
  • Margaritaencadenada
  • CadasalidaSPI_xconduciráunbúferdetresestados

BúferesSPIdetresestados

  • Hay24bloquessimilarescomoeste,soloelSPI_xcambia
  • Cadaconector01x04machoconduceaunesclavoSPI
  • Lahabilitacióndesalidaestácontroladaporunadelassalidasdelregistrodedesplazamiento(aquíSPI_0)
  • SPI_MISOestáinvertidoporqueesunpindesalidadelesclavo

¡EsteesmiprimerdiseñodeKiCAD,larevisiónyloscomentariosseríanmuyapreciadosantesdequecomprecomponenteseintenteprobarenunaplacadepruebas!DespuésdeesoplaneodiseñarelPCByfabricarlo.

Editar(juliode2018):pruebadelmundoreal

AcabodeprobarlacomunicaciónentreunaRaspberryPi(master)y6tablillasdepastillasazules(STM32),dúplexcompleto.

Sin ningún dispositivo adicional y, a pesar del mal cableado, la comunicación funciona a 10 MHz de manera confiable; 99.6% sobre 12 000 mensajes (verificados con una suma de Flechter)

Si esto se amplía hasta 24 dispositivos o no, sigue siendo una pregunta :)

    
pregunta Victor Lamoine

1 respuesta

2

¿Por qué "aislarías a los otros esclavos SPI cuando estás conectado a uno"? El punto central del uso de SPI es que la línea CS solo activa un esclavo a la vez.

¿Se trata de lidiar con la carga de fan-out en líneas SCK y MOSI? Una simple señal de conducción de búfer "bus" sería suficiente para esto.

¿O también es para multiplexar la señal SCK? No creo que necesites hacer esto. En lugar de utilizar registros de desplazamiento para multiplexar señales, puede usarlos para impulsar directamente los pines CS de los esclavos. Si su software no emite la señal de reloj hasta que se seleccione el esclavo correcto, no hay ningún daño en "activarlos" uno por uno sin la transmisión real.

Creo que el factor limitante en tu diseño es la capacidad de la línea, que crecerá independientemente de lo que conectes a las salidas RPi, búferes o esclavos.

Por lo tanto, use los registros de desplazamiento para activar los pines CS en los esclavos y use búferes de línea simples en SCK y MOSI.

ACTUALIZACIÓN:

Estaba buscando otras cosas y encontré este chip que creo que encaja perfectamente en tu aplicación. ADG731 es un multiplexor / demultiplexor controlado por SPI de 32 canales. Por lo tanto, puede ponerlo en el mismo canal SPI que sus esclavos para cambiar la línea CS entre ellos (el mux CS estará separado, por supuesto).

Esto funcionaría incluso mejor que cambiar CS con registros de desplazamiento como sugerí anteriormente, ya que
a) no estarías activando esclavos de inmediato mientras cambias,
b) puedes apuntar a cualquier esclavo en cualquier orden, y
c) liberará 2 de las líneas de E / S utilizadas para controlar los registros de desplazamiento

Agregue un pequeño búfer dual para SCK y MOSI y tendrá una solución de 2 chips direccionable directamente más rápida en lugar de 27 chips con cambio de dirección.

    
respondido por el Maple

Lea otras preguntas en las etiquetas