Protocolo I2c.docx

  • Uploaded by: Guillermo Bautista
  • 0
  • 0
  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Protocolo I2c.docx as PDF for free.

More details

  • Words: 8,252
  • Pages: 25
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 (10bit 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. Cualquier combinación de las siguientes condiciones causará El módulo MSSP no da este impulso ACK.

El bit de búfer lleno, BF (SSPSTAT <0>), se estableció antes de que se recibiera la transferencia. • El bit de desbordamiento, SSPOV (SSPCON1 <6>), se estableció antes de que se recibiera la transferencia. En este caso, el valor del registro SSPSR no se carga en el SSPBUF, pero se establece el bit SSPIF. El bit BF se borra al leer el registro SSPBUF, mientras que el bit SSPOV se borra a través del software. La entrada de reloj SCL debe tener un mínimo alto y bajo para que funcione correctamente. Los tiempos altos y bajos de la especificación I2C, así como el requisito del módulo MSSP, se muestran en el parámetro de temporización 100 y el parámetro 101. DIRECIONAMIENTO Una vez que el módulo MSSP se ha habilitado, espera a que se produzca una condición de inicio. Tras la condición de inicio, los 8 bits se desplazan al registro SSPSR. Todos los bits entrantes se muestrean con el flanco ascendente de la línea del reloj (SCL). El valor del registro SSPSR <7: 1> se compara con el valor del registro SSPADD. La dirección se compara en el flanco descendente del pulso del octavo reloj (SCL). Si las direcciones coinciden y los bits BF y SSPOV están claros, se producen los siguientes eventos: 1. El valor del registro SSPSR se carga en el registro SSPBUF. 2. Se establece el bit de búfer lleno, BF. 3. Se genera un pulso ACK. 4. El bit de indicador de interrupción MSSP, SSPIF, se establece (y la interrupción se genera, si está habilitada) en el flanco descendente del noveno impulso SCL. En el modo de dirección de 10 bits, el esclavo debe recibir dos bytes de dirección. Los cinco bits más significativos (MSbs) del primer byte de dirección especifican si se trata de una dirección de 10 bits. El bit R / W (SSPSTAT <2>) debe especificar una escritura para que el dispositivo esclavo reciba el segundo byte de dirección. Para una dirección de 10 bits, el primer byte sería igual a "11110 A9 A8 0", donde "A9" y "A8" son los dos MSbs de la dirección. La secuencia de eventos para la dirección de 10 bits es la siguiente, con los pasos 7 a 9 para el transmisor-esclavo: 1. Recibir el primer (alto) byte de dirección (los bits SSPIF, BF y UA (SSPSTAT <1>) se configuran en la coincidencia de direcciones). 2. Actualice el registro SSPADD con el segundo (bajo) byte de dirección (borra el bit UA y libera la línea SCL). 3. Lea el registro SSPBUF (borra el bit BF) y borre el bit indicador SSPIF.

4. Recibir el segundo (bajo) byte de dirección (se establecen los bits SSPIF, BF y UA). 5. Actualice el registro SSPADD con el primer byte (alto) de dirección. Si el partido libera la línea SCL, esto borrará el bit UA. 6. Lea el registro SSPBUF (borra el bit BF) y borre el bit indicador SSPIF. 7. Recibe la condición de inicio repetido. 8. Recibir el primer (alto) byte de dirección (se establecen los bits SSPIF y BF). 9. Lea el registro SSPBUF (borra el bit BF) y borre el bit indicador SSPIF. Enmascaramiento de direcciones Enmascarar un bit de dirección hace que ese bit se convierta en un "no importa". Cuando se enmascara un bit de dirección, se reconocerán dos direcciones y se producirá una interrupción. Es posible enmascarar más de un bit de dirección a la vez, lo que permite reconocer hasta 31 direcciones en modo de 7 bits y hasta 63 direcciones en modo de 10 bits.

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 1910). 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

Operación del modo maestro I2C

