Bus I2C

Anuncio
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.
Descargar