Nothing Special   »   [go: up one dir, main page]

I2c

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 13

EL BUS I2C

• Para simplificar la interconexión de dispositivos al microprocesador, Philips desarrolló un sencillo bus bidireccional
basado en dos hilos por el que se trasmiten los datos vía serie y lo llamó El Bus I2C.

• EL Bus I2C (Inter- Integrated Circuits) fue desarrollado al principio de los 80’s. Su propósito original fue el de
proporcionar una manera fácil de conectar un CPU a los chips periféricos en un equipo de TV.

EL PROBLEMA A RESOLVER:
• Los dispositivos periféricos en sistemas embebidos se conectan al mControlador como dispositivos de E/S mapeados
en memoria usando las líneas paralelas del bus de dirección y de datos. Esto produce una gran cantidad de pistas en
el PCB para enrutar las líneas de direcciones y de datos, sin mencionar un número de decodificadores de direcciones
y lógica adicional para conectar todo.
• Muchas líneas de control implican que el sistema sea más susceptible a perturbaciones por Interferencia
Electromagnética (EMI) y Descarga Electrostática (ESD).
Las características más importantes del bus I2C son:
Comunicación serial, utilizando un conductor para manejar el timming (SCL) (pulsos de reloj) y otro para intercambiar datos (SDA), que transportan
información entre los dispositivos conectados al bus.

Las líneas SDA (Serial Data) y SCL (Serial Clock) están conectadas a la fuente de alimentación a través de las resistencias de pull-up. Cuando el
bus está libre, ambas líneas están en nivel alto.

Los dispositivos puede ser considerados como Maestro (Master) o esclavo (Slave).

El Maestro es el dispositivo que inicia la transferencia en el bus y genera la señal de Clock.

El Slave (esclavo) es el dispositivo direccionado.

SDA
Maestro
SCL

Esclavo1 Esclavo2 Esclavo3


Transmisión de bits

– Los bits de datos van por SDA


– Por cada bit de información es necesario un pulso de SCL
– Los datos sólo pueden cambiar cuando SCL está a nivel bajo
• Los datos transitan en la bajada del reloj
• El dato es recibido en el borde de bajada del reloj
• El bit más significativo se envía primero
• El nodo que recibe debe manejar un acknowledge (bajo en SDA) después
de completado el byte
• El nodo maestro siempre genera el reloj
Las características más importantes del bus I2C son:

Cada dispositivo es reconocido por una única dirección (si es un microcontrolador, LCD, memoria o
teclado) y cualquiera puede operar como transmisor o receptor de datos, dependiendo de la función
del dispositivo.

Un display es solo un receptor de datos mientras que una memoria recibe y transmite datos.
Modulo serial I²C
Algunos microcontroladores poseen este módulo y de la misma forma el compilador
MikroC PRO cuenta con una librería especializada para el uso fácil de este protocolo. La
librería se reconoce como I2C. Está librería cuenta con siete funciones que lideran el
funcionamiento del módulo. El protocolo I²C, se caracteriza por tener una línea de
datos bidireccional y una línea de reloj con drenador abierto. Por este motivo en estos
dos pines se debe usar una resistencia de pull-up, generalmente de 10KΩ. Este usa una
condición de inicio, un bloque de dirección para los dispositivos en la red, un bloque de
datos y una condición de fin. De igual manera usa las condiciones de repetición de
inicio y un bit de reconocimiento o acknowledge denotado como ACK. El protocolo I²C
se puede usar para conectar diferentes dispositivos con direcciones diferentes en una
topología en forma de bus. Por último este protocolo debe tener una velocidad de
comunicación que está dada en bits por segundo.
La librería de MikroC PRO, cuenta con las siguientes funciones que hacen posible el dominio del protocolo I²C:

La función: I2C1_Init(const unsigned long clock);, inicializa los pines de comunicación en el PIC, y ajusta la
velocidad de comunicación a la rata que denote el parámetro clock.

La función: unsigned short I2C1_Start(void);, está función genera la condición de inicio y retorna 0 si no hay
ningún error en la transmisión, de otro forma retorna un valor diferente de 0.

La función: void I2C1_Repeated_Start(void);, está función genera la repetición de inicio.

La función: unsigned short I2C1_Is_Idle(void);, está función se usa para identificar si el bus de datos está
ocupado, y retorna 1, si el bus está disponible o retorna 0, si está ocupado.

La función: unsigned short I2C1_Rd(unsigned short ack);, Está función lee un dato del bus de datos y envía la
confirmación ack por el bus. Si ack vale 1 la confirmación es positiva y si es 0 la confirmación es negativa o NO
ACK.

La función: unsigned short I2C1_Wr(unsigned short data );, está función envía el dato data por el bus y retorna
0 si la transmisión fue exitosa, o algo diferente de 0 si suceden errores.

La función: void I2C1_Stop(void);, Genera la condición de final en el bus de comunicación.


Para entender y estudiar el funcionamiento de este módulo, el siguiente ejemplo se concentra en la lectura y
escritura de una memoria serial 24LC00, que tiene una capacidad de 16 direcciones.

En las siguientes gráficas se puede apreciar el protocolo de comunicación con la memoria 24LC00 para ser
leída y escrita:

También podría gustarte