El dispositivo maestro genera todos los pulsos de reloj serie y las condiciones de Inicio y Parada. Una transferencia termina con una condición de detención o con una condición de inicio repetido. Dado que la condición de inicio repetido también es el comienzo de la próxima transferencia en serie, el bus I2C no se liberará. En el modo Transmisor maestro, los datos en serie se emiten a través de SDA, mientras que SCL envía el reloj en serie. El primer byte transmitido contiene la dirección del esclavo del dispositivo receptor (siete bits) y el bit de lectura / escritura (R / W). En este caso, el bit R / W será lógico "0". Los datos en serie se transmiten ocho bits a la vez. Después de que se transmite cada byte, se recibe un bit de acuse de recibo. Las condiciones de inicio y parada se emiten para indicar el comienzo y el final de una transferencia en serie. En el modo de recepción maestra, el primer byte transmitido contiene la dirección del esclavo del dispositivo de transmisión (7 bits) y el bit R / W. En este caso, el bit R / W será lógico "1". Por lo tanto, el primer byte transmitido es una dirección de esclavo de 7 bits seguida de un "1" para indicar el bit de recepción. Los datos en serie se reciben a través de SDA, mientras que SCL envía el reloj en serie. Los datos en serie se reciben ocho bits a la vez. Después de recibir cada byte, se transmite un bit de acuse de recibo. Las condiciones de inicio y parada indican el comienzo y el final de la transmisión. El generador de velocidad en baudios utilizado para la operación en modo SPI se usa para configurar la frecuencia de reloj SCL para una operación I2C de 100 kHz, 400 kHz o 1 MHz. Consulte la Sección 19.4.7 "Velocidad de transmisión" para obtener más detalles. Una secuencia de transmisión típica sería la siguiente: 1. El usuario genera una condición de inicio configurando el bit de activación de inicio, SEN (SSPCON2 <0>). 2. Se establece SSPIF. El módulo MSSP esperará la hora de inicio requerida antes de que se realice cualquier otra operación. 3. El usuario carga el SSPBUF con la dirección del esclavo para transmitir. 4. La dirección se desplaza fuera del pin SDA hasta que se transmiten los ocho bits. 5. El módulo MSSP cambia el bit ACK del dispositivo esclavo y escribe su valor en el registro SSPCON2 (SSPCON2 <6>). 6. El módulo MSSP genera una interrupción al final del noveno ciclo de reloj al configurar el bit SSPIF. 7. El usuario carga el SSPBUF con ocho bits de datos. 8. Los datos se desplazan fuera del pin SDA hasta que se transmiten los ocho bits. 9. El módulo MSSP cambia el bit ACK del dispositivo esclavo y escribe su valor en el registro SSPCON2 (SSPCON2 <6>). 10. El módulo MSSP genera una interrupción al final del noveno ciclo de reloj al configurar el bit SSPIF. 11. El usuario genera una condición de parada al configurar el bit de habilitación de parada, PEN (SSPCON2 <2>). 12. La interrupción se genera una vez que se completa la condición de detención.

BAUD RATE n el modo maestro I2C, el valor de recarga del generador de velocidad en baudios (BRG) se coloca en los siete bits más bajos del registro SSPADD (Figura 19-19). Cuando se produce una escritura en SSPBUF, el generador de velocidad de transmisión comenzará automáticamente a contar. El BRG realiza una cuenta regresiva a "0" y se detiene hasta que se haya producido otra recarga. El conteo de BRG se reduce dos veces por ciclo de instrucción (TCY) en los relojes Q2 y Q4. En el modo I2C Master, el BRG se vuelve a cargar automáticamente. Una vez que se completa la operación dada (es decir, la transmisión del último bit de datos es seguida por ACK), el reloj interno detendrá automáticamente el conteo y el pin SCL permanecerá en su último estado. La Tabla 19-3 muestra las velocidades de reloj basadas en los ciclos de instrucción y el valor BRG cargado en SSPADD.

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.

