Diferencia entre revisiones de «SPI: Interfaz de Serial Periferico para el microcontrolador QE - MC9S08QE128»

De Wikitronica
Saltar a: navegación, buscar
Línea 314: Línea 314:
 
La figura a la derecha muestra los formatos de reloj cuando CPHA = 0. En la parte superior de la figura, los tiempos del bit 8 se muestran para referenciar con un bit el inicio mientras el esclavo es seleccionado ((SS) IN pasa a bajo), y el bit 8 finaliza en el último flanco de SPSCK. Las líneas de bit más significativo primero y de bit menos significativo primero muestran el orden de bits de dato SPI dependiendo de las configuraciones en LSBFE. Ambas variaciones de la polaridad SPSCK son mostrados, pero solo una de estas formas de onda se aplica para una transferencia específica, dependiendo del valor en CPOL. La forma de onda SAMPLE IN se aplica a la entrada MOSI del esclavo o a la entrada MISO del maestro. La forma de onda MOSI se aplica al pin de salida MOSI desde un maestro y la forma de onda MISO se aplica a la salida MISO desde un esclavo. La forma de onda  (SS) OUT se aplica a la salida Slave Select desde un maestro (provista por MODFEN y SSOE = 1). La salida  (SS) del maestro va a bajo activo al comienzo del primer tiempo de bit de una transferencia  y va de vuelta a alto medio ciclo de SPSCK después del final del tiempo del octavo bit de la transferencia. La forma de onda  (SS) IN se aplica a la entrada Slave Select del esclavo.
 
La figura a la derecha muestra los formatos de reloj cuando CPHA = 0. En la parte superior de la figura, los tiempos del bit 8 se muestran para referenciar con un bit el inicio mientras el esclavo es seleccionado ((SS) IN pasa a bajo), y el bit 8 finaliza en el último flanco de SPSCK. Las líneas de bit más significativo primero y de bit menos significativo primero muestran el orden de bits de dato SPI dependiendo de las configuraciones en LSBFE. Ambas variaciones de la polaridad SPSCK son mostrados, pero solo una de estas formas de onda se aplica para una transferencia específica, dependiendo del valor en CPOL. La forma de onda SAMPLE IN se aplica a la entrada MOSI del esclavo o a la entrada MISO del maestro. La forma de onda MOSI se aplica al pin de salida MOSI desde un maestro y la forma de onda MISO se aplica a la salida MISO desde un esclavo. La forma de onda  (SS) OUT se aplica a la salida Slave Select desde un maestro (provista por MODFEN y SSOE = 1). La salida  (SS) del maestro va a bajo activo al comienzo del primer tiempo de bit de una transferencia  y va de vuelta a alto medio ciclo de SPSCK después del final del tiempo del octavo bit de la transferencia. La forma de onda  (SS) IN se aplica a la entrada Slave Select del esclavo.
 
Cuando CPHA = 0, el esclavo comienza a conducir su salida MISO con el primer valor de bit de dato (MSB o LSB dependiendo de LSBFE) cuando (SS) cae a bajo activo.el primer flanco de SPSCK causa que, tanto el maestro como el esclavo, muestreen los valores de bit de dato en sus entradas MISO y MOSI, respectivamente. En el segundo flanco de SPSCK, el shifter SPI corre una posición de bit, lo cual, corre en un valor del bit que acababa de ser muestreado y corre el segundo valor de bit de dato fuera de otro fin del shifter a las salidas MOSI y MISO de maestro y esclavo, respectivamente. Cuando CPHA = 0, la entrada de  (SS) del esclavo debe ir a inactividad de alto nivel entre transferencias.
 
Cuando CPHA = 0, el esclavo comienza a conducir su salida MISO con el primer valor de bit de dato (MSB o LSB dependiendo de LSBFE) cuando (SS) cae a bajo activo.el primer flanco de SPSCK causa que, tanto el maestro como el esclavo, muestreen los valores de bit de dato en sus entradas MISO y MOSI, respectivamente. En el segundo flanco de SPSCK, el shifter SPI corre una posición de bit, lo cual, corre en un valor del bit que acababa de ser muestreado y corre el segundo valor de bit de dato fuera de otro fin del shifter a las salidas MOSI y MISO de maestro y esclavo, respectivamente. Cuando CPHA = 0, la entrada de  (SS) del esclavo debe ir a inactividad de alto nivel entre transferencias.
 +
 +
 +
