¿Qué es mantener el pin SS alto en el modo maestro SPI en los AVR?

3

Una hoja de datos AVR típica contiene el siguiente ejemplo de una configuración del modo SPI Master (aquí, desde la página 164 de la hoja de datos ATmega128 / L ):

void SPI_MasterInit(void)
{
    /* Set MOSI and SCK output, all others input */
    DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);

    /* Enable SPI, Master, set clock rate fck/16 */
    SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}

void SPI_MasterTransmit(char cData)
{
    /* Start transmission */
    SPDR = cData;

    /* Wait for transmission complete */
    while (!(SPSR & (1<<SPIF)))
        ;
}

Tenga en cuenta que la inicialización del registro de dirección de los datos, aquí como DDR_SPI, establece el pin SS en entrada (implícito en "todos los demás en entrada").

Sin embargo, la sección sobre la funcionalidad del pin SS (que sigue al código, en la página 166) indica para el Modo maestro :

  

Si SS se configura como una salida, el pin es un pin de salida general   Lo que no afecta al sistema SPI. Normalmente, el pin será   conduciendo el pin SS del esclavo SPI.

     

Si SS está configurado como una entrada,   debe mantenerse alto para garantizar la operación del SPI maestro . Si el pin SS es   conducido bajo por los circuitos periféricos cuando el SPI está configurado como un   maestro con el pin SS definido como una entrada, el sistema SPI interpreta   esto como otro maestro seleccionando el SPI como esclavo y comenzando a   enviar datos a ella Para evitar la contención del bus, el sistema SPI realiza las siguientes acciones:

     
  1. El bit MSTR en SPCR se borra y el sistema SPI se convierte en esclavo . Como resultado de que el SPI se convierte en esclavo, los pines MOSI y SCK se convierten en   entradas.
  2.   
  3. Se establece el indicador SPIF en SPSR, y si la interrupción SPI está habilitada, y se establece el bit I en SREG, se ejecutará la rutina de interrupción.
  4.   

Por lo tanto, cuando la transmisión SPI controlada por interrupciones se utiliza en modo maestro,   y existe la posibilidad de que los SS sean bajos, la interrupción   Siempre se debe verificar que el bit MSTR todavía está establecido. Si el bit MSTR   ha sido borrado por una selección de esclavos, debe ser configurado por el usuario para   volver a habilitar el modo maestro SPI.

(Énfasis mío).

Ahora, el código funciona bien para mí, pero no entiendo por qué. La dirección del pin SS del Maestro se establece en entrada, pero ¿qué es lo que lo mantiene alto? El código no activa el pull-up. Me parece que un alfiler flotante podría desencadenar las consecuencias 1. y 2., lo que hace que el maestro se convierta en esclavo. Pero me parece difícil creer que los ejemplos de código emplearían un escenario tan impredecible.

    
pregunta Duoran

1 respuesta

5

La línea SS (de este u otros dispositivos) se ignora por completo en el ejemplo, ya que se supone que está controlada por el software (debe hacerlo) ya que indica que en la página 163 de esa hoja de datos:

  

Cuando se configura como maestro, la interfaz SPI no tiene control automático de los SS    línea. Esta   debe ser manejado por el software del usuario antes de que pueda comenzar la comunicación.   W   cuando esto es hacer   ne, escribiendo un   El byte al registro de datos SPI inicia el generador de reloj SPI y el hardware cambia los 8 bits.   en el esclavo.

Ahora se trata del otro dispositivo SS, pero implica que debe cuidar esta línea en ambos lados, por lo que incluso en la parte de envío se supone que debe reducir el SS del esclavo, pero no está incluido. / p>

    void SPI_MasterTransmit(char cData)
{
    /* Start transmission */
    // set slave SS line to low is missing here
    SPDR = cData;

    /* Wait for transmission complete */
    while (!(SPSR & (1<<SPIF)));
}
    
respondido por el Chebhou

Lea otras preguntas en las etiquetas

Comentarios Recientes

Este método de control es de donde generalmente provienen los pines. La mayoría de las resistencias de extremo a extremo se doblarán directamente si se tocan. Esto se debe a que un polo estable que generalmente está conectado a la posición del pin no se mueve, pero puede voltearse si el voltaje aplicado es lo suficientemente débil. Este efecto ocurre cuando se conecta a tierra en el acoplador de soldadura de 1 cable. Estoy usando silicio de cobre silicio (CS) para estas conexiones de solenoide solenoide. ¿Cómo... Lees verder