Agregue más de 2 esclavos SPI

12

Como lo que veo en el esquema, hay 2 canales para esclavos: CS0 y CS1. ¿Significa que solo puedo conectar 2 chips, como MCP3008 o algo así? ¿O puedo adjuntar más esclavos a estos 2 esclavos adjuntos?

¿El esquema Raspberry tiene soporte o algo en común con este esquema de conexión de esclavos SPI tomado de Wikipedia? ¿Es posible hacerlo así?

Esclavos SPI

Sergei Basharov
fuente
"¿Es posible hacerlo así?" -> Me parece que así es exactamente, excepto que el Pi tiene CE0 y CE1 en lugar de SS1, SS2, SS3. Las líneas de bus SCLK, MOSI y MISO se comparten entre todos los dispositivos en ambos casos.
Ricitos de oro

Respuestas:

12

Muchas maneras.

Puede hacer una especie de explosión de bits que el esclavo selecciona, es decir, conectar todos los dispositivos con MISO / MOSI / SCLK compartido y tierra, pero con CS separado. Simplemente configure CS bajo para el dispositivo que desea antes de llamar al controlador SPI. El controlador SPI intentará establecer un CS pero no sabrá que no está conectado.

El Pis con el encabezado de expansión de 40 pines tiene otro dispositivo SPI con 3 selecciones de chip. Mi biblioteca pigpio es compatible con ese dispositivo.

Puede hacer un poco de software en todo el protocolo.

Puede agregar hardware adicional para cambiar la línea CS a cualquier dispositivo que desee.

Etcétera etcétera.

EDITADO PARA AGREGAR

El controlador "adecuado" de Raspberry Pi Linux SPI está actualmente en proceso de revisión para permitir que se usen gpios arbitrarios como CS.

EDITADO PARA AGREGAR 2

Se dice que el controlador SPI de Linux actual (spi_bcm2853) admite GPIO arbitrario a medida que se selecciona el chip. Ver / boot / overlays / README.

joan
fuente
1
"Permitir gpios arbitrarios" es una buena idea en sí misma y lo que uno podría esperar de un sistema embebido. Gracias por el aporte.
Ghanima
Joan, explique cómo usar "otro dispositivo SPI con 3 chips seleccionados" con la biblioteca "pigpio", o enlace al ejemplo de código. Esto ayudará a responder la pregunta. Gracias
Alex
Ver abyz.co.uk/rpi/pigpio/cif.html#spiOpen . GPIO 16-21 están conectados al SPI auxiliar. Ver abyz.co.uk/rpi/pigpio/index.html#Type_3 . Alternativamente, se dice que el controlador SPI de Linux actual (spi_bcm2853) admite GPIO arbitrario a medida que se selecciona el chip. Ver / boot / overlays / README.
Joan
"El Pis con el encabezado de expansión de 40 pines tiene otro dispositivo SPI con 3 chips seleccionados" solo hay 2 cs en el encabezado de 40 pines
1
@meh Hay 5 selecciones de chip en el encabezado de expansión de 40 pines. Dos para el SPI principal y 3 para el SPI auxiliar. Las señales auxiliares de SPI se muestran en minúsculas en abyz.co.uk/rpi/pigpio/index.html#Type_3
joan
3

Tiene razón en que RaspberryPi proporciona solo dos selecciones de chip en su bus SPI (ver aquí ). Y supongo que los controladores SPI y las soluciones de software se basan en ese hecho (aunque la respuesta de @ joan sugiere que diferentes bibliotecas lo manejan de manera diferente y el controlador oficial permitirá que se usen pines GPIO arbitrarios como selecciones de chips en el futuro).

Sin embargo, debe tener en cuenta que una selección de chip no es más que una salida digital dedicada del Pi. Por lo tanto, siempre puede tener una mayor cantidad de selecciones de chip si usa los pines GPIO. En cuyo caso, sin embargo, su software será responsable de establecer los pines apropiados para abordar el esclavo SPI correcto.

Dado que la idea de las selecciones de chips es seleccionar mutuamente de forma exclusiva un solo esclavo, también puede utilizar algunos circuitos digitales simples para disminuir la cantidad de pines GPIO "desperdiciados" (si también los necesita para otros fines). Algo así como el 74HC / HCT138, un decodificador / demultiplexor de 3 a 8 líneas podría usarse para direccionar 8 esclavos a través de 8 selecciones de chip con solo 3 pines GPIO.

Es importante tener en cuenta que las líneas de autobús SCLK y MOSI se comparten entre todos los esclavos. Por lo tanto, cuando conecte varios esclavos al Pi, asegúrese de que la carga (resistencia y capacitancia de los pines de entrada de los esclavos) no exceda el despliegue del Pi, aunque esto no es un problema hoy en día con la baja capacitancia y Alta resistencia de las entradas digitales.

Ghanima
fuente
1

En realidad, hay una muy buena respuesta para esto por parte de un ingeniero de RPi, PhilE, en el foro de frambuesa, ver 28 de septiembre de 2015 . Básicamente, da un ejemplo de una superposición de árbol de dispositivos que utiliza la posibilidad con spi-bcm2835 de tener cualquier GPIO libre como selección de chip.

Alejandro
fuente