----
 +
 +
=='''Interrupciones de la SPI'''==
 +
 +
Hay tres bits banderas, dos bits mascaras de interrupción y un vector de interrupción asociado con el sistema SPI. La mascara de habilitación de interrupción SPI (SPIE) habilita interrupciones desde la bandera de recepción llena SPI (SPRF) y la bandera de modo de fallo (MODF). La mascara de habilitación de interrupción de transmisión SPI (SPTIE) habilita interrupciones desde la bandera de buffer de transmisión vacío SPI (SPTEF). Cuando uno de los bits bandera y el bit mascara de interrupción asociado a este se encienden, una interrupción de Hardware solicitada es enviada al CPU. Si los bits mascaras de interrupción están limpios, el Software puede hacer encuesta al bit bandera asociado en lugar de utilizar interrupciones. La rutina de servicio de interrupción SPI (ISR) podría chequear los bits bandera para determinar qué evento causó la interrupción. La rutina de servicio podría también limpiar los bits bandera antes de correr desde ISR (usualmente cerca del comienzo de la ISR).
 +
 +
 +
----
 +
 +
=='''Modo de Detección de Fallos'''==
 +
 +
Un modo de fallo ocurre y la bandera de modo de fallo se enciende cuando un dispositivo maestro SPI detecta un error en el pin  (SS) (provisto del pin  (SS) configurado como una señal de entrada en modo de fallo). El pin  (SS) es configurado para ser una señal de entrada en modo de fallo cuando MSTR = 1, habilitar el modo de fallo es colocar (MODFEN = 1), y salida Slave Select habilitada es limpiar (SSOE = 0) Una característica de detección en modo de fallo puede ser utilizada en un sistema donde más de un dispositivo SPI pudiera convertirse en un maestro al mismo tiempo. El error es detectado cuando un pin  (SS) maestro esta en bajo, indicando que algún otro dispositivo SPI está tratando de dirigir a ese maestro como si fuera un esclavo. Esto podría indicar un conflicto de controlador de salida inofensivo, entonces, el modo de fallo lógico es diseñado para deshabilitar todos los controladores de salida SPI cuando algún error es detectado.
 +
 +
Cuando en modo de fallo es detectado, MODF se enciende y MSTR es limpiado para cambiar la configuración SPI de vuelta a modo esclavo. Los controladores de salida en SPSCK, MOSI y MISO (si no están en modo bidireccional) son deshabilitados. MODF es limpiado cuando es leído mientras está encendido, entonces se escribe en el registro de control 1 SPI (SPIxC1). El Software usuario podría verificar si la condición de error ha sido corregida antes de cambiar el SPI de vuelta a modo maestro.
  
  

Revisión del 23:58 16 nov 2012


Archivo:EsquemaMC9S08QE128conSPI.jpg
Esquema del MC9S08QE128 con la SPI resaltada

Introducción

La Interfaz de Serial Periférico es un Bus estándar de comunicaciones, cuya función principal es la transferencia de datos entre circuitos integrados en equipos electrónicos. LA MCU DEMOQE128 cuenta con un bus SPI para realizar operaciones entre módulos periféricos, lo cual le permite al usuario controlar casi cualquier dispositivo electrónico digital que acepte un flujo de bits regulado por un reloj.


Elementos Fundamentales que componen la SPI

RELOJ SERIAL DE LA SPI (SPSCK): Cuando la SPI es habilitada como un esclavo, este pin es la entrada del clock serial. Cuando la SPI es habilitada como maestro, este pin es la salida del clock serial.

SALIDA DE DATO MAESTRO, ENTRADA DE DATO ESCLAVO (MOSI): Cuando la SPI es habilitada como maestro y el pin de control Zero de la misma(SPC0) es 0 (en modo no bidireccional), este pin es la salida de dato serial. Cuando la SPI es habilitada como esclavo y SPC0 = 0, este pin es la entrada de dato serial. Si SPC0 = 1 para seleccionar el modo bidireccional de cable simple, y el modo maestro está seleccionado, este pin se convierte en el pin de entrada – salida de dato bidireccional (MOMI), además, el bit de habilitación de salida de modo bidireccional determina si el pin se comporta como una entrada (BIDIROE = 0) o como una salida (BIDIROE = 1). Si SPC0 = 1 y el modo esclavo esta seleccionado, este pin no es usado por la SPI y vuelve a ser un pin de puerto de entrada – salida uso general.