TRANSMISIÓN DE MODO MAESTRA I2C La transmisión de un byte de datos, una dirección de 7 bits o la otra mitad de una dirección de 10 bits se realiza simplemente escribiendo un valor en el registro SSPBUF. Esta acción establecerá el bit de bandera de Buffer Full, BF y permitirá que el generador de velocidad de transmisión comience a contar y comience la próxima transmisión. Cada bit de dirección / datos se desplazará hacia fuera en el pin SDA después de que se confirme el flanco descendente de SCL (consulte el parámetro de especificación de tiempo de retención de datos 106). SCL se mantiene bajo para un recuento de reinversión del generador de velocidad de transmisión (TBRG). Los datos deben ser válidos antes de que se lance SCL alto (consulte el parámetro de especificación de tiempo de configuración de datos 107). Cuando el pin SCL se libera alto, se mantiene así para TBRG. Los datos en el pin SDA deben permanecer estables durante ese tiempo y cierto tiempo de espera después del siguiente flanco descendente de SCL. Una vez que se desplaza el octavo bit (el borde descendente del octavo reloj), se borra el indicador BF y el maestro libera SDA. Esto permite que el dispositivo esclavo que está siendo direccionado responda con un bit ACK durante el noveno bit si un coincidencia de dirección se produjo, o si los datos se recibieron correctamente. El estado de ACK se escribe en el bit ACKDT en el flanco descendente del noveno reloj. Si el maestro recibe una confirmación, el bit de estado de confirmación, ACKSTAT, se borra. Si no, el bit se establece. Después del noveno reloj, el bit SSPIF se establece y el reloj maestro (Generador de velocidad en baudios) se suspende hasta que el siguiente byte de datos se carga en el SSPBUF, dejando SCL bajo y SDA sin cambios (Figura 19-23). Después de la escritura en el SSPBUF, cada bit de la dirección se desplazará hacia afuera en el borde descendente de SCL hasta que se completen los siete bits de dirección y el bit R / W. En el flanco descendente del octavo reloj, el maestro desactivará el pin SDA, permitiendo que el esclavo responda con un

Reconocimiento. En el borde descendente del noveno reloj, el maestro tomará muestras del pin SDA para ver si la dirección fue reconocida por un esclavo. El estado del bit ACK se carga en el bit de estado ACKSTAT (SSPCON2 <6>). Después del borde descendente de la transmisión de la dirección del noveno reloj, se establece el SSPIF, se borra el indicador BF y se desactiva el generador de velocidad en baudios hasta que se realiza otra escritura en el SSPBUF, manteniendo el SCL bajo y permitiendo que el SDA flote. Bandera de estado BF En el modo de transmisión, el bit BF (SSPSTAT <0>) se establece cuando la CPU escribe en SSPBUF y se borra cuando se eliminan los ocho bits. Bandera de estado de WCOL Si el usuario escribe el SSPBUF cuando ya hay una transmisión en curso (es decir, el SSPSR todavía está desplazando un byte de datos), se establece el bit WCOL y el contenido del búfer no cambia (la escritura no ocurre) después de 2 TCY después de la escritura SSPBUF. Si SSPBUF se reescribe dentro de 2 TCY, se establece el bit WCOL y se actualiza SSPBUF. Esto puede resultar en una transferencia dañada. El usuario debe verificar que el WCOL esté despejado después de cada escritura en SSPBUF para garantizar que la transferencia sea correcta. En todos los casos, WCOL se debe borrar en el software. Bandera de estado ACKSTAT En el modo de Transmisión, el bit ACKSTAT (SSPCON2 <6>) se borra cuando el esclavo envía un Reconocimiento (ACK = 0) y se establece cuando el esclavo no Reconoce (ACK = 1). Un esclavo envía un Reconocimiento cuando ha reconocido su dirección (incluida una llamada general), o cuando el esclavo ha recibido correctamente sus datos. 2C RECEPCION MODO MASTER La recepción del modo maestro se habilita mediante la programación del bit de habilitación de recepción, RCEN (SSPCON2 <3>). Nota: El módulo MSSP debe estar en estado inactivo antes de que se establezca el bit RCEN o se ignorará el bit RCEN. El generador de velocidad en baudios comienza a contar y en cada reinversión, el estado del pin SCL cambia (alto a bajo / bajo a alto) y los datos son cambiado a la SSPSR. Después del flanco descendente del octavo reloj, el indicador de habilitación de recepción se borra automáticamente, los contenidos del SSPSR se cargan en el SSPBUF, se establece el bit del indicador BF, se establece el bit del indicador SSPIF y se suspende el generador de velocidad en baudios. , manteniendo bajo SCL. El MSSP está ahora en estado inactivo en espera del siguiente comando. Cuando la CPU lee el búfer, el bit de bandera BF se borra automáticamente. Luego, el usuario puede enviar un bit de confirmación al final de la recepción configurando el bit de activación de secuencia de confirmación, ACKEN (SSPCON2 <4>). Bandera de estado BF En la operación de recepción, el bit BF se establece cuando una dirección o un byte de datos se carga en SSPBUF desde SSPSR. Se borra cuando se lee el registro SSPBUF. Indicador de estado de SSPOV

