Professional Documents
Culture Documents
EEPROM serie
De manera adicional, hay un 4 pin que se puede utilizar cuando el microcontrolador se configura como dispositivo Esclavo: Seleccin de Esclavo (SS) Slave Select -> RA5
La inicializacin del Interface SPI se realiza mediante la configuracin de los bits de control SSPCON<5:0> y SSPSTAT<7:6>
Registro de Buffer (lectura/escritura) Entrada serie de bits Salida serie Registro de Desplazamiento de transmisin/recepcin (no accesible)
Seleccin Esclavo
(opcional si es Esclavo)
Reloj
SCK
ESCLAVO SPI
SDI b7 a0 a1 a2 a3 a4 a5 a6 SDO SCK
Reloj
SCK
ESCLAVO SPI
SDI a0 a1 a2 a3 a4 a5 a6 a7 SDO SCK
Reloj
SCK
ESCLAVO SPI
SDI b0 b1 b2 b3 b4 b5 b6 b7 SDO SCK
Reloj
SCK
SSPSR (registro de desplazamiento) enva y recoge los bits simultneamente SSPBUF tiene doble funcin: para cargar el registro SSPSR para envo de datos y para recoger los datos recibidos en SSPSR SSPIF=0 por software SSPBUF SSPBUF b0 b1 b2 b3 b4 b5 b6 b7 SSPSR a4 a5 a6 a7 b0 b1 b2 b3
2.- SSPSR enviando/recibiendo
b0 b1 b2 b3 b4 b5 b6 b7 SSPSR b0 b1 b2 b3 b4 b5 b6 b7
1.- Carga de SSPSR a travs de SSPBUF
SSPBUF b0 b1 b2 b3 b4 b5 b6 b7 SSPSR a0 a1 a2 a3 a4 a5 a6 a7
3.- Completada recepcin/envo
Comunicacin Serie Sncrona
SSPIF=1
SSPBUF
a0 a1 a2 a3 a4 a5 a6 a7 SSPSR a0 a1 a2 a3 a4 a5 a6 a7
4.- SSPSR carga SSPBUF con recepcin
SSPIF = PIR1<3> (Completada transmisin) Lectura/escritura Indica que se ha completado un envo/recepcin en SSPSR Se debe poner a 0 por software, puede generar interrupcin
BF = SSPSTAT<0> (Buffer de recepcin lleno) Slo lectura Se pone a 1 cuando se ha completado la recepcin de un dato se pone a 0 por hardware cuando se lee el registro SSPBUF Se emplear normalmente nicamente en modo de recepcin
WCOL = SSPCON<7> (Colisin de Escritura) Lectura/escritura Indica que se ha intentado escribir en SSPBUF mientras se est transmitiendo un dato previo. Si se da tal situacin, se debe poner a 0 por software
SSPOV = SSPCON<6> (Desbordamiento en Recepcin) Lectura/escritura Indica que se ha recibido un byte nuevo mientras SSPBUF contiene un dato recibido anteriormente no leido. El nuevo dato se pierde y ya no se actualiza SSPBUF. Se pondr a 0 por software
El mdulo SPI puede utilizarse (independientemente de modo Maestro o Esclavo): a) Para envo y recepcin simultnea (SDI y SDO) SSPBUF debe leerse antes de cargarlo con el nuevo dato a enviar b) Slo para enviar datos (SDO) SSPBUF se puede cargar con un nuevo dato nicamente despus de haberse completado el envo del anterior dato Si se pretende cargar un dato en SSPBUF durante una transmisin se produce una colisin y dicha carga ser ignorada c) Slo para recibir datos (SDI) Slo en este caso SSPBUF se utilizara como buffer intermedio de recepcin, se puede iniciar la recepcin de un nuevo dato antes de leer el dato que se acaba de recibir
Antes de cargar un nuevo envo debemos leer recepcin (1) (2) Recepcin dato SSPBUF
b0 b1 b2 b3 b4 b5 b6 b7 SDI SSPSR b0 b1 b2 b3 b4 b5 b6 b7 b) Slo para enviar datos Carga de un dato SSPBUF b0 b1 b2 b3 b4 b5 b6 b7 SSPSR b0 b1 b2 b3 b4 b5 b6 b7 SDO SDO SDI
a0 a1 a2 a3 a4 a5 a6 a7 SSPSR a0 a1 a2 a3 a4 a5 a6 a7 SDO
b0 b1 b2 b3 b4 b5 b6 b7 SSPSR a4 a5 a6 a7 b0 b1 b2 b3 SDO
10
c) Slo para recibir datos Se completa la recepcin de un dato (BF=1) SSPBUF b0 b1 b2 b3 b4 b5 b6 b7 SDI SSPSR b0 b1 b2 b3 b4 b5 b6 b7 No se escribe nada en SSPBUF (slo recibimos) y se inicia una nueva recepcin Se lee el dato recibido (BF=0) SSPBUF b0 b1 b2 b3 b4 b5 b6 b7 SDI SSPSR a4 a5 a6 a7 b0 b1 b2 b3
Si antes de leer el dato anterior se completa la recepcin de un nuevo dato, se perdera el dato previamente recibido, se da error de OVERFLOW (SSPOV=1). Este error slo es posible si el dispositivo es ESCLAVO
Comunicacin Serie Sncrona
Un microcontrolador MAESTRO inicia una nueva transferencia cargando el dato en SSPBUF ATE-Universidad de Oviedo-Fernando Nuo
11
ESPECIFICACIN DEL MODO SPI EN LA INICIALIZACIN * Modo de funcionamiento: * Polaridad del Reloj: Maestro (SCK salida) o Esclavo (SCK entrada) Estado Inactivo del Reloj (SCK) a 1 a 0
* Flancos activos del Reloj: Salida de bits en flancos de subida o bajada en SCK * Muestreo bits de datos: * Frecuencia de Reloj: * Modo de Seleccin: Muestreo de entrada en el centro o al final del bit SLO SI ES MAESTRO, frecuencia en salida SCK SLO SI ES ESCLAVO - Control externo de SDI y SDO con entrada SS - Sin control externo con pin SS
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo
12
El dispositivo Maestro inicia la transferencia enviando la seal de reloj SCK, los datos salen en los flancos programados y se capturan las entradas en el momento indicado con el bit SMP si es Maestro.
Ejemplo de Conexin Los dos dispositivos deben ser programados con la misma POLARIDAD DE RELOJ para que reciban y emitan a la vez
Comunicacin Serie Sncrona 13
HABILITACIN DE LOS PINES DE ENTRADA/SALIDA de SSP Para habilitar el mdulo SSP, es necesario que el bit SSPEN se encuentre a 1. Si se desea resetear el mdulo SSP, se debe poner a 0 este bit y luego volverlo a 1 Para que la funcionalidad de los pines SDI, SDO, SCK y /SS sea la determinada por los bits de configuracin, es necesario adems que los bits de direccin de datos (en TRISA y en TRISC) tengan la direccin adecuada: SDI (RC4) debe tener TRISC<4> = 1 para ser entrada de datos SDO (RC5) debe tener TRISC<5> = 0 para que sea salida de datos SCK (RC3) debe tener TRISC<3> = 0 si el microcontrolador es MAESTRO y TRSC<3> = 1 si se define como ESCLAVO /SS (RA5) debe ser TRISA<5> = 1 si es ESCLAVO y tiene control externo Cualquier funcin no deseada en el puerto serie puede ser omitida si en el registro de direccin de datos (TRIS) se configura el valor opuesto
P.ej.: Si en modo Maestro slo se van a enviar datos, SDI puede usarse como una salida de propsito general del microcontrolador cargando TRISC<4>=0
ATE-Universidad de Oviedo-Fernando Nuo
14
Funcionamiento como MAESTRO El Maestro puede iniciar la transferencia en cualquier momento puesto que controla la lnea SCK. El protocolo software determinar cundo el Esclavo est en condiciones de enviar datos. En modo Maestro, la transmisin/recepcin se inicia tan pronto como se escribe en el registro SSPBUF. Si se desea slo recibir, la lnea SDO puede desactivarse definindola como entrada, los datos presentes en la lnea SDI irn entrando al registro SSPSR a la velocidad marcada por el reloj de transferencia La velocidad de transferencia del modo SPI es programable entre los valores: Fosc/4 Fosc/16 Fosc/64 Frecuencia de Salida de TMR2/2 siendo por tanto la mxima velocidad de transferencia: 5Mbps (con Fosc=20MHz) La polaridad del reloj y los flancos activos se configuran con los bits CKP y CKE
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo
15
Escritura en SSPBUF
Funcionamiento como ESCLAVO sin Seleccin Externa Para el esclavo, el dato es transmitido/recibido cuando aparecen los pulsos en la entrada SCK Cuando el ltimo bit termina de ser muestreado, el flag SSPIF se pone a uno La polaridad del reloj y los flancos activos se configuran con los bits CKP y CKE El muestreo de los bits de datos se realiza siempre en la mitad de un bit en el modo Esclavo (SMP=0 siempre en modo Esclavo) La seal de reloj debe cumplir las especificaciones mnimas de tiempos mnimos en los estados alto y bajo En modo de bajo consumo (SLEEP) el Esclavo puede transmitir y recibir datos puesto que el registro de desplazamiento es asncrono con el oscilador. Al completar una transferencia de un byte, el dispositivo podra despertarse si se encontraba dormido
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo
17
CKE=0
F.subida F.bajada
Muestreo siempre con SMP=0 (en mitad del bit) con el flanco opuesto al de salida de los datos
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo
18
Funcionamiento como ESCLAVO con Seleccin Externa El pin /SS (nivel activo bajo) permite la conexin de varios esclavos con un Maestro, habilitando en cada instante nicamente la transferencia con un Esclavo El dispositivo Maestro debe seleccionar para la transferencia nicamente uno de los Esclavos mediante la activacin de la seal /SS (a cero) del elegido, permaneciendo el resto en estado alto Se debe configurar el modo SSP Esclavo con SSPCON<3:0> = 0100 y adems definir el pin /SS/RA5 como entrada con TRISA<5>=1 Cuando /SS est a 0, se permite transmisin/recepcin y el pin SDO se maneja internamente por parte del registro dedesplazamiento Si el pin /SS est a 1, el pin SDO se sita en alta impedancia respecto al registro de desplazamiento (podran necesitarse resistencias de polarizacin). Adems, con /SS a 1 (Vdd) el mdulo SPI permanecer reseteado igual que si SSPEN=0 y el contador de bits entrantes permanecer a cero
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo
19
Muestreo siempre con SMP=0 (en mitad del bit) con el flanco opuesto al de salida de los datos
Comunicacin Serie Sncrona 20
Interface SPI: Posibilidades de conexin A).- Un Maestro y un Esclavo con conexin a 3 hilos, SDO MAESTRO SDI 3 hilos SCK SDI SDO ESCLAVO SCK
Transmisin/recepcin simultnea B).- Un Maestro y un Esclavo con conexin a 2 hilos, SDO MAESTRO SDI SCK 2 hilos SDI SDO ESCLAVO SCK Conflicto en las Salidas !
21
B).- Un Maestro y un Esclavo con conexin a 2 hilos SDO MAESTRO SDI SCK 2 hilos SDI
Slo puede haber una salida activa, el receptor anula su salida de datos SDO por software mediante el registro de direccin de datos (TRISC<5>=1 define SDO como entrada) Estado1: Maestro emite (y recibe lo mismo que est emitiendo), Esclavo recibe SDO
(TRISC<5>=0)
MAESTRO
SDI SCK
ESCLAVO
22
B).- Un Maestro y un Esclavo con conexin a 2 hilos, SDO MAESTRO SDI SCK 2 hilos SDI
Slo puede haber una salida activa, el receptor anula su salida de datos SDO por software mediante el registro de direccin de datos (TRISC<5>=1 define SDO como entrada) Estado 2: Maestro recibe, Esclavo emite (y recibe lo mismo que est emitiendo) SDI
(TRISC<5>=1)
MAESTRO
SDI SCK
2 hilos
(TRISC<5>=0)
23
SDO SCK
SDI
SCK SDI
SCK ......
SDI
SCK ESCLAVO n
MAESTRO
ESCLAVO 1
ESCLAVO 2
SDI
SDO
SDO
SDO
No sera necesario el control de la seleccin del esclavo, todos tendran la entrada de datos activa
24
SDO SCK
SDI
SCK SDI
SCK ......
SDI
SCK ESCLAVO n
MAESTRO
ESCLAVO 1
ESCLAVO 2
SDI
SDO /SS
SDO /SS
SDO /SS
PORT?
. . .
Slo un Esclavo Seleccionado que maneja la lnea SDO y que recibe por SDI (/SS=0, resto /SS=1)
25
COMUNICACIN SPI en C (compiladores de CCS) Existen 4 funciones asociadas con el mdulo SPI, pero todas ellas son utilizables nicamente si el microcontrolador seleccionado dispone de mdulo hardware SSP. No existe implementacin software del mdulo SPI Communications El asistente de C permite configurar: si el micro va a ser dispositivo Maestro o Esclavo, los flancos de transferencia, la frecuencia del reloj que se va a utilizar en el supuesto de que sea dispositivo Maestro y el empleo o no del pin de seleccin si se trata de un dispositivo Esclavo Tiene efecto en la funcin setup_SPI( )
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo
26
Las Funciones Integradas para la Comunicacin mediante SPI setup_SPI(modos) Esta funcin sirve para inicializar y configurar el Interface de Puerto Serie (SPI) ya que define el modo de trabajo de esta comunicacin. Al contrario que la comunicacin serie asncrona, aqu no hay directiva de configuracin. En el fichero de cabeceras del dispositivo microcontrolador (.h) estn definidas una serie de etiquetas que estn asociadas a los modos de funcionamiento y que se separan en 3 grupos: a) Modo: SPI_MASTER SPI_SLAVE b) Flanco: SPI_L_TO_H SPI_H_TO_L c) Frecuencia: SPI_CLK_DIV_4 SPI_CLK_DIV_64 SPI_SS_DISABLED SPI_CLK_DIV_16 SPI_CLK_T2
Las etiquetas anteriores se enlazan mediante el operador OR (|): p.e.: setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo
27
spi_write()
-> spi_write(caracter)
Esta funcin se utilizar si el dispositivo es Maestro y originar que se generen los correspondientes 8 flancos en la seal de reloj saliente spi_read() -> valor=spi_read(dato)
Esta funcin tiene distinto efecto en funcin de que el dispositivo sea Maestro o Esclavo en SPI. La funcin devuelve un dato ledo a travs del SPI y puede llevar un dato como parmetro o no. Si el dispositivo es Maestro SPI, se puede realizar una llamada a la funcin SPI_WRITE(dato) [con el dato a enviar] y despus una llamada con SPI_READ() [sin parmetro] o bien una llamada del tipo SPI_READ(dato). En ambos casos el efecto ser el mismo, se coloca el dato en SSPSR y se generan 8 flancos en la seal de reloj Si el dispositivo acta como Esclavo, cargar el dato en el registro de salida y esperar por la llegada de los flancos en la entrada de reloj
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo
28
spi_data_is_in()
Esta funcin devuelve TRUE si se ha recibido un dato a travs del SPI Ejemplos de las funciones para SPI: spi_write(dato_salida); dato_entrada = spi_read( ); Equivale a dato_entrada = spi_read(dato_salida); Otros ejemplos: if(spi_data_is_in( )) dato=spi_read( ); while (!spi_data_is_in( )); //Esperamos a que llegue un dato dato_entrante = spi_read( );
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo
29
30
31
BUS I2C
MAESTRO
(direccin n1)
ESCLAVO
(direccin ni)
MAESTRO o ESCLAVO
(direccin n2)
ESCLAVO
Es posible que un Maestro tras perder el control del bus en un arbitraje pase a ser Esclavo
(direccin n3)
ESCLAVO
32
Resistencias de polarizacin
Las etapas de Salida deben ser de Drenador abierto (para que exista wire-and) sin conflicto en las salidas
Lnea de Datos (SDA) Lnea de Reloj (SCL)
ESCLAVO
ESCLAVO
MAESTRO/ESCLAVO
MAESTRO/ESCLAVO
33
ESTADOS EN EL BUS I2C: Inicio y Final de transferencia En el ESTADO INACTIVO, las lneas SDA y SCL se encuentran a 1: los transistores de las etapas de salida de todos los dispositivos se encuentran en corte El INICIO de transferencia se produce cuando aparece una transicin de 1 a 0 en la lnea SDA mantenindose la lnea de reloj SCL a 1 SDA SCL 1 1 Inicio de transferencia (START) 0
Bus Inactivo El FIN de transferencia es por transicin de 0 a 1 en SDA cuando SCL est a 1 En una transmisin, SDA slo puede cambiar cuando SCL=0 si no, se interpretara como START STOP
Comunicacin Serie Sncrona
SDA SCL
0 1
Bus Activo
t
34
35
Cuando un Maestro decide iniciar una transferencia, enva primero la direccin del dispositivo con el que quiere hablar. Todos los dispositivos escuchan para determinar si la direccin colocada en el bus es la suya. Acompaando a la direccin aparece un bit R/W que indica al esclavo destinatario si el Maestro quiere leer (recibir si R/W=1) del Esclavo o si el Maestro quiere escribir (enviar si R/W=0) en el Esclavo. El Maestro y el Esclavo direccionado se deben encontrarse siempre en estados opuestos: Maestro emite / Esclavo recibe Maestro recibe / Esclavo emite En cualquiera de los casos, el Maestro ser el que genere la seal de reloj en SCL Si hay ms de un Maestro en el bus, se debe producir un arbitraje cuando SCL=1: el Maestro que enva un 1 y detecta un 0 en la lnea SDA pierde en el arbitraje y desactiva su salida de datos (aunque podra seguir generando flancos en la lnea SCL hasta que finalizara el envo del byte donde perdi el control del bus)
36
Direccionamiento de Dispositivos en el bus I2C Hay dos formatos de direccionamiento posibles (se elige uno): a) Formato de 7 bits: (A7-A6-...-A1) Lo pone el Maestro En SDA: Start S Reconocimiento (lo debe poner el Esclavo)
b) Formato de 10 bits: (A9-A8-A7-...-A0) Primer byte del Maestro En SDA: Start S 1 1 1 1 0 A9 A8 2 byte del Maestro
R ACK A7 A6 A5 A4 A3 A2 A1 A0 ACK S W Reconocimientos del Esclavo despus de cada byte del Maestro
Lectura o Escritura
37
Reconocimiento de Transferencia (ACK) Los datos se transmiten en paquetes de 8 bits (bytes), no hay lmite en cuanto a nmero de bytes, pero despus de cada byte se debe intercalar un bit de reconocimiento (ACK) por parte del dispositivo receptor Si es el Esclavo el receptor y no genera el bit de reconocimiento despus de cada byte, el Maestro debe abortar la transferencia generando un bit de fin (STOP) Dado que las etapas de salida son de drenador abierto, los niveles lgicos 0 son dominantes en las lneas, por tanto el Esclavo debe dejar su salida SDA a 1 para que el Maestro pueda generar el STOP (paso de 0 a 1 con SCL=1) Si el dispositivo Maestro es el receptor, genera un ACK tras cada byte recibido, permitiendo al Esclavo que contine enviando bytes. Si el Maestro decide finalizar la transferencia, genera un bit de STOP en lugar de colocar un bit de reconocimiento Si el Esclavo necesita retardar el envo del siguiente byte (porque no lo tiene todava disponible, p.e.), puede situar la lnea SCL en estado bajo y forzar al Maestro a situarse en un estado de Espera puesto que no se podran generar flancos en SCL
38
Salida de datos del transmisor Salida del receptor Reloj del Maestro
CRONOGRAMAS
Introduciendo espera
39
SDA: S
R/W
Dato
Dato
A/A
Secuencia de Recepcin del Maestro S S Direccin del Esclavo R/W A Dato A Dato A P
40
Repeticin de START (Sr) Si un dispositivo Maestro no desea abandonar el bus tras una transferencia, en lugar de generar un bit de STOP y volver a generar el nuevo START, puede generar una Repeticin de START (Sr) La Repeticin de START es idntica a la condicin de START (SDA pasa de 1 a 0 con SCL en estado alto) pero se produce tras un pulso de reconocimiento de bus (ACK) y no desde un estado inactivo
41
42
Mdulo MSSP I2C Implementa todas las funciones del Maestro y del Esclavo en un bus I2C por hardware Permite detectar las condiciones START y STOP en el bus por interrupcin Permite emplear direcciones de 7 de 10 bits como Esclavo Se puede seleccionar uno de los siguientes modos de operacin: - Esclavo I2C con direccin de 7 bits - Esclavo I2C con direccin de 10 bits - Maestro I2C con reloj SCL de frecuencia = Fosc/(4*(SSPADD+1)) El mdulo MSSP dispone de 6 registros asociados: SSPCON SSPCON2 SSPSTAT SSPADD SSPBUF SSPSR
Comunicacin Serie Sncrona
Registro de Control Registro de Control 2 Registro de Estado Registro de Direccin Buffer de Transmisin/Recepcin Registro de Desplazamiento Serie (no accesible)
ATE-Universidad de Oviedo-Fernando Nuo
43
Buffer para envo y recepcin Registro de E/S no accesible directamente Direccin asignada al Esclavo
44
Mdulo MSSP I2C: Diagrama de Bloques en MODO MAESTRO Para clculo de frecuencia
Buffer
45
Mdulo MSSP I2C: MODO MAESTRO En modo Maestro, las lneas SDA y SCL son manejadas por el hardware del mdulo MSSP, no es necesario definir su direccin en TRISC Se dispone de circuitos lgicos para deteccin de START (S) y STOP (P) y su aparicin queda reflejada en los bits S y P de SSPSTAT. Estos bits son de slo lectura y quedan a cero tras un reset o cuando el mdulo MSSP est desactivado El flag SSPIF que permite interrupciones es sensible a los siguientes eventos: - Condicin de START - Transferencia de un byte - START repetido - Condicin de STOP - Transmisin de ACK
En buses multi-Maestro, el control del mismo slo puede intentarse cuando el bit P est a 1 cuando el bus est inactivo (S y P a 0). En este caso, la lnea SDA ser monitorizada para el arbitraje y comprobar si el nivel presente coincide con el nivel esperado y propuesto por el propio Maestro, esta verificacin la realiza el hardware y el resultado queda reflejado en el bit de flag de colisiones BCLIF (PIR2<3>) si hay discrepancia y podra generar interrupcin (su mscara es BCLIE = PIE2<3>).
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo
46
Se emplean los 7 bits menos significativos del registro SSPADD. En modo Maestro BRG se actualiza automticamente con el cambio en SSPADD, pero en un bus multiMaestro, se carga cuando SCL pasa de 0 a estado alto
47
48
49
50
COMUNICACIN I2C en C (compiladores de CCS) La implementacin de una comunicacin mediante bus I2C puede realizarse por hardware (mediante el mdulo interno SSP) o por software. El modo Esclavo slo debe utilizarse con el hardware del SSP. El funcionamiento en modo Maestro se implementa por software salvo que se le indique lo contrario con una de las opciones (NOFORCE_SW) de la directiva #USE I2C El asistente de C permite configurar los pines que se van a utilizar en la transferencia e inicia la directiva #USE I2C que se emplea para configurar totalmente este tipo de transferencia: MASTER SLAVE SCL=pin SDA=pin
Comunicacin Serie Sncrona
activa modo Maestro activa modo Esclavo especifica el pin de reloj (pin es direccin SCL=PIN_B1) seala el pin de datos
ATE-Universidad de Oviedo-Fernando Nuo
51
ADDRESS=nn si el dispositivo es Esclavo se le asigna esta direccin FAST SLOW emplea la especificacin fast del I2C emplea especificacin slow
Ejemplo:
#USE I2C(SLAVE, SDA=PIN_C4, SCL=PIN_C3, ADDRESS=0xA0, NOFORCE_SW)
La directiva citada tiene efecto sobre las siguientes funciones integradas de C: i2c_start( ) generacin de condicin de START i2c_stop( ) generacin de condicin de STOP i2c_write( ) escritura de un byte i2c_read( ) lectura de un byte i2c_poll( )
Comunicacin Serie Sncrona
52
Las Funciones Integradas para la Comunicacin mediante I2C I2C_start( ) Esta funcin sirve para generar un bit de START en el bus cuando el dispositivo es Maestro.Tras generar el bit de START en I2C, la lnea de reloj SCL se mantiene en estado bajo hasta que se llame a la funcin I2C_WRITE( ). Si se llama a esta funcin antes de que se llame a la funcin I2C_stop( ), se genera una condicin de repeticin START (Restart) I2C_stop( ) Genera un bit de STOP en el bus I2C si el dispositivo es Maestro I2C_write( ) -> I2C_write(dato)
Enva un byte a travs del bus. Si el dispositivo es Maestro, generar los flancos en la lnea de reloj SCL, si es Esclavo esperar por la aparicin de dichos flancos. La funcin devuelve el bit de ACK (0 si hubo seal de reconocimiento y 1 si no la hubo)
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo
53
I2C_read( )
-> dato=I2C_read( )
o bien
dato=I2C_read(ack)
Esta funcin sirve para leer un byte a travs del bus I2C. En modo Maestro, se generarn los flancos en la seal de reloj (SCL) y en modo Esclavo esperar por la aparicin de los mismos. No existe lmite de tiempo de espera como Esclavo, se deber usar la funcin I2C_poll( ) para evitar el bloqueo del dispositivo. El ack es opcional y puede ser 1 (hay reconocimiento, que es la opcin por defecto) 0 (no hay reconocimiento) I2C_poll( ) Esta funcin slo puede utilizarse si el dispositivo dispone de mdulo SSP y est implementado el bus I2C con su empleo. Esta funcin devuelve TRUE si se ha recibido un byte y ste est disponible en el buffer. Si se devuelve TRUE, la llamada a la funcin I2C_read( ) devuelve de manera inmediata el byte recibido.
54
Ejemplos: #USE I2C(MASTER, SDA=PIN_C4, SCL=PIN_C3) //Dispositivo Maestro i2c_start( ); //Se enva bit de START i2c_write(0xA1); //Direccin del Esclavo y peticin de lectura dato_1=i2c_read( ); //Se generan flancos y se lee un dato dato_2=i2c_read( 0 ); //se lee el siguiente dato y se enva NO ACK i2c_stop( ); //Se manda bit de STOP Secuencia Lectura Sec. de Escritura i2c_start( ); i2c_write(0xA0); i2c_write(hi(direccion)); i2c_write(direccin); i2c_write(dato); i2c_stop( ); //Se enva bit de START //Direccin del Esclavo y escritura posterior //Se manda parte alta de una direccin //Se manda parte baja de la direccin //Se enva el dato a grabar //Envo del bit de STOP
55
Un ejemplo como esclavo: #use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, address=0xA0) contador=0; while (contador<10) { while(!i2c_poll( )); buffer[contador++]=i2c_read( ); } //Espera y recibe 10 bytes como dispositivo esclavo Otro ejemplo: #use i2c(MASTER, SDA=PIN_C4, SCL=PIN_C3) long comando; i2c_start( ); //generacin de START i2c_write(0xA0); //Direccin de dispositivo y escritura i2c_write(comando>>8); //envo de parte alta de comando i2c_write(comando); //envo de parte baja i2c_stop( ); //envo de bit de STOP
Comunicacin Serie Sncrona
ATE-Universidad de Oviedo-Fernando Nuo
56
57