ENTRADA DE DATO MAESTRO, SALIDA DE DATO ESCLAVO (MISO): Cuando la SPI es habilitada como maestro y el pin de control Zero de la misma(SPC0) es 0 (en modo no bidireccional), este pin es la entrada de dato serial. Cuando la SPI es habilitada como esclavo y SPC0 = 0, este pin es la salida de dato serial. Si SPC0 = 1 para seleccionar el modo bidireccional de cable simple, y el modo esclavo está seleccionado, este pin se convierte en el pin de entrada – salida de dato bidireccional (SISO), además, el bit de habilitación de salida de modo bidireccional determina si el pin se comporta como una entrada (BIDIROE = 0) o como una salida (BIDIROE = 1). Si SPC0 = 1 y el modo maestro esta seleccionado, este pin no es usado por la SPI y vuelve a ser un pin de puerto de entrada – salida de uso general.

SLAVE SELECT ((SS)): Cuando la SPI esta habilitada como esclavo, este pin es la selección de entrada “low-true” del esclavo. Cuando la SPI esta habilitada como maestro y el habilitador del modo de fallo esta apagado (MODFEN = 0), este pin no es utilizado por la SPI y vuelve a ser un pin de puerto entrada – salida de uso general. Cuando la SPI esta habilitada como maestro y el MODFEN = 1, el bit habilitador de selección de salida del esclavo determina si ese pin se comporta como la entrada del modo de fallo (SSOE = 0) o como la salida de Slave Select (SSOE = 1).

TASA DE BAUDIOS DEL SPI: En la imagen inferior puede apreciarse que, la fuente del reloj para la Tasa de Baudios del SPI es el bus Clock. Los tres bits de calibración (SPPR2:SPPR1:SPPR0) seleccionan un divisor de calibración de 1, 2, 3, 4, 5, 6, 7 u 8. Los tres bits de selección de tasa (SPR2:SPR1:SPR0) dividen la salida de la etapa de calibración por 2, 4, 8, 16, 32, 64, 128 ó 256 para conseguir el Clock de tasa de bits interno de la SPI en modo maestro.

Tasa de Baudios de la SPI

Descripción de Señal Externa: La SPI opcionalmente comparte cuatro pines de puerto. La función de estos pines depende de los ajustes de los bits de control de la SPI. Cuando la SPI es inhabilitada (SPE = 0) estos cuatro pines se convierten en puertos de entrada – salida de uso general y no son controlados por la SPI.


El Módulo SPI

Diagrama del Módulo de la SPI

El elemento central de la SPI es el registro de desplazamiento SPI. Los datos se escriben en el transmisor de doble búfer (escrito en SPIxD) y se transfieren al registro de desplazamiento SPI al inicio de una transferencia de datos. Después de desplazar en un byte el dato, este es transferido dentro del receptor de doble búfer donde puede ser leído (leído desde SPIxD).

Cuando el SPI es configurado como maestro, el reloj de salida es dirigido por el pin SPSCK, el shifter output es dirigido por MOSI, y el shifter input desde el pin MISO. Cuando el SPI es configurado como esclavo, el pin SPSCK es dirigido por la entrada de reloj del SPI, el shifter output es dirigido por MISO y el shifter input desde el pin MOSI. En sistemas SPI externos, simplemente se conectan todos los pines SPSCK con los otros, todos los pines MISO juntos y todos los pines MOSI juntos. Los dispositivos periféricos a menudo utilizan nombres ligeramente diferentes para estos pines. En la figura se muestra el diagrama de bloques del módulo SPI.






Características de la Interfaz de Serial Periférico

Entre las características del módulo SPI se incluye:

• Modo de operación maestro/esclavo.

• Opciones bidireccionales de un solo cable o cable doble.

• Rango de bits de transmisión programable.

• Doble búfer para transmisión y recepción.

• Opciones de fase y polaridad del reloj serial.

• Selección de salida esclavo.

• Cambio seleccionable entre bit más significativo primero y bit menos significativo primero.

Esquema de conexión de un Sistema SPI en arreglo Maestro - Esclavo

