¿Se puede atar el pin SS si solo se usa un dispositivo SPI?


8

Leí en línea que para iniciar una transacción SPI en un dispositivo compatible con SPI, la línea SS (selección esclava, también conocida como selección de chip) debe establecerse en baja para toda la transacción y luego colocarse alta al final de la transacción. Si hago un circuito que contiene solo un dispositivo SPI, ¿tendré que bajar el comando de envío de línea SS y luego subir la línea ss cada vez o puedo vincular la línea ss baja y enviar comandos ilimitados? El dispositivo que estoy usando es el chip de sonido ISD1700 .


3
En general, sí, el pin SS le permite al dispositivo esclavo saber cuándo comienza y termina la transacción. Sin él no hay nada que garantice que permanezca sincronizado. Puede funcionar, pero si alguna vez se desincroniza, no lo recuperará.
Kevin White

44
@kevinWhite en realidad muchos dispositivos SPI necesitan esa transición SS para iniciar una máquina de estado interna. La hoja de datos para su dispositivo en particular debería darle la respuesta, pero si ya la tiene, ¿por qué no probarla?
akohlsmith

1
@akohlsmith - Estoy de acuerdo, estoy diciendo que NECESITAS las SS, no que puedes escapar sin ellas. Incluso aquellos dispositivos que no requieren que realice operaciones internas pueden salir del sincronismo con el maestro. El único fabricante que ha visto que recomienda no usar el SS es Dispositivos analógicos para algunos de sus dispositivos donde tienen múltiples funciones asignadas a los pines, de modo que el SS puede no estar disponible. No veo cómo eso puede ser confiable y he escuchado quejas donde el dispositivo requiere un reinicio para volver a sincronizarse.
Kevin White

Estoy de acuerdo con @akohlsmith. Y si quieres responder la pregunta, votaré. Aquí está mi argumento: me comunico periódicamente con un dispositivo a través de SPI. Pero, hay una función de interrupción que también necesita el SPI para el mismo dispositivo. Usando el pin SS, debería poder interrumpir la transacción SPI actual sin terminarla. Dándome acceso al dispositivo SPI más rápido al dar servicio a la interrupción.
st2000

Respuestas:


14

[@Kevin y @akohlsmith deberían publicar sus comentarios como respuestas.
Esto es para ampliar sus comentarios. ]

SPI 1 no prescribe el comportamiento exacto de la SS (línea de selección esclava 2 ). Este comportamiento depende de la implementación de cada dispositivo individual. He visto dispositivos que pueden funcionar con el SS permanentemente insertado. También he visto dispositivos que requieren caídas y bordes ascendentes en el SS.

Aunque no dice que explícitamente se deba activar el SS ,
la guía de diseño (p.31) dice que el SS inicia y finaliza la transacción SPI. Sería prudente suponer que se debe activar SS para que se realice la transacción SPI.

1 SPI es más una costumbre que un estándar.
2 CS (selección de chip) es otro nombre para la selección esclava.


66
Esta es una muy buena respuesta. Muchos / la mayoría de los dispositivos de destino SPI dependen completamente de la línea SPI_CS para inicializar la máquina de estado de captura de bits interna de la parte para sincronizar entre el iniciador y los dispositivos de destino. Hay algunos dispositivos que pueden volver a sincronizarse simplemente reconociendo patrones de sincronización o código de operación sobre la marcha en la línea de señal MOSI. Pero estos son minoritarios y se recomienda que cualquiera que diseñe un sistema que use dispositivos SPI proporcione un SPI_CS a cada dispositivo objetivo, incluso si eso significa usar circuitos adicionales y / o GPIO con el dispositivo iniciador para proporcionar esa capacidad.
Michael Karas

No es necesario agregar otra respuesta, la suya captura lo que @kevinwhite y yo estábamos diciendo. :-)
akohlsmith

5

Depende completamente del dispositivo esclavo.

