(SYNCHRONOUS
SERIAL PORT)
INTERFACE
I2C
Interface I2C
I2C en
SSP SSP
nterface
enelelmdulo
mdulo
Es un interface sncrono a 2 hilos pensado para la comunicacin entre C.I. y
desarrollado por Philips Corporation. Es un bus estndar para muchos equipos de
consumo y telecomunicaciones
Las dos lneas de comunicacin corresponden a reloj (SCL) y datos (SDA). Las
transferencias son por tanto semi-dplex.
En el bus debe existir al menos un dispositivo Maestro que genera la seal de reloj
y uno o varios Esclavos que reciben tal seal SCL.
El dispositivo Maestro es el nico que tiene capacidad de iniciar la transferencia,
decidir con quin se realiza, el sentido de la misma (envo o recepcin del Maestro)
y cundo se finaliza
Cada dispositivo esclavo conectado al bus tiene asignada una direccin nica
codificada en 7 ( en 10 bits de manera opcional)
Se admite la presencia de varios Maestros en el bus (sistema multi-Maestro) con
un arbitraje que asegura que en cada instante slo hay uno dominante
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))
Registro de Control
Registro de Control 2
Registro de Estado
Registro de Direccin
Buffer de Transmisin/Recepcin
Registro de Desplazamiento Serie (no accesible)
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
FLAGS en Transmisin
El flag BF (SSPSTAT<0>) es de solo lectura y se pone a 1 cuando se
escribe un byte en SSPBUF, vuelve a 0 cuando hayan sido enviados los 8 bits
El bit WCOL (SSPCON<7>) es de lectura/escritura y se pone a 1 cuando se intenta
escribir en SSPBUF en el transcurso de un envo. Debe ponerse a 0 por software
El bit ACKSTAT (SSPCON2<6>) es de lectura/escritura, se pone a 0 cuando el
esclavo ha enviado un bit de reconocimiento (ACK) y a 1 si no lo ha enviado
FLAGS en Recepcin
El flag BF (SSPSTAT<0>) en recepcin se pone a 1 cuando se carga
SSPBUF desde el registro SSPSR, se pondr a 0 cuando se haya ledo SSPBUF
El bit WCOL (SSPCON<7>) se pone a 1 cuando se intenta escribir en SSPBUF cuando
una recepcin est en curso (SSPBUF no cambia)
El bit SSPOV (SSPCON<6>) en recepcin se pone a 1 cuando se ha completado un dato
en SSPSR y el flag BF est todava a 1 por una recepcin previa
Recepcin
Recepcin
de
de
un
un byte
byte
Recepcin
Recepcin
de
de
otro
otro byte
byte
SDA
SCL
SSPIF
BF
Generacin de STOP
Repeticin de START
Interface I2C
I2C en
SSP SSP
nterface
enelelmdulo
mdulo
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( )
i2c_stop( )
i2c_write( )
i2c_read( )
i2c_poll( )
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
Sec. de Escritura
i2c_start( );
//Se enva bit de START
i2c_write(0xA0);
//Direccin del Esclavo y escritura posterior
i2c_write(hi(direccion));
//Se manda parte alta de una direccin
i2c_write(direccin);
//Se manda parte baja de la direccin
i2c_write(dato);
//Se enva el dato a grabar
i2c_stop( );
//Envo del bit de STOP
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