Pueden conectarse varias unidades de microcontrol para crear sistemas de transferencia de datos. Por ejemplo, en el esquema se muestran los módulo SPI de dos unidades de microcontrol conectados en un arreglo maestro – esclavo. El dispositivo maestro inicializa todas las transferencias de dato SPI. Durante una transferencia, el maestro pasa el dato de salida, en el pin MOSI, al esclavo, mientras que, simultáneamente, recibe el dato de entrada (en el pin MISO) del esclavo. La transferencia cambia eficazmente los datos en los registros de desplazamiento SPI de los dos sistemas. La señal SPSCK es un reloj de salida desde el maestro y una entrada al esclavo. El dispositivo esclavo debe ser seleccionado por un bajo nivel en la entrada “slave select” (pin SS). En este sistema, el dispositivo maestro ha configurado su pin SS como una salida “slave select” opcional.

Los usos más comunes de sistemas SPI incluyen conexiones simples de los registros de desplazamiento para sumar puertos de entradas o salidas, o conectar pequeños dispositivos periféricos como conversores A/D o D/A serial. A pesar de que en la figura dos se muestra un sistema donde el dato es intercambiado entre dos unidades de microcontrol, muchos sistemas prácticos solo requieren conexiones simples donde el dato es transferido unidireccionalmente desde la unidad de microcontrol maestra al esclavo, o desde el esclavo a la unidad de microcontrol maestra.


Estructuras de los Registros de la SPI

La SPI tiene cinco registros de 8 – bits para selección de opciones SPI, control de velocidad de transmisión, reporte de estado SPI y para transmitir/recibir datos. A continuación se presenta una descripción de los registros y bits de control sólo por sus nombres.


Registro de Control 1 de la SPI (SPIxC1)

Este registro de lectura/escritura incluye la habilitación de control de la SPI y opciones de configuración.

Estructura del Registro SPIxC1


Bits Descripción
7

SPIE

SPI Habilitador de Interrupciones (Para SPRF y MODF): Este es el habilitador de interrupciones para recibir SPI memoria llena (SPRF) y eventos de modo de fallo (MODF).

0 Interrupciones desde SPRF y MODF inhabilitadas (utilizar sondeo)

1 Cuando SPRF o MODF es 1, solicitar una interrupción de Hardware.

6

SPE

SPI Habilitador de Sistema: La desactivación del SPI detiene cualquier transferencia que esté en curso, borra los buffers de datos e inicializa maquinas de estado internas. SPRF se borra y SPTEF se establece para indicar si el buffer de transmisión de datos está vacío.

0 SPI Sistema inactivo.

1 SPI Sistema habilitado.

5

SPTIE

SPI Habilitador de Transmisión de Interrupciones: Este es el bit habilitador de interrupción para el buffer de transmisión SPI vacío (SPTEF).

0 Interrupción desde SPTEF inhibido (use sondeo).

1 Cuando SPTEF es 1, solicita interrupción de hardware.

4

MSTR

Selección de modo Maestro/Esclavo:

0 Módulo SPI configurado como un dispositivo SPI Esclavo.

1 Módulo SPI configurado como un dispositivo SPI Maestro.

3

CPOL

Polaridad del Reloj: Este bit coloca efectivamente un inversor en serie con la señal de reloj desde un SPI maestro o hacia un SPI esclavo.

0 Reloj SPI Alto-activo.

1 Reloj SPI Bajo-activo.

2

CPHA

Fase del Reloj: Este bit selecciona uno de dos formatos de reloj para diferentes tipos de dispositivos periféricos sincronizados.

0 Primer borde en SPSCK se produce en la mitad del primer ciclo de una transferencia de datos de 8 ciclos.

1 Primer borde en SPSCK se produce al inicio del primer ciclo de una transferencia de datos de 8 ciclos.

1

SSOE

Habilitador de salida de Slave Select: Este bit se utiliza en combinación con el bit habilitador de modo de fallo (MODFEN) en SPCR2 y el bit de control te maestro/esclavo (MSTR) para determinar la función del pin (SS) como se muestra en la tabla anexa.
0

LSBFE

Bit menos significativo primero:

0 Transferencia de datos serial SPI inicia con el bit mas significativo.

1 Transferencia de datos serial SPI inicia con el bit menos significativo.


TABLA 1: Función del Pin SS.

FunciondelPinSS.jpg




NOTA: Asegúrese de que la SPI no debe desactivarse (SPE = 0) al mismo tiempo como un cambio de bit para el bit CPHA.


Registro de Control 2 de la SPI (SPIxC2)

Este registro de lectura/escritura incluye la habilitación de control de la SPI y opciones de configuración.

Estructura del Registro SPIxC2