Si el protocolo para el dispositivo esclavo incluye algún tipo de encuadre, ya sea con paquetes de longitud fija, bytes de inicio / parada o un encabezado que especifique la longitud del paquete, entonces el dispositivo esclavo puede funcionar sin una selección de chip. Tengo un chip de memoria flash SPI en la placa en la que estoy trabajando actualmente, que parece estar perfectamente satisfecho con o sin la selección de chip. Se puede conectar permanentemente a 0V (habilitado) sin problemas.

En realidad, esto nos causó algunos problemas, porque un contratista había configurado algunas de las E / S de bajo nivel, incluido el SPI, y nosotros (¡y ellos!) No nos dimos cuenta de que no habían hecho funcionar la selección de chips. ¡No fue hasta que tuve que extender su trabajo SPI para agregar otro dispositivo SPI en el mismo bus que descubrí que en realidad no teníamos selecciones de chips!

Por el contrario, muchos dispositivos esclavos necesitan selecciones de chip para encuadrar los datos, y el envío de más bits / bytes que el paquete esperado sin liberar la selección de chip al final se considerará como una transferencia no válida y rechazada. Los DAC a menudo cargan el nuevo valor en la salida en el borde ascendente de selección de chip. De manera similar, los ADC a menudo usarán la transferencia SPI para iniciar (y, a veces, tiempo) la conversión, por lo que necesitan que el chip seleccione flanco descendente como su desencadenante.

Su hoja de datos en realidad no dice nada sobre cómo manejar su chip particular sobre SPI, y no estoy lo suficientemente motivado para googlearlo. Ejercicio dejado para el lector ...;)


Solo voy a atar SS bajo y rezar para que funcione ya que la hoja de datos para el dispositivo que obtuve de Internet solo establece que (de acuerdo con la tabla de definición de pines en la hoja de datos) SS se usa para habilitar el dispositivo. También establece que si SS es alta, entonces las otras líneas SPI estarán en estado de alta impedancia. dedos cruzados.

@ Mike descubrí algo de motivación esta mañana, así que busqué en Google "ISD1700". Los primeros dos enlaces fueron dos archivos PDF. El primero fue la hoja de datos a la que se vinculó; y la segunda fue la guía de diseño que dice exactamente cómo manejar el chip. La guía de diseño dice (sección 10.2, página 31): "Una transacción SPI se inicia en el borde descendente del pin SS ~". Entonces, no, la hoja de datos dice que no puede salirse con la suya. Y no quiero ser demasiado sarcástico aquí, pero si tuvieras JFGI y leyeras los dos enlaces principales que surgieron, podrías haber respondido tu propia pregunta.
Graham

3

Sin saber nada específico sobre el dispositivo esclavo SPI, no, no puede simplemente atar SS bajo.

Muchos dispositivos utilizan el borde de ataque de SS para restablecer su lógica interna al comienzo de una nueva transacción. Por ejemplo, las memorias pueden interpretar los primeros dos bytes como dirección, luego los bytes posteriores como datos. Algunos recuerdos no realizan la escritura física hasta que se desautoriza SS.

Para algunos dispositivos con el protocolo correcto, es posible que pueda salirse con la suya. Sin embargo, no funcionará con la mayoría de los dispositivos disponibles.


Varios años tarde en este. Y estoy aquí porque también estaba buscando respuestas. Muy buena información que agregó Olin, y buena información de otros también. Creo que el problema se debió principalmente a la interpretación de las palabras 'chip select' o 'slave select', que si uno se ve obligado a asumir algo, entonces la suposición simplemente significaría activar ese dispositivo y apagar todos los demás dispositivos esclavos que de otro modo podrían interferir con las comunicaciones entre esclavo y maestro. Una 'suposición' justa y lógica. Es bueno que este tema se aclare aquí en este hilo.
Kenny

Otra pregunta siguiente de este tema podría ser ----- si el pin de selección de chip / habilitación de chip no se debe 'habilitar' permanentemente, entonces, ¿cuándo exactamente se debe habilitar y deshabilitar el dispositivo esclavo spi? Por ejemplo, ¿deshabilitamos el dispositivo esclavo después de completar cada comando enviado al esclavo?
Kenny
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.