En la operación de recepción, el bit SSPOV se establece cuando se reciben ocho bits en el SSPSR y el bit de bandera BF ya está establecido desde una recepción anterior. Bandera de estado de WCOL Si el usuario escribe el SSPBUF cuando ya hay una recepción en curso (es decir, el SSPSR todavía está cambiando en un byte de datos), el bit WCOL se establece y el contenido del búfer no cambia (la escritura no ocurre). RECONOCIENDO EL TIEMPO DE LA SECUENCIA Una secuencia de confirmación se habilita configurando el bit de activación de secuencia de confirmación, ACKEN (SSPCON2 <4>). Cuando se establece este bit, el pin SCL se baja y el contenido del bit de datos de reconocimiento se presenta en el pin SDA. Si el usuario desea generar un reconocimiento, entonces el bit ACKDT debe ser borrado. De lo contrario, el usuario debe establecer el bit ACKDT antes de iniciar una secuencia de Reconocimiento. El generador de velocidad en baudios luego cuenta para un período de reinversión (TBRG) y el pin SCL se desactiva (se coloca alto). Cuando el pin SCL es muestreado alto (arbitraje de reloj), el generador de velocidad en baudios cuenta para TBRG. El pasador SCL se tira hacia abajo. Después de esto, el bit ACKEN se borra automáticamente, el generador de velocidad en baudios se apaga y el módulo MSSP entra en un estado inactivo (Figura 19-25) Bandera de estado de WCOL Si el usuario escribe el SSPBUF cuando se está ejecutando una secuencia de Reconocimiento, entonces WCOL se establece y el contenido del búfer no cambia (la escritura no se produce). DETENER EL TIEMPO DE CONDICIÓN Se establece un bit de parada en el pin SDA al final de una recepción / transmisión al establecer el bit de habilitación de parada, PEN (SSPCON2 <2>). Al final de una recepción / transmisión, la línea SCL se mantiene baja después del borde descendente del noveno reloj. Cuando se establece el bit PEN, el maestro afirmará que la línea SDA está baja. Cuando la línea SDA se muestrea bajo, el generador de velocidad en baudios se vuelve a cargar y cuenta atrás hasta "0". Cuando el Generador de velocidad en baudios se agote, el pin SCL será elevado y un TBRG (Recuento de reinversión del generador de tasa en baudios) más tarde, el pin SDA se desactivará. Cuando el pin SDA se muestra alto mientras SCL es alto, se establece el bit P (SSPSTAT <4>). Un TBRG más tarde, el bit PEN se borra y el bit SSPIF se establece (Figura 19-26). Bandera de estado de WCOL Si el usuario escribe el SSPBUF cuando se está ejecutando una secuencia de detención, entonces se establece el bit WCOL y el contenido del búfer no se modifica (la escritura no se produce).

Operacion del sueño Mientras está en el modo de Suspensión, el módulo I2C puede recibir direcciones o datos y, cuando se produce una coincidencia de direcciones o se realiza una transferencia de bytes completa, active el procesador desde la Suspensión (si la interrupción de MSSP está habilitada). EFECTOS DE UN RESET Un reinicio desactiva el módulo MSSP y termina la transferencia actual. MODO MULTIMASTER En el modo Multi-Master, la generación de interrupciones en la detección de las condiciones de Inicio y Parada permite determinar cuándo está libre el bus. Los bits de parada (P) e inicio (S) se borran de un reinicio o cuando el módulo MSSP está deshabilitado. El control del bus I2C puede tomarse cuando se establece el bit P (SSPSTAT <4>), o el bus está inactivo, con los bits S y P despejados. Cuando el bus está ocupado, habilitar la interrupción MSSP generará la interrupción cuando ocurra la condición de parada. En la operación de maestro múltiple, la línea SDA debe ser monitoreada para arbitraje para ver si el nivel de señal es el nivel de salida esperado. Esta comprobación se realiza de forma incorrecta con el resultado colocado en el bit BCLIF. Los estados donde se puede perder el arbitraje son: • Transferencia de dirección • Transferencia de datos • Una condición de inicio