Bits Descripción
4

MODFEN

Habilitador de Función de Fallo en Modo Maestro: cuando el SPI es configurado para modo esclavo, este bit no tiene significado o efecto. (El pin (SS) es la entrada Slave Select) En modo maestro, este bit determina cómo es utilizado el pin (SS). (Tabla 2)

0 Función de modo de fallo deshabilitada, Pin (SS) maestro vuelve a ser un pin de puerto entrada/salida general no controlado por SPI.

1 Función de modo de fallo habilitada, Pin (SS) maestro se comporta como entrada de modo de fallo o salida de Slave Select.

3

BIDIROE

Habilitador de Salida en Modo Bidireccional: Cuando el modo bidireccional está habilitado por el pin de control de la SPI (SPC0 = 1), BIDIROE determina si el driver de dato de salida SPI esta habilitado para el pin de entrada/salida bidireccional simple. Dependiendo de si la SPI esta configurada como maestro o esclavo, este usa el pin MOSI (MOMI) o MISO (SISO), respectivamente, como el pin de entrada/salida de datos SPI simple. Cuando SPC0 = 0, BIDIROE no tiene significado o efecto.

0 Driver de Salida deshabilitado, así, el pin entrada/salida de datos SPI se comporta como una entrada.

1 Pin entrada/salida SPI habilitado como una salida.

1

SPISWAI

SPI Parada en Modo de Espera:

0 SPI Relojes continúan operando en modo de espera.

1 SPI Relojes se detienen cuando la MCU entra en modo de espera.

0

SPC0

SPI Pin de Control 0: el bit SPC0 elige el modo bidireccional de cable simple. Si MSTR = 0 (modo esclavo), la SPI usa el pin MISO (SISO) para la transferencia de datos SPI bidireccional. Si MSTR = 1 (modo maestro), La SPI usa el pin MOSI (MOMI) para la transferencia de datos SPI bidireccional. Cuando SPC0 = 1, BIDIROE es utilizado para habilitar o deshabilitar el driver de salida para el pin entrada/salida SPI bidireccional simple.

0 SPI usa pines separados para el dato de entrada y el dato de salida.

1 SPI configurado para operaciones bidireccionales de cable simple.


Registro de Tasa de Baudios de la SPI (SPIxBR)

Este registro se utiliza para colocar un pre-escalar y un divisor de tasa de bit para un SPI maestro. Este registro puede ser leído o escrito en cualquier momento.

Estructura del Registro SPIxBR


Bits Descripción
6:4

SPPR [2:0]

SPI Divisor de pre-escala de Tasa de Baudios: Este campo de tres bits selecciona uno de ocho divisores para el pre-escalar de Tasa de Baudios SPI. La entrada de este pre-escalar es el reloj de Tasa de bus (BUSCLK). La salida de este pre-escalar dirige la entrada del divisor de Tasa de Baudios SPI.
2:0

SPR [2:0]

SPI Divisor de Tasa de Baudios: Este campo de tres bits selecciona uno de ocho divisores para el divisor de velocidad de transferencia SPI. La entrada a este divisor viene del pre-escalar de Tasa de Baudios SPI. La salida de este divisor es el bit de Tasa de reloj SPI para modo maestro.


Divisor de Tasa Pre-escalar de la SPI
Divisor de Tasa de Baudios de la SPI









Registro de Estados de la SPI (SPIxS)

Este registro tiene tres bits de estado de solo lectura. Los bits 6, 3, 2, 1 y 0 no están implementados y siempre leen Zero. La escritura no tiene ningún significado o efecto.


Estructura del Registro de Estados


Bits Descripción
7

SPRF

SPI Bandera de Buffer de lectura lleno: SPRF es puesto en la complementación de una transferencia para indicar que el dato recibido puede ser leído desde el registro de datos de la SPI (SPIxD). SPRF es limpiado por una lectura SPRF mientras este es colocado, entonces lee el registro de datos de la SPI.

0 No hay dato habilitado en el buffer de dato recibido.

1 Hay dato habilitado en el buffer de dato recibido.

5

SPTEF

