Bus I2C Definición. Consiste en un bus serie compuesto únicamente de dos líneas: SDA, para datos y SCL, para el reloj. Tiene un rendimiento máximo de 100 kbits por segundo y una capacidad máxima de 400pF (preguntar qué significa esto) SDA: datos SLC: reloj 3.4Mbits/s) 0..100kbits/s (pero también 0..400kbits/s y AMBAS: conectadas a Vcc con resistencia (pull-up) Estado inactivo (1) combinación de entradas AND En el bus conviven dos tipos de dispositivos, los maestros y los esclavos. Pueden coexistir múltiples dispositivos de cada especie. El dispositivo maestro es el que inicia y cierra cada transacción. En una transacción el maestro y el esclavo pueden actuar como transmisores y como receptores en diferentes fases de la misma. MAESTRO: iniciador de transacción (transmisor/receptor) admite múltiples maestros ESCLAVO: (transmisor/receptor) obviamente. Los datos se envía en paquetes de bytes (8 bits) -el más significativo primero - seguidos por un bit de respuesta de parte del receptor. Cada bit de datos debe estar activo(a su valor correspondiente) durante la fase alta del reloj, debiendo realizarse el cambio durante la fase baja. En el nivel alto del reloj que sigue al del último bit de datos, el receptor debe tener activado un 0 como indicación de haber recibido el dato y estar dispuesto para el siguiente. Un 1 en esta situación provocaría que el maestro diese por terminada la transmisión. (pregunta, ¿considerará que el último byte enviado ha sido recibido? La única forma que tiene un esclavo de indicar que no está dispuesto a recibir es no activando el reconocimiento después de un dato enviado, pero ¿recogerá de todas maneras ese dato? ). También se puede mantener al comunicante (receptor o transmisor) en espera pulsando a cero la señal de reloj todo el tiempo que lo necesite. PAQUETE: 8 bits (MSB primero) cada bit durante el semiperiodo alto del reloj (SLC) (cambios en el semiperiodo bajo) ACK: 1 bit, reconocimiento del receptor. (0, reconocido. 1 no reconocido - implica final de transacción-) (wait): se induce un estado wait manteniendo SLC a cero el tiempo necesario. Establecimiento y Cierre de una transacción. El establecimiento de una transacción (START) ocurre cuando el maestro genera un flanco de bajada en la línea SDA durante la fase alta del reloj en SCL. (¿Esta es la indicación de que se ha resuelto un arbitraje.?*Ya sabemos que no*). La finalización de una transacción se señala con una indicación de (STOP) consistente en un flanco de subida durante la fase alta del reloj.(¿Esto permite a los dispositivos en espera iniciar la competición por el uso del bus?*También sabemos que no. No transmitirá hasta que, presuntamente, la línea de reloj esté inactiva.) START: situación especial. Flanco de bajada durante el semiperiodo alto de SLC. Inicio de transacción STOP: situación especial. Flanco de subida durante el semiperiodo alto de SLC. Final de transacción Arbitraje y Sincronización. El que genera la señal de reloj durante la transacción es el maestro. Pero durante la competición por el uso del bus, donde hay varios maestros, todos generan su propia señal de reloj. La señal que predomina en la línea SCL es un AND booleano de todas las señales emitidas. (Lo que implica que el maestro no puede confiar en la señal de reloj que emite para saber cuándo activar o desactivar la señal de datos. Por otra parte, ¿qué ocurre si las señales participantes en un conflicto se solapan?; la negra noche de una fase baja del reloj duraría eternamente) SCL es resultado de un AND de las señales de reloj de los maestros. Sincronizar: empezar a contar a partir de la detección de un flanco de bajada. Igualmente la línea SDA acarrearía un AND de todas las señales emitidas desde los diferentes emisores en un instante dado. Un emisor que comprobase que el bit que ha emitido en un instante determinado no se corresponde con lo que lee de la línea de datos debería comprender que hay un maestro intentando usurpar el bus. SDA es igualmente resultado de un AND de las líneas de datos de los maestros Competición. Vence el que active un "0" frente al que active un "1" El arbitraje se va a apoyar en este funcionamiento. Puesto que las líneas están conectadas a Vcc mediante resistencias, un maestro que emita sobre la línea de datos un "0" predominará sobre aquellos que emitan un "1". Por lo tanto estos se considerarán postergados en lo que respecta a usufructo del bus. El procedimiento es el siguiente: 1º El bus está libre porque la línea SCL está a 1 de forma permanente (Comprobar esta afirmación) 2º Casualmente dos maestros generan un START en instantes lo suficientemente próximos para que no se percaten de ello. Comienza el proceso de arbitraje. 3º Cada uno va depositando en la línea SDA sus datos y comprobando que se mantienen allí. 4º Si en algún momento detectan que el dato leído no se corresponde con el que ellos depositaron se consideran perdedores y abandonan el uso del bus. Nota: Esta competición debería resolverse antes de que uno de los contendientes generara un STOP o repitiera un START pues es imposible resolver un conflicto entre un bit de datos y una de estas "situaciones especiales". Las transacciones tienen un formato definido por el siguiente conjunto de elementos en el orden espresado: 1-Señal de START 2-Un paquete que contiene la dirección del dispositivo esclavo invocado. 7 bits 3-Un bit de dirección R/W# 4-un bit de reconocimiento A continuación le sigue una secuencia de BYTE/ACK/BYTE/ACK Si se trataba de una transferencia de escritura, el maestro escribe el byte y el esclavo el reconocimiento. Si lo contrario, el esclavo escribe el byte y el maestro el reconocimiento. Finalización de una transacción: Lectura: - El maestro no reconoce el último paquete (ACK#) y genera un STOP - El maestro reconoce el último paquete (ACK) y genera un STOP - El maestro reconoce o no el último paquete y genera un nuevo START (Sr) nueva transacción Escritura: - El esclavo no reconoce el último paquete (ACKJ#). El maestro genera un STOP (P) Transacción errónea. - El maestro genera un STOP o un Sr tras el último reconocimiento. Direcciónes: Cada dispositivo en el bus tiene una dirección. En principio de 7 bits. Se usa que los dispositivos esclavo lleven una parte de su dirección fija (fijada por un comité de ordenación del bus) y una parte programable. De esta manera los dispositivos homogéneos son fácilmente identificables en el bus. La parte programable de su dirección determina el número de este tipo de dispositivos que puede colgar de un bus. También existen un conjunto de direcciones reservadas: 0000xxx 1111xxx Algunas direcciones tienen funciones específicas Llamada general: 00000000AXXXXXXXBA Todos los dispositivos esclavos habilitados para ello responderán a esta llamada. Servirá obligarlos a realizar alguna función de inicialización START BYTE (00000001A) Se trata de una dirección inútil a la que no pueden responder ningún dispositivo colgado al bus, así que es el propio maestro quién activa el bit de reconocimiento. Secuencia de iniciación recomendada con los microcontroladores que no disponen de hardware I2C START (S) START BYTE (00000001) ACK START(Sr) el objetivo es propiciar que el microcontrolador pueda realizar un polling ralentizado hasta que detecte el START BYTE momento en el cual aceleraría la exploración para detectar el START ¿con objeto de sincronizarse? Extensiones del modo estándar. 1.- Modo FAST 2.- Modo High Speed --3.- Direccionamiento con 10 bits MODO FAST: No se requiere ninguna modificación con respecto al modo estándar. Sencillamente es un modo más rápido de transmisión que admite hasta 400kbits/s. Los maestros pueden proceder en modo FAST con cualquier dispositivo. Si el dispositivo no pudiera seguir el ritmo del maestro pulsaría la línea SLC cuando le conviniese para retener al maestro. MODO HS (High Speed) Los maestros son ligeramente diferentes disponiendo de pines diferenciados para modo estándar y modo HS. Los esclavos sólo se diferencian en la velocidad de funcionamiento. Las líneas tienen unos acondicionamientos particulares en el modo. Para entrar en el modo HS, hay que pasar previamente por un arbitraje en modo estándar START (S) Hs mode master code (00001XXX) non-acknowledge bit EN ESTE PUNTO, LOS COMPETIDORES POR EL ACCESO DEL BUS DEBEN HABER RESUELTO CUAL ES EL QUE SE QUEDA CON EL MISMO. (Esto debe ocurrir realmente tras la emisión del master code) A continuación se procede a un rearranque de la transacción START (Sr) dirección del dispositivo esclavo+R/W ... STOP DIRECCIONAMIENTO DE 10 BITS. Se usa para ampliar el espacio de direcciones del bus. El procedimiento es el siguiente START (S) 10-bit slave addressing (11110XXR/W) (en este momento R/W vale 0. Todos los dispositivos que usen dirección de 10 bits reconocerán esta dirección y activarán el reconocimiento) ACK 8 bit de dirección (XXXXXXXX) (son el resto de la dirección del dispositivo esclavo seleccionado. Éste activará el siguiente reconocimiento como respuesta) ACK Si a continuación el maestro comienza a enviar bytes se trata de una transferencia de escritura. Si, en cambio, reinicia la transacción de la misma manera (hasta el primer reconocimiento) con el bit R/W cambiado, comienza una transacción de lectura desde el dispositivo que reconoció su dirección en la fase anterior. El maestro puede iniciar una fase de escritura exclusivamente. O una fase de escritura seguida de una de lectura. O una fase de lectura exclusivamente.