• Una condición de inicio repetido • Una condición de reconocimiento COMUNICACIÓN MULTIMESTER, COLISIÓN DE AUTOBUSES Y ARBITRAJE DE AUTOBUS

El soporte del modo Multi-Master se logra mediante el arbitraje de bus. Cuando el maestro emite bits de dirección / datos en el pin SDA, el arbitraje tiene lugar cuando el maestro emite un "1" en SDA, al permitir que SDA flote alto y otro maestro afirme un "0". Cuando el pin SCL flota alto, los datos deben ser estables. Si los datos esperados en SDA son un '1' y los datos muestreados en el pin SDA = 0, entonces se ha producido una colisión de bus. El maestro configurará el indicador de interrupción de colisión del bus, BCLIF y restablecerá el puerto I2C a su estado inactivo (Figura 19-27). Si se produjo una transmisión cuando se produjo la colisión del bus, se detiene la transmisión, se borra el indicador BF, se desactivan las líneas SDA y SCL y se puede escribir en el SSPBUF. Cuando el usuario atiende la rutina del servicio de interrupción por colisión del bus y si el bus I2C está libre, el usuario puede reanudar la comunicación al afirmar una condición de inicio. Si una condición de Inicio, Inicio repetido, Parada o Reconocimiento estaba en curso cuando ocurrió la colisión del bus, la condición se cancela, las líneas SDA y SCL se desactivan y los bits de control respectivos en el registro SSPCON2 se borran. Cuando el usuario atiende la rutina del servicio de interrupción por colisión del bus y si el bus I2C está libre, el usuario puede reanudar la comunicación al afirmar una condición de inicio. El maestro continuará monitoreando los pines SDA y SCL. Si se produce una condición de parada, se establecerá el bit SSPIF. La escritura TA en el bit SSPBUF iniciará la transmisión de datos en el primer bit de datos, independientemente de dónde se detuvo el transmisor cuando ocurrió la colisión del bus. En el modo Multi-Master, la generación de interrupciones en la detección de las condiciones de Inicio y Parada permite determinar cuándo está libre el bus. El control del bus I2C se puede tomar cuando el bit P se establece en el registro SSPSTAT, o el bus está inactivo y los bits S y P se borran.

Colisión de autobús durante una condición de arranque Durante una condición de arranque, se produce una colisión de autobús si:

a) SDA o SCL se muestrean bajo al comienzo de la condición de Inicio (Figura 19-28). b) Se toma una muestra baja de SCL antes de que se establezca SDA bajo (Figura 19-29). Durante una condición de inicio, se supervisan los pines SDA y SCL. Si el pin SDA ya está bajo, o el pin SCL ya está bajo, entonces ocurrirá todo lo siguiente: • la condición de inicio es abortada, • el indicador BCLIF está establecido y • el módulo MSSP se restablece a su estado inactivo (Figura 19-28). La condición de inicio comienza con los pines SDA y SCL desactivados. Cuando el pin SDA se toma una muestra alta, el generador de velocidad en baudios se carga desde SSPADD <6: 0> y cuenta regresiva hasta "0". Si el pin SCL se muestrea bajo mientras el SDA es alto, se produce una colisión en el bus porque se supone que otro maestro está intentando manejar un dato '1' durante la condición de inicio. Si el pin SDA se muestrea bajo durante este conteo, el BRG se restablece y la línea SDA se afirma antes (Figura 19-30). Sin embargo, si se muestrea un ‘1’ en el pin SDA, el pin SDA se establece bajo al final del recuento BRG. El generador de velocidad en baudios se vuelve a cargar y cuenta regresiva a "0". Si el pin SCL se muestrea como "0", durante este tiempo no se produce una colisión de bus. Al final de la cuenta de BRG, el pin SCL se afirma bajo. Nota: La razón por la que la colisión del bus no es un factor durante una condición de inicio es que no hay dos maestros de bus que puedan afirmar una condición de inicio al mismo tiempo. Por lo tanto, un maestro siempre hará valer SDA antes que el otro. Esta condición no provoca una colisión del bus porque se debe permitir que los dos maestros arbitren la primera dirección después de la condición de inicio. Si la dirección es la misma, se debe permitir que el arbitraje continúe en la parte de datos, las condiciones de inicio repetido o parada.