SPI Bandera de Buffer de Transmisión vacío: Este bit es encendido cuando hay un espacio en el bus de transmisión de datos. Es limpiado por la lectura SPIxS con SPTEF encendido, seguido por la escritura de un valor de dato en el buffer de trasmisión en SPIxD. SPIxS debe ser leído con SPTEF = 1 antes de la escritura de dato de SPIxD o dicha escritura SPIxD será ignorada. SPTEF genera una solicitud de interrupción de CPU SPTEF si el bit SPTIE en SPIxC1 también esta encendido. SPTEF es automáticamente encendido cuando un byte de dato transfiere desde el buffer de transmisión hasta el registro de corrimiento. Para un idle SPI (sin dato en el buffer de transmisión o el registro de corrimiento y sin ninguna transferencia en proceso), el dato escrito de SPIxD es transferido del corredor inmediatamente, así, SPTEF es encendido entre dos ciclos de bus permitiendo a un segundo valor de dato de 8-bits ser solicitado dentro del buffer de transmisión. Después de completar la transferencia del valor en el registro de corrimiento, el valor solicitado desde el buffer de transmisión será movido automáticamente al corredor y SPTEF será encendido para indicar que hay un espacio para nuevos datos en el buffer de transmisión. Si no hay un nuevo dato esperando en el buffer de transmisión, SPTEF simplemente permanece encendido y no hay movimientos de datos desde el buffer hacia el corredor.

0 Buffer de Transmisión SPI no vacío.

1 Buffer de Transmisión SPI vacío.

4

MODF

Bandera de Fallo en Modo Maestro: MODF es encendido si la SPI es configurada como un maestro y la entrada Slave Select va bajo, indicando que algún otro dispositivo SPI es también como un maestro. El pin (SS) se comporta como una entrada de error en modo de fallo solo cuando MSTR = 1, MODFEN = 1 y SSOE = 0; Por otra parte, MODF nunca será encendido. MODF es limpiado leyendo MODF mientras este es 1, entonces escribe del registro SPI de control 1 (SPIxC1).

0 No hay error en modo de fallo.

1 Error en modo de fallo detectado.


Registro de Datos de la SPI (SPIxD)

Las lecturas de este registro retornan el dato leído desde el buffer de dato recibido. Escrituras de este registro escriben el dato en el buffer de transmisión de dato. Cuando la SPI es configurada como un maestro, escribir datos del buffer de transmisión de datos inicia una transferencia SPI.

El dato no puede ser escrito desde el buffer de transmisión de dato antes de que la bandera de buffer de transmisión SPI vacío (SPTEF) esté encendida, indicando que hay espacio en el buffer de transmisión para solicitar un nuevo byte de transmisión. El dato puede ser leído desde SPIxD en cualquier momento después de que SPRF es encendido y antes de que otra transferencia haya finalizado. Una falla de lectura de dato fuera del buffer de dato recibido antes de que una nueva transferencia finalice causa una recepción de condición de sobrecorrida y el dato desde la nueva transferencia se pierde.

Estructura del Registro SPIxD



Descripción funcional de la SPI

Una transferencia SPI se inicia chequeando si la bandera del buffer de transmisión está vacía (SPTEF = 1) y escribiendo un byte de dato en el registro de datos SPI (SPIxD) en el dispositivo maestro SPI. Cuando el registro de corrimiento SPI está habilitado, este byte de dato se mueve desde el buffer de transmisión de dato al corredor, SPTEF se enciende para indicar que hay un espacio en el buffer para solicitar una transmisión de carácter, si se decide, y la transferencia serial SPI inicia.

Durante la transferencia SPI, el dato es leído en el pin MISO en un ciclo del reloj (SPSCK) y corrido, cambiando el valor del bit en el pin MOSI medio ciclo de reloj después. Después de ocho ciclos de reloj, el dato que estaba en el registro de corrimiento del maestro ha sido corrido fuera del pin MOSI hacia el esclavo mientras los 8-bits de dato fueron corridos en el pin MISO dentro del registro de corrimiento del maestro. Al final de esa transferencia, el byte de dato recibido es movido desde el corredor hacia adentro del buffer de dato recibido y SPRF se enciende para indicar que el dato puede ser leído a través de SPIxD. Si otro byte de dato esta en espera en el buffer de transmisión al final de una transferencia, este es movido hacia adentro del corredor, SPTEF se enciende e inicia una nueva transferencia.

