¿Necesito SS para la comunicación SPI de un solo esclavo?

3

Estoy usando Atmega328 como maestro en la comunicación SPI con un solo esclavo. ¿Hay alguna manera de evitar el uso del pin SS (selección de esclavo) para SPI? Ese pin también se puede usar para la salida PWM, que me gustaría usar.

    
pregunta Andreas

4 respuestas

5

Si puede o no vincular la entrada "selecta" de un esclavo SPI permanentemente activa depende tanto del esclavo específico como del diseño general del sistema. Algunos esclavos dependen de los bordes en sus entradas seleccionadas para cosas como control de flujo y / o alineación de bytes.

En algunos sistemas, en los que el maestro y el esclavo siempre se reinician juntos (por ejemplo, a través del ciclo de alimentación) y nunca experimentan fallas en el reloj, puede salirse con la suya, pero es más seguro (más confiable) planear incluir un Seleccione esclavo activo en su diseño.

    
respondido por el Dave Tweed
4

ATmega es un maestro aquí, como tú mismo dijiste.

Veamos lo que dice la hoja de datos sobre el pin de selección de esclavos:

SS: Slave Select input. When the SPI is enabled as a Slave, this pin is configured as an input regardless of the set- ting of DDB2. As a Slave, the SPI is activated when this pin is driven low. When the SPI is enabled as a Master, the data direction of this pin is controlled by DDB2. When the pin is forced by the SPI to be an input, the pull-up can still be controlled by the PORTB2 bit.

Como puedes ver, solo se usa cuando ATmega es un esclavo. Cuando se trata de un maestro, utilizas pines GPIO normales para seleccionar un esclavo. Incluso hay un párrafo sobre eso en la hoja de datos también:

When configured as a Master, the SPI interface has no automatic control of the SS line. This must be handled by user software before communication can start.

En su caso, ya que solo tiene un esclavo, puede conectar el pin de selección de esclavos del periférico para que siempre esté seleccionado y no preocuparse más por ello.

En general, se debe usar la línea de selección de esclavo activa. La línea de selección de esclavos debe activar el esclavo antes de iniciar la transmisión y desactivarlo después de finalizar la comunicación. Cualquier pin gratuito en el ATmega puede usarse para este propósito.

    
respondido por el AndrejaKo
0

El término "SPI" se usa para describir una amplia variedad de protocolos donde un dispositivo maestro se comunica con uno o más dispositivos esclavos. Un esquema común es que un dispositivo esclavo tenga una línea de "selección" que se afirma al inicio de cada transacción y se libera al final de la misma. Cuando se utiliza un enfoque de este tipo, la línea de selección cumple el doble propósito de sincronizar los límites de los bytes y también indica dónde comienzan y terminan los "comandos". Cuando se comunique con un esclavo de este tipo, será necesario tener uno de los pines de salida del maestro conectado al cable de selección de esclavo, pero se puede usar cualquier pin para ese propósito.

Algunos otros esclavos SPI utilizan diferentes enfoques para la sincronización. No hay una razón conceptual por la que los esclavos deban usar un cable selecto, pero muchos de ellos lo hacen. A menos que esté diseñando el esclavo, la necesidad del cable de selección será determinada por el propio esclavo.

    
respondido por el supercat
0

En mi experiencia en un proyecto actual sin pin de selección de esclavos, debe crear formas de verificar la sincronización / desincronización entre el maestro y el esclavo. Tales como: CRC en hardware, suma de comprobación en software, paquetes de tamaño fijo, y agregar demora entre paquetes para que el esclavo pueda procesar el último paquete antes de tener datos disponibles para el dispositivo maestro. Cada vez que se produce una desincronización, el esclavo debe reiniciar la máquina SPI y espera al menos el tiempo entre paquetes para aceptar datos. Después de estas consideraciones, recomendaría que no use SPI sin slve select porque terminará agregando demasiada complejidad en algo muy simple: asignar un pin GPIO en el maestro como Chip Select.

    
respondido por el Filipe Calasans

Lea otras preguntas en las etiquetas