Colisión en el autobús durante una condición de arranque repetido Durante una condición de inicio repetido, se produce una colisión de bus si: a) Se muestrea un nivel bajo en SDA cuando SCL pasa de nivel bajo a nivel alto. b) SCL baja antes de que SDA sea bajo, lo que indica que otro maestro está intentando transmitir un dato '1'. Cuando el usuario desactiva SDA y se permite que el pin flote alto, el BRG se carga con SSPADD <6: 0> y cuenta atrás hasta "0". El pin SCL luego se desactiva y cuando se muestrea alto, se muestrea el pin SDA. Si el SDA es bajo, se ha producido una colisión en el bus (es decir, otro maestro está intentando transmitir un dato '0', consulte la Figura 19-31). Si SDA se toma una muestra alta, el BRG se vuelve a cargar y comienza a contar. Si SDA pasa de alto a bajo antes de que se agote el tiempo de espera de BRG, no se produce una colisión de bus porque no hay dos maestros que puedan hacer valer SDA exactamente al mismo tiempo. Si SCL va de alto a bajo antes de que se agote el tiempo de espera de BRG y no se haya confirmado la SDA, se produce una colisión de bus. En este caso, otro maestro está intentando transmitir un ‘1’ durante la condición de inicio repetido (consulte la Figura 19-32). Si, al final del tiempo de espera de BRG, tanto el SCL como el SDA siguen siendo altos, el pin SDA se baja y el BRG se vuelve a cargar y comienza a contar. Al final del recuento, independientemente del estado del pin SCL, el pin SCL se baja y se completa la condición de inicio repetido.

Colisión de autobús durante una condición de parada La colisión del autobús ocurre durante una condición de parada si: a) Una vez que el pin SDA se ha desensamblado y se le ha permitido flotar alto, se toma una muestra baja de SDA después de que el BRG haya caducado. b) Una vez que se ha desactivado el pin SCL, se muestrea bajo SCL antes de que el SDA se ponga alto. La condición de paro comienza con un SDA afirmado bajo. Cuando se muestrea bajo SDA, se permite que el pin SCL flote. Cuando el pin se muestrea alto (arbitraje de reloj), el generador de velocidad en baudios se carga con SSPADD <6: 0> y cuenta atrás hasta "0". Después de que se agote el tiempo de espera de BRG, se muestrea SDA. Si el SDA se muestrea bajo, se ha producido una colisión de bus. Esto se debe a que otro maestro ha intentado controlar un ‘0’ (Figura 19-33). Si el pin SCL se muestrea bajo antes de que se permita que SDA flote alto, un bus se produce colisión Este es otro caso de otro maestro que intenta manejar un '0' de datos (Figura 19-34).

SSPSTAT: MSSP STATUS REGISTER (I2C™ MODE)

SMP bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

CKE

D/A

P

S

R/W

UA

SMP: Slew Rate Control bit In Master or Slave mode: 1 = Slew rate control disabled for Standard Speed mode (100 kHz and 1 MHz) 0 = Slew rate control enabled for High-Speed mode (400 kHz) CKE: SMBus Select bit In Master or Slave mode: 1 = Enable SMBus specific inputs 0 = Disable SMBus specific inputs D/A: Data/Address bit In Master mode: Reserved. In Slave mode: 1 = Indicates that the last byte received or transmitted was data 0 = Indicates that the last byte received or transmitted was address P: Stop bit(1) 1 = Indicates that a Stop bit has been detected last 0 = Stop bit was not detected last S: Start bit(1) 1 = Indicates that a Start bit has been detected last 0 = Start bit was not detected last R/W: Read/Write Information bit(2,3) In Slave mode: 1 = Read 0 = Write In Master mode: 1 = Transmit is in progress 0 = Transmit is not in progress UA: Update Address bit (10-Bit Slave mode only) 1 = Indicates that the user needs to update the address in the SSPADD register 0 = Address does not need to be updated BF: Buffer Full Status bit In Transmit mode: 1 = SSPBUF is full 0 = SSPBUF is empty In Receive mode: 1 = SSPBUF is full (does not include the ACK and Stop bits) 0 = SSPBUF is empty (does not include the ACK and Stop bits)