Normalmente, un dato SPI se transfiere con el bit más significativo primero (MSB). Si el modo bit menos significativo primero está habilitado, el bit LSBFE se enciende y el dato SPI es corrido con LSB primero. Cuando la SPI es configurada como esclavo, su pin (SS) debe ser pasado a nivel bajo antes de que una transferencia inicie y el (SS) debe quedarse en dicho nivel a lo largo de la transferencia. Si un formato reloj donde CPHA = 0 es seleccionado, (SS) debe ser llevado a un “1” lógico entre transferencias sucesivas. Si CPHA = 1, (SS) puede permanecer bajo entre transferencias sucesivas. Debido a que el transmisor y el receptor es doble buffereado, un segundo byte, en adición al byte que está siendo corrido, puede ser solicitado dentro del buffer de transmisión de dato y un caracter recibido previamente puede estar en el buffer de dato recibido mientras uno nuevo está siendo corrido dentro del buffer. La bandera SPTEF indica cuándo el buffer de transmisión tiene espacio para un nuevo caracter. La bandera SPRF indica cuándo un caracter recibido esta disponible en el buffer de dato recibido. El caracter recibido debe ser leído fuera del buffer de recepción (leer SPIxD) antes de que la nueva transferencia finalice o se reciba como resultado de error de sobrecorrida. En el caso de recibir un sobre corrimiento, el nuevo dato se pierde debido a que el buffer de recepción todavía contiene el caracter previo y no estaba listo para aceptar un nuevo dato. No hay indicación para tal condición de sobrecorrida, entonces el diseñador del sistema de aplicación debe asegurarse de que el dato previo haya sido leído desde el buffer de recepción antes de que inicie una nueva transferencia.



Formatos del Reloj de la SPI

Para acomodar la variedad de extensión de seriales periféricos síncronos desde diferentes diseños, el sistema SPI tiene un bit de prioridad de reloj (CPOL) y un bit de control de fase del reloj (CPHA) para seleccionar uno de cuatro formatos de reloj para transferencias de datos. CPOL inserta selectivamente un inversor en serie con el reloj. CPHA elige entre dos diferentes relaciones de fases de reloj entre el reloj y el dato.

Formatos del Reloj SPI (CPHA = 1)

La figura que se presenta a continuación muestra los formatos de reloj cuando CPHA = 1. En el top de la figura, los tiempos de 8-bits se muestran para referencia con el bit 1 iniciando en la primera carga de SPSCK y el bit 8 terminando medio ciclo SPSCK después de dieciséis cargas de SPSCK. Las líneas de bit más significativo primero y bit menos significativo primero muestran el orden de bits de dato SPI dependiendo de lo colocado en LSBFE. Ambas variaciones de polaridad de SPSCK se muestran, pero solo una de estas formas de onda es aplicada para una transferencia específica, dependiendo del valor en CPOL. La forma de onda SAMPLE IN se aplica a la entrada MOSI de un esclavo o a la entrada MISO de un maestro. La forma de onda MOSI se aplica al pin de salida MOSI desde un maestro y la forma de onda MISO se aplica a la salida MISO desde un esclavo. La forma de onda (SS) ̅ OUT se aplica a la salida Slave Select desde un maestro (provista por MODFEN y SSOE = 1). La salida (SS) ̅ del maestro pasa de activo a bajo medio ciclo SPSCK antes de iniciar la transferencia y pasa de nuevo a alto al final del tiempo del octavo bit de transferencia. La forma de onda (SS) ̅ IN se aplica a la entrada Slave Select de un esclavo.

Cuando CPHA = 1, el esclavo comienza a conducir su salida MISO cuando (SS) ̅ pasa a activo bajo, pero el dato no esta definido hasta el primer planco de SPSCK. El primer flanco de SPSCK corre el primer bit de dato desde el shifter hacia la salida MOSI del maestro y hacia la salida MISO del esclavo. El siguiente flanco del SPSCK causa que tanto el maestro como el esclavo muestreen el valor del bit de dato en sus entradas MISO y MOSI, respectivamente. En el tercer flanco de SPSCK, el shifter SPI corre una posición de bit, dicho corrimiento influye en el valor del bit que fue muestreado, y corre el segundo valor de bit de dato fuera de otro fin de corrimiento a las salidas MOSI y MISO de maestro y esclavo, respectivamente. Cuando CHPA = 1, la entrada (SS) del esclavo no es requerida para ponerse en su alto nivel inactivo entre transferencias.

Formatos del Reloj SPI (CPHA = 0)

