Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Protocolo I2c
Protocolo I2c
Las funcione del módulo MSSP son habilitadas seteando el bit SSPEN. El
registro SSPCON1 permite el control del I2C.los bits del SSPCON1
(SSPM3;SSPM0) permiten 4 modos de operación:
I2C Master mode, cloc I2C Slave mode (7-bit address)I2C Slave mode (10-
bit address)
I2C Slave mode (7-bit address) with Start and Stop bit interrupts enabled
I2C Slave mode (10-bit address) with Start and Stop bit interrupts enabled
I2C Firmware Controlled Master mode, slave is Idle
REGISTROS
El MSSP tiene 6 registros de control del I2C:
1. SSPCON1
2. SSPCON2
3. SSPSTAT
4. SSPBUF
5. SSPSR
6. SSPADD
OPERACIÓN
Las funciones del módulo MSSP son habilitadas cuando SSPEN=1.EL registro
SSPCON1 permite el control del I2C.los bits (SSPCON1<3:0>) permite elmodo
selección del I2c:
•I2C Master mode, clock
• I2C Slave mode (7-bit address)
• I2C Slave mode (10-bit address)
• I2C Slave mode (7-bit address) with Start and Stop bit interrupts enabled
• I2C Slave mode (10-bit address) with Start and Stop bit interrupts enabled
• I2C Firmware Controlled Master mode, slave is Idle
Eligiendo cualquier modo I2C y con SSPEN=1 fuerza a los pines SDA y SCL
Estar en estado alto, estos pines son programados como entrada con la
instrucción TRIS. Para asegurar el funcionamiento apropiado del modulo, se
debe conectar resistencias pull up en las líneas SDA y SCL.
MODO ESCLAVO
En modo esclavo los pines SDA y SCL son configurados como entrada. Cuando
una dirección coincide, o la transferencia de datos después de recibir una
coincidencia de dirección, el hardware generará automáticamente el impulso de
Reconocimiento (ACK) y cargará el registro SSPBUF con el valor recibido
actualmente en el registro SSPSR.
RECEPCION
Cuando el bit R / W del byte de dirección está despejado y se produce una
coincidencia de dirección, se borra el bit R / W del registro SSPSTAT. La
dirección recibida se carga en el registro SSPBUF y la línea SDA se mantiene
baja (ACK).
Cuando existe la condición de desbordamiento de bytes de dirección, entonces
se da el impulso de no reconocimiento (ACK). Una condición de desbordamiento
se define cuando se establece el bit BF (SSPSTAT <0>) o el bit SSPOV
(SSPCON1 <6>).
Se genera una interrupción de MSSP para cada byte de transferencia de datos.
El bit de indicador de interrupción, SSPIF, debe borrarse en el software. El
registro SSPSTAT se utiliza para determinar el estado del byte.
Si SEN está habilitado (SSPCON2 <0> = 1), RB1 / AN10 / INT1 / SCK / SCL se
mantendrá bajo (extensión de reloj) después de cada transferencia de datos. El
reloj debe liberarse ajustando el bit, CKP (SSPCON1 <4>). Consulte la Sección
19.4.4 "Estiramiento del reloj" para obtener más detalles.
TRANSMISION:
Cuando se establece el bit R / W del byte de dirección entrante y se produce una
coincidencia de dirección, se establece el bit R / W del registro SSPSTAT. La
dirección recibida se carga en el registro SSPBUF. El impulso ACK se enviará
en el noveno bit y el pin RB1 / AN10 / INT1 / SCK / SCL se mantendrá bajo
independientemente de SEN (consulte la Sección 19.4.4 “Estiramiento del reloj”
para obtener más detalles). Al estirar el reloj, el maestro no podrá hacer valer
otro impulso de reloj hasta que el esclavo haya terminado de preparar los datos
de transmisión. Los datos de transmisión deben cargarse en el registro SSPBUF
que también carga el registro SSPSR. Luego, el pin RB1 / AN10 / INT1 / SCK /
SCL se debe habilitar configurando el bit, CKP (SSPCON1 <4>). Los ocho bits
de datos se desplazan en el borde descendente de la entrada SCL. Esto
garantiza que la señal SDA sea válida durante el tiempo alto de SCL (Figura 19-
10).
El impulso ACK del receptor maestro está bloqueado en el flanco ascendente del
noveno impulso de entrada SCL. Si la línea SDA es alta (no ACK), entonces la
transferencia de datos está completa. En este caso, cuando el ACK es bloqueado
por el esclavo, la lógica del esclavo se restablece (restablece el registro
SSPSTAT) y el esclavo supervisa para otra aparición del bit de Inicio. Si la línea
SDA era baja (ACK), los siguientes datos de transmisión deben cargarse en el
registro SSPBUF. De nuevo, el pin RB1 / AN10 / INT1 / SCK / SCL debe
habilitarse estableciendo el bit CKP (SSPCON1 <4>).
Se genera una interrupción de MSSP para cada byte de transferencia de datos.
El bit SSPIF debe borrarse en el software y el registro SSPSTAT se utiliza para
determinar el estado del byte. El bit SSPIF se establece en el flanco descendente
del noveno impulso de reloj.
ESTIRAMIENTO DE RELOJ
Los modos esclavo de 7 bits y de 10 bits implementan el estiramiento automático
del reloj durante una secuencia de transmisión. El bit SEN (SSPCON2 <0>)
permite que el estiramiento del reloj se habilite durante las recepciones. La
configuración de SEN hará que el pin SCL se mantenga bajo al final de cada
secuencia de recepción de datos.
Estiramiento de reloj para el modo de recepción esclavo de 7 bits (SEN = 1)
En el modo de recepción de esclavos de 7 bits, en el flanco descendente del
noveno reloj al final de la secuencia ACK si se establece el bit BF, el bit CKP en
el registro SSPCON1 se borra automáticamente, lo que obliga a mantener baja
la salida SCL. El bit CKP que se borra a "0" hará valer la línea SCL baja. El bit
CKP debe establecerse en el ISR del usuario antes de que la recepción pueda
continuar. Al mantener baja la línea SCL, el usuario tiene tiempo para reparar el
ISR y leer el contenido de la SSPBUF antes de que el dispositivo maestro pueda
iniciar otra secuencia de recepción. Esto evitará que se produzcan
desbordamientos de búfer (consulte la Figura 19-15).
Nota
1: Si el usuario lee el contenido del SSPBUF antes del flanco descendente del
noveno reloj, borrando así el bit BF, el bit CKP no se borrará y el estiramiento del
reloj no se producirá.
2: El bit CKP se puede configurar en el software independientemente del estado
del bit BF. El usuario debe tener cuidado de borrar el bit BF en el ISR antes de
la siguiente secuencia de recepción para evitar una condición de
desbordamiento.
Estiramiento de reloj para el modo de recepción esclavo de 10 bits (SEN =
1)
En el modo de recepción de esclavos de 10 bits durante la secuencia de
direcciones, el alargamiento del reloj se realiza automáticamente pero no se
borra el CKP. Durante este tiempo, si el bit UA se establece después del noveno
reloj, se inicia el alargamiento del reloj. El bit UA se establece después de recibir
el byte superior de la dirección de 10 bits y después de la recepción del segundo
byte de la dirección de 10 bits con el bit R / W borrado a "0". El lanzamiento de
la línea de reloj se produce al actualizar SSPADD. El estiramiento del reloj se
producirá en cada secuencia de recepción de datos como se describe en el modo
de 7 bits
Nota:
Si el usuario sondea el bit UA y lo borra actualizando el registro SSPADD antes
de que se produzca el flanco descendente del noveno reloj y si el usuario no ha
borrado el bit BF leyendo el registro SSPBUF antes de esa hora, entonces el bit
CKP seguirá NO se afirmará bajo. El alargamiento del reloj en función del estado
del bit BF solo se produce durante una secuencia de datos, no una secuencia de
direcciones
Estiramiento de reloj para el modo de transmisión esclavo de 7 bits
El modo de transmisión de esclavo de 7 bits implementa el estiramiento del reloj
borrando el bit CKP después del flanco descendente del noveno reloj si el bit BF
está despejado. Esto ocurre independientemente del estado del bit SEN.
El ISR del usuario debe establecer el bit CKP antes de que la transmisión pueda
continuar. Al mantener baja la línea SCL, el usuario tiene tiempo para reparar el
ISR y cargar el contenido de la SSPBUF antes de que el dispositivo maestro
pueda iniciar otra secuencia de transmisión (consulte la Figura 19-10).
Nota
1: Si el usuario carga el contenido de SSPBUF, configurando el bit BF antes del
flanco descendente del noveno reloj, el bit CKP no se borrará y el estiramiento
del reloj no se producirá.
2: El bit CKP se puede configurar en el software independientemente del estado
del bit BF.
Estiramiento de reloj para el modo de transmisión esclavo de 10 bits
En el modo de transmisión de esclavos de 10 bits, el alargamiento del reloj se
controla durante las dos primeras secuencias de direcciones mediante el estado
del bit UA, al igual que en el modo de recepción de esclavos de 10 bits. Las dos
primeras direcciones son seguidas por
una tercera secuencia de direcciones que contiene los bits de orden superior
de la dirección de 10 bits y el bit R / W establecido en "1". Después de realizar la
tercera secuencia de direcciones, el bit UA no se establece, el módulo ahora está
configurado en el modo de transmisión y el alargamiento del reloj se controla
mediante el indicador BF como en el modo de transmisión de esclavos de 7 bits
(consulte la Figura 19-13).
Sincronización de reloj y el bit CKP
Cuando se borra el bit CKP, la salida de SCL se fuerza a "0". Sin embargo, borrar
el bit CKP no hará que la salida de SCL sea baja hasta que la salida de SCL ya
esté muestreada en baja. Por lo tanto, el bit CKP no activará la línea SCL hasta
que un dispositivo maestro I2C externo ya haya afirmado la línea SCL. La salida
de SCL permanecerá baja hasta que se establezca el bit CKP y todos los demás
dispositivos en el bus I2C hayan desactivado la SCL. Esto garantiza que una
escritura en el bit CKP no violará el requisito de tiempo mínimo mínimo para SCL
(consulte la Figura 19-14).
SOPORTE DE DIRECCIÓN DE LLAMADA GENERAL
El procedimiento de direccionamiento para el bus I2C es tal que el primer byte
después de la condición de inicio generalmente determina qué dispositivo será
el esclavo direccionado por el maestro. La excepción es la dirección de llamada
general que puede abordar todos los dispositivos. Cuando se usa esta dirección,
todos los dispositivos deberían, en teoría, responder con un Reconocimiento.
La dirección de llamada general es una de las ocho direcciones reservadas para
fines específicos por el protocolo I2C. Consiste en todos los '0' con R / W = 0.
La dirección de llamada general se reconoce cuando el bit de habilitación de
llamada general (GCEN) está habilitado (conjunto SSPCON2 <7>). Después de
una detección de bit de inicio, 8 bits se desplazan al SSPSR y la dirección se
compara con el SSPADD. También se compara con la dirección general de
llamada y se arregla en hardware.
Si la dirección general de la llamada coincide, el SSPSR se transfiere a la
SSPBUF, se establece el bit de bandera BF (octavo bit) y en el borde
descendente del noveno bit (bit ACK), se establece la bit de bandera de
interrupción SSPIF. Cuando se atiende la interrupción, se puede verificar la
fuente de la interrupción leyendo el contenido de la SSPBUF. El valor se puede
usar para determinar si la dirección era específica del dispositivo o una dirección
de llamada general.
En el modo de 10 bits, se requiere que el SSPADD se actualice para que la
segunda mitad de la dirección coincida y se establezca el bit UA (SSPSTAT <1>).
Si la dirección de llamada general se muestrea cuando se establece el bit GCEN,
mientras que el esclavo se configura en el modo de Dirección de 10 bits, la
segunda mitad de la dirección no es necesaria, el bit UA no se configurará y el
esclavo comenzará a recibir Datos después del Reconocimiento (Figura 19-17).
Modo maestro
l modo maestro se habilita configurando y borrando los bits SSPM apropiados en
SSPCON1 y configurando el bit SSPEN. En el modo Maestro, las líneas SCL y
SDA son manipuladas por el hardware de MSSP si se establecen los bits TRIS.
La operación de modo maestro es compatible con la generación de
interrupciones en la detección de las condiciones de inicio y parada. Los bits de
parada (P) e inicio (S) se borran de un reinicio o cuando el módulo MSSP está
deshabilitado. Se puede tomar el control del bus I2C cuando se establece el bit
P o el bus está inactivo, con los bits S y P libres.
En el Modo maestro controlado por firmware, el código de usuario realiza todas
las operaciones del bus I2C basadas en Inicio y
Condiciones de bit de parada.
Una vez habilitado el modo Maestro, el usuario tiene seis opciones:
1. Afirmar una condición de inicio en SDA y SCL.
2. Afirmar una condición de inicio repetido en SDA y SCL.
3. Escriba en el registro SSPBUF iniciando la transmisión de datos / dirección.
4. Configure el puerto I2C para recibir datos.
5. Generar una condición de Reconocimiento al final.
de un byte de datos recibido.
6. Generar una condición de parada en SDA y SCL
Nota:
El módulo MSSP, cuando está configurado en el modo maestro I2C, no
permite la puesta en cola de eventos. Por ejemplo, al usuario no se le
permite iniciar una condición de Inicio e inmediatamente escribir el registro
SSPBUF para iniciar la transmisión antes de que se complete la condición
de Inicio. En este caso, no se escribirá el SSPBUF y se establecerá el bit
WCOL, lo que indica que no se produjo una escritura en el SSPBUF.
Los siguientes eventos harán que se establezca el bit de indicador de
interrupción de MSSP, SSPIF (y la interrupción de MSSP, si está habilitado):
• Condición de inicio
• Detener la condición
• Byte de transferencia de datos transmitido / recibido
• Confirmar transmitir
• Inicio repetido
Reloj de arbitraje
El arbitraje de reloj ocurre cuando el maestro, durante cualquier condición de
recepción, transmisión o inicio / parada repetida, desactiva el pin SCL (se permite
que el SCL flote alto). Cuando se permite que el pin SCL flote alto, el generador
de velocidad en baudios (BRG) se suspende desde el conteo hasta que el pin
SCL realmente se muestrea alto. Cuando el pin SCL se muestrea alto, el
generador de velocidad de transmisión se vuelve a cargar con el contenido de
SSPADD <6: 0> y
comienza a contar. Esto garantiza que el tiempo alto de SCL siempre será al
menos un conteo de reinversión de BRG en el caso de que un dispositivo externo
mantenga el reloj bajo (Figura 19-20).
I2C MODO PRINCIPAL TIEMPO DE CONDICIÓN DE INICIO
Para iniciar una condición de inicio, el usuario establece el bit de activación de
inicio, SEN (SSPCON2 <0>). Si los pines SDA y SCL se muestrean alto, el
generador de velocidad en baudios se vuelve a cargar con el contenido de
SSPADD <6: 0> y comienza su conteo. Si SCL y SDA se muestrean alto cuando
el tiempo de espera del generador de velocidad de transmisión (TBRG), el pin
SDA está bajo. La acción de que el SDA sea controlado mientras SCL está alto
es la condición de Inicio y hace que se establezca el bit S (SSPSTAT <3>). A
continuación, el generador de velocidad en baudios se vuelve a cargar con el
contenido de
SSPADD <6: 0> y reanuda su conteo. Cuando el Generador de velocidad en
baudios se agota (TBRG), el bit SEN (SSPCON2 <0>) se borrará
automáticamente con el hardware, el Generador de velocidad en baudios se
suspenderá, dejando la línea SDA baja y la condición de inicio se habrá
completado.
Nota:
Si al comienzo de la condición de inicio, los pines SDA y SCL ya se han
muestreado bajo, o si durante la condición de inicio, la línea SCL se
muestrea bajo antes de que la línea SDA esté baja, se produce una colisión
del bus, el indicador de interrupción de colisión del bus , BCLIF, está
establecido, la condición de inicio se cancela y el módulo I2C se restablece
a su estado inactivo.
Bandera de estado de WCOL
Si el usuario escribe el SSPBUF cuando hay una secuencia de Inicio en curso,
el bit WCOL se establece y el contenido del búfer no cambia (la escritura no se
produce).
Nota:
Debido a que la cola de eventos no está permitida, la escritura en los cinco
bits inferiores de SSPCON2 se deshabilita hasta que se completa la
condición de Inicio.
I2C MODO PRINCIPAL REPETIÓ EL TIEMPO DE CONDICIÓN DE INICIO
Se produce una condición de inicio repetido cuando el bit RSEN (SSPCON2 <1>)
está programado alto y el módulo lógico I2C está en estado inactivo. Cuando se
establece el bit RSEN, el pin SCL se afirma bajo. Cuando el pin SCL se muestrea
bajo, el generador de velocidad en baudios se carga con el contenido de
SSPADD <5: 0> y comienza a contar. El pin SDA se libera (elevado) para un
recuento de generador de velocidad de transmisión (TBRG). Cuando el
Generador de velocidad en baudios se agota, si se extrae SDA, se desactiva
(fija) el pin SCL. Cuando se muestrea SCL
alto, el generador de velocidad en baudios se vuelve a cargar con el contenido
de SSPADD <6: 0> y comienza a contar. SDA y SCL deben muestrearse alto
para un TBRG. Esta acción es seguida por la afirmación del pin SDA (SDA = 0)
para un TBRG mientras SCL es alto. Después de esto, el bit RSEN (SSPCON2
<1>) se borrará automáticamente y el generador de velocidad en baudios no se
volverá a cargar, dejando el pin SDA bajo. Tan pronto como se detecte una
condición de inicio en los pines SDA y SCL, se establecerá el bit S (SSPSTAT
<3>). El bit SSPIF no se establecerá hasta que se agote el tiempo de espera del
generador de velocidad en baudios.
Nota
1: Si RSEN está programado mientras hay algún otro evento en curso, no
tendrá efecto.
2: se produce una colisión de bus durante la condición de inicio repetido
si:
• SDA se muestrea bajo cuando SCL va de bajo a alto.
• SCL baja antes de que SDA sea bajo. Esto puede indicar que otro maestro
está intentando transmitir un dato '1'.
Inmediatamente después de establecer el bit SSPIF, el usuario puede escribir el
SSPBUF con la dirección de 7 bits en el modo de 7 bits o la primera dirección
predeterminada en el modo de 10 bits. Después de que se transmiten los
primeros ocho bits y se recibe un ACK, el usuario puede transmitir otros ocho
bits de dirección (modo de 10 bits) u ocho bits de datos (modo de 7 bits).
Bandera de estado de WCOL
Si el usuario escribe el SSPBUF cuando se está ejecutando una secuencia de
inicio repetido, se establece el bit WCOL y el contenido del búfer no se modifica
(la escritura no se produce).
Nota:
Debido a que la cola de eventos no está permitida, la escritura de los cinco
bits inferiores de SSPCON2 se deshabilita hasta que se completa la
condición de inicio repetido.
Note 1: When enabled, the SDA and SCL pins must be properly configured as input or output.
2: Bit combinations not specifically listed here are either reserved or implemented in SPI mode only.
SSPCON2: MSSP CONTROL REGISTER 2 (I2C™ MASTER MODE)
Note 1: Value that will be transmitted when the user initiates an Acknowledge sequence at the end of a
receive.
2: If the I2C module is active, these bits may not be set (no spooling) and the SSPBUF may not be written
(or
writes to the SSPBUF are disabled).