TEMA EL BUS I 2 C (Inter Integrated Circuit Bus) I2C EN C

Tamaño: px
Comenzar la demostración a partir de la página:

Download "TEMA 20.0. EL BUS I 2 C (Inter Integrated Circuit Bus) I2C EN C"

Transcripción

1 TEMA 20.0 EL BUS I 2 C (Inter Integrated Circuit Bus) I2C EN C

2 La comunicación n serie en los PIC 16F87X Los microcontroladores PIC de la familia 16F78x, tienen la posibilidad de comunicación serie, las dos posibilidades que posee son: Puerto Serie Síncrono Master (MSSP) con: SPI (Interfaz Serie de Periféricos) desarrollada por Motorola, y que permite comunicación maestro-esclavo entre microcontroladores, y en modo FULL-DUPLEX y I 2 C (Interfaz Inter Circuitos) desarrollada por Philips, que permite la comunicación entre micrcontroladores y periféricos en modo HALF-DUPLEX CCFF DPE MÓDULO DE PROYECTOS 2

3 Universal Síncrono Asíncrono Receptor Tranmisor(USART) La USART también es conocida como SCI (Interfaz de Comunicación Serie) los modos de comunicación que permite son: Asíncrono (full-duplex) Síncrono (modo (half-duplex) En este capítulo nos centraremos exclusivamente en la comunicación con el bus I 2 C. CCFF DPE MÓDULO DE PROYECTOS 3

4 El Bus I 2 C El bus I 2 C, es un bus serie formado por 2 hilos SDA (Serial Data) o línea de transferencia de datos. SCL(Serial Clock) ó línea de reloj para la sincronización de datos. Además dispondremos de una línea de referencia (masa) CCFF DPE MÓDULO DE PROYECTOS 4

5 Tanto SDA como SCL, son líneas en colector o drenador abierto, que permiten formar una estructura de AND CABLEADA. Para que en reposo se encuentren a nivel alto se conectan a alimentación mediante unas resistencias de PULL-UP. La etapa de salida típica de los dispositivos I 2 C es: CCFF DPE MÓDULO DE PROYECTOS 5

6 Analicemos el anterior circuito: Si cualquiera de los transistores de salida se encuentra en saturación, provoca un nivel bajo en la línea, independientemente del estado del resto de los transistores. Si un transistor se encuentra al corte, el estado de la línea solo lo estará si además el resto de transistores también lo están. Por lo tanto en reposo las líneas se encontrarán a nivel alto. El número de dispositivos conectados al bus viene limitado por la capacidad máxima admitida en el bus que es de 400pf, y por la capacidad de direccionamiento del master (7 ó 10 bits). Por su parte el valor de Rp depende de la tensión de alimentación, de la capacidad del bus, de la velocidad de transmisión y del número de dispositivos conectados, los valores típicos están entre 2K2 y 4K7. CCFF DPE MÓDULO DE PROYECTOS 6

7 CCFF DPE MÓDULO DE PROYECTOS 7

8 En cuanto a las velocidades de transferencia de datos, son: Modo estándar: Velocidad máxima 100Kbits/segundo Modo rápido (fast mode): máximo 400Kbits/s Modo alto (fast mode plus): hasta 3.4 Mbits/s En cuanto a los dispositivos conectados al bus I 2 C, estos pueden ser Maestros o esclavos, pasamos a definir lo que significan estos términos: Maestro (Master): Dispositivo que determina la temporización y la dirección del tráfico en el bus. Es el único que aplica los pulsos de reloj en la línea SCL. Cuando se conectan varios dispositivos maestros a un mismo bus, la configuración se denomina multi maestro CCFF DPE MÓDULO DE PROYECTOS 8

9 Esclavo (Slave): cualquier dispositivo conectado al bus incapaz de generar los pulsos de reloj; reciben señales de comando, de datos y de reloj provenientes de un maestro, también pueden enviar datos al maestro, pero siempre baja petición y sincronizados por el reloj que pone el maestro. Dirección: Cada uno los dispositivos conectados al bus, dispone de una dirección que es única dentro de cada bus, viene preestablecida por el fabricante del dispositivo. Hay dispositivos que permiten establecer externamente parte de la dirección de acceso, así se pueden conectar en un mismo bus varios elementos sin problemas de identificación. La dirección 00 es la denominada de acceso general por la cual responden todos los dispositivos conectados al bus. CCFF DPE MÓDULO DE PROYECTOS 9

10 Seguidamente damos parte de las características de una memoria I2c de microchip en las cuales podemos ver lo especificado anteriormente: CCFF DPE MÓDULO DE PROYECTOS 10

11 CCFF DPE MÓDULO DE PROYECTOS 11

12 CCFF DPE MÓDULO DE PROYECTOS 12

13 CCFF DPE MÓDULO DE PROYECTOS 13

14 Bus desocupado: Estado en el cual ambas líneas (SDA y SCL) están inactivas, presentando un estado lógico alto. Únicamente en este momento es cuando un dispositivo maestro puede comenzar a utilizar el bus. Comienzo Start: La condición de START (comienzo) es una transición de de un nivel alto a un nivel bajo en la línea SDA mientras la línea SCL se encuentra a nivel alto Parada stop: Un dispositivo maestro que genera esta condición, deja el bus libre, y sucede cuando se produce una transición de un nivel alto a un nivel bajo en la línea SDA mientras SCL está a nivel alto. CCFF DPE MÓDULO DE PROYECTOS 14

15 Dato válido v en la línea l SDA: Los datos en la línea SDA deben ser estables durante el periodo en alto de la señal de reloj SCL, pudiendo cambiar solo cuando el reloj se encuentre a nivel bajo: CCFF DPE MÓDULO DE PROYECTOS 15

16 Formato de datos Formato de datos: Los datos que se transmiten a través de este bus constan de 8 bits (1 byte). A cada byte le sigue un noveno pulso de reloj durante el cual el dispositivo receptor del byte debe generar un pulso de reconocimiento ACK, (ACKnoledge). Esto lo logra el receptor situando la línea de datos a nivel bajo mientras transcurre el noveno pulsos de reloj. CCFF DPE MÓDULO DE PROYECTOS 16

17 Lectura/Escritura (bit( R/W#): Cada dispositivo dispone de una dirección de 7 bits (en algunos casos 10). Si estamos en el primer caso (7 bits) cada vez que un maestro direcciona un dispositivo, se envían 8 bits, los 7 primeros se corresponden con la dirección del dispositivo mientras que el octavo indica el tipo de operación a efectuar sobre el dispositivo, si este octavo bit es 1 indica que el maestro quiere leer información, mientras que si es 0 indicará que va a proceder a escribir sobre el dispositivo. CCFF DPE MÓDULO DE PROYECTOS 17

18 Direcciones de 7 y 10 bits: Direcciones de 7 y 10 bits: Como ya se ha indicado los dispositivos pueden direccionarse con 7 ó 10 bits; el formato de ambos casos es el siguiente: CCFF DPE MÓDULO DE PROYECTOS 18

19 En el caso de direccionar con 7 bits solo se envía a un byte, y solo se recibirá un ACK# por parte de uno de los esclavos. En el caso de direcciones de 10 bits, se deberán n enviar 2 bytes; el primer byte suministrado por el maestro (el MSB) contendrá la señal de Start,, el número n binario los bits de dirección A9 y A8, la orden de lectura/escritura# Mas de un dispositivo puede responder a la llamada del maestro CCFF DPE MÓDULO DE PROYECTOS 19

20 El segundo byte contendrá los bits de dirección n A7 A0 ; Solo uno de los esclavos devolverá la señal de reconocimiento En ambos casos si el maestro no recibe la señal de reconocimiento ACK#, la comunicación n se interrumpe, generando una señal de STOP. CCFF DPE MÓDULO DE PROYECTOS 20

21 El maestro puede recibir datos desde el esclavo, en este caso es él l el que genera la señal de reconocimiento ACK# cada vez que recibe un byte, menos para el último, en este caso el el esclavo libera la línea l SDA, y el maestro genera un STOP. También n existe la posibilidad de que el master tras una transmisión n o recepción, no libere el bus y siga en comunicación con el esclavo, para ello genera una nueva condición n de START, llamada start REPETIDA (Sr( Sr), idéntica a la anterior pero después s de un pulso de reconocimiento. CCFF DPE MÓDULO DE PROYECTOS 21

22 I2C en C El compilador CCS, posee una directiva y varias funciones ya construidas, que nos permiten el uso del módulo m I2C: CCFF DPE MÓDULO DE PROYECTOS 22

23 DIRECTIVA #USE I2C (OPCIONES) Esta directiva configurará el modo de funcionamiento del módulo I2C. Las opciones son: MASTER: SLAVE: ADDRES=nn SCL=pin: SDA=pin: FAST SLOW Establece el modo maestro Establece el modo esclavo Especifica la dirección n en modo esclavo Especifica el pin SCL Especifica el pin SDA Utiliza velocidad alta Utiliza velocidad baja Reinicia el perro guardián n mientras espera una lectura Utiliza las funciones I2C hardware RESTART_WDT: Reinicia el perro guardi FORCE_HW: CCFF DPE MÓDULO DE PROYECTOS 23

24 Tenga en cuenta que se utilizan funciones software, a nos ser que se utilice la opción FORCE_HW El modo esclavo solo puede ser usado con el módulo m físico f SSP De todos modos, todas las opciones pueden ser generadas en CCS utilizando PIC WIZAR: CCFF DPE MÓDULO DE PROYECTOS 24

25 CCFF DPE MÓDULO DE PROYECTOS 25

26 Por su parte, las funciones que incorpora el compilador y que podemos visualizar en el help son: i2c_start( ); i2c_stop( ); i2c_write; i2c_read( ); i2c_poll ( ); i2c_isr_state ( ) CCFF DPE MÓDULO DE PROYECTOS 26

27 I2C_START( ): En modo master, inicializa la transmisión, n, después s de la condición n de start,, el reloj es puesto a nivel bajo hasta que se llama a la función n I2C_WRITE ( ); Si se llama a otra función n i2c_start start( ( ) antes de utilizar la función I2C_STOP, se está generando un START REPETIDO (Sr( Sr). I2C_STOP( ): Finaliza la transmisión CCFF DPE MÓDULO DE PROYECTOS 27

28 I2C_WRITE( dato): Dato es un entero de 8 bits que se envía a por el bus. ( el 0 indica el sentido) CCFF DPE MÓDULO DE PROYECTOS 28

29 En modo master, esta función n genera la señal de reloj, en modo esclavo espera la señal de reloj que será puesta por el maestro. Esta función n retorna el bir ACK que envía a el receptor cuando la transmisión n ha terminado: ACK = 0 indica reconocimiento, ACK = 1 indicará no reconocimiento. El bit LSB del primer dato transmitido, tras un START indicará el sentido de la transmisión, n, si el bit es 0, la información n irá del maestro al esclavo, si es 1 al contrario (mirar( transparencia anterior). CCFF DPE MÓDULO DE PROYECTOS 29

30 dato = I2C_READ( ) ó I2C_READ(ACK ): Dato es un entero de 8 bits que es leído del bus. ACK por defecto es 1 indica ACK, 0 indica no ACK CCFF DPE MÓDULO DE PROYECTOS 30

31 No existe timeout, por lo que se utiliza junto con I2C_POLL( ) para evitar bloqueos. El perro guardián se puede resetear mientras se espera para leer el dato, para ello se debe seleccionar en la directiva #use i2c (opciones). dato = I2C_READ( ): Dato es un entero de 8 bits que se es leído del bus. (el( 1 indica el sentido de la transmisión) CCFF DPE MÓDULO DE PROYECTOS 31

32 I2C_POLL( ): CCFF DPE MÓDULO DE PROYECTOS 32

33 I2C_POLL( ); se utiliza solo si el pic tiene módulo m ssp. Devuelve un TRUE (1) si se ha recibido el dato en el buffer y un FALSE (0) si no se ha recibido. i2c_start(); // condición de start i2c_write(0xc1); // Direccion del dispositivo a leer count=0; //variable que indica el número de bytes a leer while(count!=4) { //queremos recibir 4 bytes while(!i2c_poll()) ; //esperamos a leer 1 byte buffer[count++]= i2c_read(); //guardamos el byte } i2c_stop(); // Stop condition CCFF DPE MÓDULO DE PROYECTOS 33

34 I2C_ISR_STATE( ): CCFF DPE MÓDULO DE PROYECTOS 34

35 ESTADO = I2C_ISR_STATE( );; se utiliza solo si el pic tiene módulo ssp.. Devuelve el estado del bus en modo esclavo después s de una interrupción. n. Estado es un entero de 8 bits, su significado es: 0 dirección n coincidente con un R/W a cero 1-0x7F el master ha escrito un dato, se debe utilizar I2C_READ() 0X80 indica dirección n coincidente con un R/W a uno, responder con un I2C_WRITE(). 0X81-0xFF 0xFF transmisión n terminada y reconocida se responde con un I2C_WRITE() CCFF DPE MÓDULO DE PROYECTOS 35