La figura a la derecha muestra los formatos de reloj cuando CPHA = 0. En la parte superior de la figura, los tiempos del bit 8 se muestran para referenciar con un bit el inicio mientras el esclavo es seleccionado ((SS) IN pasa a bajo), y el bit 8 finaliza en el último flanco de SPSCK. Las líneas de bit más significativo primero y de bit menos significativo primero muestran el orden de bits de dato SPI dependiendo de las configuraciones en LSBFE. Ambas variaciones de la polaridad SPSCK son mostrados, pero solo una de estas formas de onda se aplica para una transferencia específica, dependiendo del valor en CPOL. La forma de onda SAMPLE IN se aplica a la entrada MOSI del esclavo o a la entrada MISO del maestro. La forma de onda MOSI se aplica al pin de salida MOSI desde un maestro y la forma de onda MISO se aplica a la salida MISO desde un esclavo. La forma de onda (SS) OUT se aplica a la salida Slave Select desde un maestro (provista por MODFEN y SSOE = 1). La salida (SS) del maestro va a bajo activo al comienzo del primer tiempo de bit de una transferencia y va de vuelta a alto medio ciclo de SPSCK después del final del tiempo del octavo bit de la transferencia. La forma de onda (SS) IN se aplica a la entrada Slave Select del esclavo. Cuando CPHA = 0, el esclavo comienza a conducir su salida MISO con el primer valor de bit de dato (MSB o LSB dependiendo de LSBFE) cuando (SS) cae a bajo activo.el primer flanco de SPSCK causa que, tanto el maestro como el esclavo, muestreen los valores de bit de dato en sus entradas MISO y MOSI, respectivamente. En el segundo flanco de SPSCK, el shifter SPI corre una posición de bit, lo cual, corre en un valor del bit que acababa de ser muestreado y corre el segundo valor de bit de dato fuera de otro fin del shifter a las salidas MOSI y MISO de maestro y esclavo, respectivamente. Cuando CPHA = 0, la entrada de (SS) del esclavo debe ir a inactividad de alto nivel entre transferencias.



Interrupciones de la SPI

Hay tres bits banderas, dos bits mascaras de interrupción y un vector de interrupción asociado con el sistema SPI. La mascara de habilitación de interrupción SPI (SPIE) habilita interrupciones desde la bandera de recepción llena SPI (SPRF) y la bandera de modo de fallo (MODF). La mascara de habilitación de interrupción de transmisión SPI (SPTIE) habilita interrupciones desde la bandera de buffer de transmisión vacío SPI (SPTEF). Cuando uno de los bits bandera y el bit mascara de interrupción asociado a este se encienden, una interrupción de Hardware solicitada es enviada al CPU. Si los bits mascaras de interrupción están limpios, el Software puede hacer encuesta al bit bandera asociado en lugar de utilizar interrupciones. La rutina de servicio de interrupción SPI (ISR) podría chequear los bits bandera para determinar qué evento causó la interrupción. La rutina de servicio podría también limpiar los bits bandera antes de correr desde ISR (usualmente cerca del comienzo de la ISR).



Modo de Detección de Fallos

Un modo de fallo ocurre y la bandera de modo de fallo se enciende cuando un dispositivo maestro SPI detecta un error en el pin (SS) (provisto del pin (SS) configurado como una señal de entrada en modo de fallo). El pin (SS) es configurado para ser una señal de entrada en modo de fallo cuando MSTR = 1, habilitar el modo de fallo es colocar (MODFEN = 1), y salida Slave Select habilitada es limpiar (SSOE = 0) Una característica de detección en modo de fallo puede ser utilizada en un sistema donde más de un dispositivo SPI pudiera convertirse en un maestro al mismo tiempo. El error es detectado cuando un pin (SS) maestro esta en bajo, indicando que algún otro dispositivo SPI está tratando de dirigir a ese maestro como si fuera un esclavo. Esto podría indicar un conflicto de controlador de salida inofensivo, entonces, el modo de fallo lógico es diseñado para deshabilitar todos los controladores de salida SPI cuando algún error es detectado.

Cuando en modo de fallo es detectado, MODF se enciende y MSTR es limpiado para cambiar la configuración SPI de vuelta a modo esclavo. Los controladores de salida en SPSCK, MOSI y MISO (si no están en modo bidireccional) son deshabilitados. MODF es limpiado cuando es leído mientras está encendido, entonces se escribe en el registro de control 1 SPI (SPIxC1). El Software usuario podría verificar si la condición de error ha sido corregida antes de cambiar el SPI de vuelta a modo maestro.



Referencias Consultadas