Note 1: This bit is cleared on Reset and when SSPEN is cleared. 2: This bit holds the R/W bit information following the last address match. This bit is only valid from the

BF

address match to the next Start bit, Stop bit or not ACK bit. 3: ORing this bit with SEN, RSEN, PEN, RCEN or ACKEN will indicate if the MSSP is in Active mode.

SSPCON1: MSSP CONTROL REGISTER 1 (I2C™ MODE)

WCOL bit 7

bit 6

bit 5

bit 4

bit 3-0

SSPOV SSPEN

CKP

SSPM3

SSPM2

SSPM1

SSPM0

WCOL: Write Collision Detect bit In Master Transmit mode: 1 = A write to the SSPBUF register was attempted while the I2C conditions were not valid for a transmission to be started (must be cleared in software) 0 = No collision In Slave Transmit mode: 1 = The SSPBUF register is written while it is still transmitting the previous word (must be cleared in software) 0 = No collision In Receive mode (Master or Slave modes): This is a “don’t care” bit. SSPOV: Receive Overflow Indicator bit In Receive mode: 1 = A byte is received while the SSPBUF register is still holding the previous byte (must be cleared in software) 0 = No overflow In Transmit mode: This is a “don’t care” bit in Transmit mode. SSPEN: Master Synchronous Serial Port Enable bit 1 = Enables the serial port and configures the SDA and SCL pins as the serial port pins(1) 0 = Disables serial port and configures these pins as I/O port pins(1) CKP: SCK Release Control bit In Slave mode: 1 = Release clock 0 = Holds clock low (clock stretch), used to ensure data setup time In Master mode: Unused in this mode. SSPM3:SSPM0: Master Synchronous Serial Port Mode Select bits 1111 = I2C Slave mode, 10-bit address with Start and Stop bit interrupts enabled(2) 1110 = I2C Slave mode, 7-bit address with Start and Stop bit interrupts enabled(2) 1011 = I2C Firmware Controlled Master mode (slave Idle)(2) 1000 = I2C Master mode, clock = FOSC/(4 * (SSPADD + 1))(2) 0111 = I2C Slave mode, 10-bit address(2) 0110 = I2C Slave mode, 7-bit address(2)

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)

GCEN bit 7 bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

ACKSTAT ACKDT

ACKEN

RCEN

PEN

RSEN

SEN

GCEN: General Call Enable bit (Slave mode only) Unused in Master mode. ACKSTAT: Acknowledge Status bit (Master Transmit mode only) 1 = Acknowledge was not received from slave 0 = Acknowledge was received from slave ACKDT: Acknowledge Data bit (Master Receive mode only)(1) 1 = Not Acknowledge 0 = Acknowledge ACKEN: Acknowledge Sequence Enable bit(2) 1 = Initiate Acknowledge sequence on SDA and SCL pins and transmit ACKDT data bit. Automaticallycleared by hardware. 0 = Acknowledge sequence Idle RCEN: Receive Enable bit (Master Receive mode only)(2) 1 = Enables Receive mode for I2C 0 = Receive Idle PEN: Stop Condition Enable bit(2) 1 = Initiate Stop condition on SDA and SCL pins. Automatically cleared by hardware. 0 = Stop condition Idle RSEN: Repeated Start Condition Enable bit(2) 1 = Initiate Repeated Start condition on SDA and SCL pins. Automatically cleared by hardware. 0 = Repeated Start condition Idle SEN: Start Condition Enable/Stretch Enable bit(2) 1 = Initiate Start condition on SDA and SCL pins. Automatically cleared by hardware. 0 = Start condition Idle

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).

Related Documents

Protocolo
May 2020 35
Protocolo
November 2019 58
Protocolo
December 2019 74
Protocolo
August 2019 77
Protocolo
November 2019 35
Protocolo
May 2020 19

More Documents from ""

June 2020 6
Registros.txt
April 2020 1
Registros.txt
June 2020 1
Registros.txt
June 2020 2
Microcontrolador.txt
June 2020 2
Protocolo I2c.docx
June 2020 2