Академический Документы
Профессиональный Документы
Культура Документы
con microcontrolador PIC (35.3) Circuito para captura de seales ECG (20.5) Control de motores DC con microcontroladores PIC (14.3) Sistema de levitacin magntica (13.0) James Clerk Maxwell (10.2) Manejo de display 7 segmentos y teclado matricial (9.0) Corriente alterna (7.3) Circuito para foto-pletismgrafo (6.9) Electroiman (6.8) Circuito impreso (6.2)
En edicin
Anuncios Google I2C Bus I2C I2C RS232 Atmel I2C EEPROM
Me gusta
El modulo MSSP en modo I2C implementa todas las funciones de maestro y esclavo (incluyendo soporte para llamadas generales) y provee interrupciones en los bits START o STOP en hardware, para determinar el estado de bus libre (funciones multimaestro). El modulo MSSP implementa las especificaciones del modo estandar, asi como tambien direccionamiento de 7 bits y 10 bits. Un sistema de filtrado de errores se situa en los pines SCL y SDA cuando el pin es una entrada. Este filtro opera tanto a 100 Khz como a 400 Khz. En el modo de 100 Khz, cuando estos pines son salidas, hay un control en el tiempo de flanco del pin que es independiente de la frecuencia del dispositivo.
varper-tech.com/articulo.php?idart=39
2/24
06/04/12
Grfico 1. Diagrama de bloques para el modulo MSSP. Dos pines son usados para transferencia de datos, estos son el pin SCL, que es el clock, y el pin SDA, que es el de datos. Los pines SLC y SDA son configurados automaticamente cuando se configura el modo I2C. Las funciones del modulo SSP se habilitan al setear el bit SSPEN (SSPCON<5>). El modulo MSSP tiene seis registros para la operacion del modo I2C. Estos son: Registro de control del SSP (SSPCON). Segundo registro de control del SSP (SSPCON2). Registro de estado del SSP (SSPSTAT). Buffer de transmision/recepcin serial (SSPBUFF). Registro de desplazamiento (SSPSR) No es accesible directamente. Registro de direccion del SSP (SSPADD). El registro SSPCON permite el control de la operacion del modulo I2C. Cuatro bits de seleccion de modo (SSPCON<3:0>) permiten seleccionar alguno de los siguientes modos: Modo esclavo (direccionamiento de 7 bits).
varper-tech.com/articulo.php?idart=39 3/24
06/04/12
Modo esclavo (direccionamiento de 10 bits). Modo maestro, clock = OSC/4 (SSPADD + 1). Modos por firmware (proveidos para compatibilidad con otros productos de medio rango). Antes de seleccionar un modo, los pines SCL y SDA deben ser programados como entradas seteando los bits del correspondiente registro TRIS. Seleccionar un modo al setear el bit SSPEN, permite a los pines SCL y SDA ser usados como lineas de datos y de clock. Unos resistores pull-up deben ser colocados externamente para una adecuada operacion del modulo I2C. El bit CKE (SSPSTAT <6>) establece los niveles de los pins SDA y SCL tanto en modo maestro como esclavo. Cuando CKE = 1, los niveles seran conformes a las especificaciones del SMBus. Cuando CKE = 0, estos niveles seran conformes a las especificaciones del protocolo I2C. El registro SSPSTAT muestra el estatus de la transferencia de datos. Esta informacin incluye deteccion de los bits START (S) y STOP (P), especifica si el byte recibido fue direccion o datos. Si el proximo byte es la otra parte de una direccion de 10 bits, y si sera una transferencia de lectura o escritura de datos. SSPBUF es el registro en el que se escriben los datos que se van a enviar o a recibir. El registro SSPSR desplaza los datos que entran o salen del dispositivo. En operaciones de recepcion, el registro SSPBUF y SSPSR crea un receptor con doble buffer. Esto permite la reccepcion del proximo byte antes de leer el ultimo byte de datos recibidos. Cuando un byte completo es recibido, se transfiere al registro SSPBUF y la banderilla SSPIF se setea. Si otro byte es recibido antes de que el registro SSPBUF sea leido, ocurre un desbordamiento y el bit SSPOV (SSPCON <6>) se setea y el byte en SSPSR se pierde. El registro SSPADD retiene la direccion del dispositivo esclavo. En modo de 10 bits, el usuario necesita escribir el byte alto de la direccion (1 1 1 1 0 A9 A8 0). Luego se cargara el byte bajo de la direccion (A7: A0).
Modo esclavo
En modo esclavo los pines SCL y SDA deben ser configurados como entradas. El modulo MSSP trabajara sobre el estado de entrada con los datos de salida, cuando sea requerido (transmisor esclavo). Cuando una direccion coincide, o los datos transferidos despues de una direccion, el hardware automaticamente generara un pulso de reconocimiento (ACK), y cargara el registro SSPBUF con el valor recibido actualmente en el registro SSPSR. Hay ciertas condiciones que causaran que el modulo MSSP no entregue una seal de reconocimiento ACK. Esto sucesi si pasa lo siguiente: a. El bit de buffer full (SSPSTAT<0>) se setea antes de que se haya recibido una transferencia. b. El bit de desbordamiento SSPOV (SSPCON<6>) se setee antes de que una transferencia haya sido recibida. Si el bit BF se setea, el valor del registro SSPSR no sera cargado en el registro SSPBUF, pero SSPIF y SSPOV seran seteadas. La Tabla 1 muestra que pasa cuando un byte es recibido, basados en los bits de estado BF y SSPOV. Las celdas sombreadas muestran la condicion donde el software de usuario no limpia propiamente las condiciones de desbordamiento. El bit BF es limpiado al leer el registro SSPBUF, mientras que SSPOV es limpiado en software.
Direccionamiento
Una ves que el modulo MSSP ha sido habilitado, espera que una condicion START ocurra. Seguido de una condicion START, los 8 bits son movidos al registro SSPSR. Todos los bits entrantes son muestreados en el flanco de subida de la linea de reloj (SCL). El valor del registro SSPSR es comparado con el valor del registro SSPADD. La direccion es comparada en el flanco de bajada de el octavo pulso de reloj. Si la direccion coincide y los bits BF y SSPOV estan en
varper-tech.com/articulo.php?idart=39 4/24
06/04/12
bajo, los siguientes eventos ocurren: a. El valor del registro SSPSR es cargado en el registro SSPBUF en el flanco de bajada del octavo pulso de reloj. b. El bit de buffer full BF se pone en uno en el flanco de bajada del octavo pulso de reloj. c. Un pulso de reconocimiento (ACK) es generado. d. La banderilla de interrupcion del SSP, SSPIF (PIR<3>) se pone en uno en el flanco de bajada del noveno pulso de reloj. En los modos de direccionamiento a 10 bits, se necesita recibir dos bytes. Los cinco bits mas significativos del primer byte de direccion especifica si es una direccion de 10 bits. El bit R/W (SSPSTAT <2>) debe ser puesto como escritura para que el dispositivo esclavo reciba el segundo byte de direccion. Para las direcciones de 10 bits. El primer byte debe ser igual a 1 1 1 1 0 A9 A8 0, donde A9 y A8 son los dos bits mas significativos de la direccion. La secuencia de eventos para direcciones de 10 bits se describe de la siguiente forma, los pasos 7 9 son para transmisores esclavos: 1. Se recibe el primer byte de direccion, los bits SSPIF, BF y UA (SSPSTAT<1>) son puestos en alto. 2. Se actualiza el registro SSPADD con el primer byte de direccion (se limpia el bit UA y se libera la linea SCL). 3. Se lee el registro SSPBUF (se pone en bajo el bit BF) y se limpia la banderilla SSPIF. 4. Se recibe el segundo byte de direccion, los bits SSPIF, BF y UA se ponen en alto. 5. Se actualiza el registro SSPADD con el segundo byte de direccion. Esto limpiara el bit UA y liberara la linea SCL. 6. Se lee el registro SSPBUF (se limpia el bit BF) y se limpia la banderilla SSPIF. 7. Se recibe una condicion de inicio repetida. 8. Se recibe el primer byte de direccion, los bits SSPIF y BF se ponen en alto. 9. Se lee el registro SSPBUF y se limpia la banderilla SSPIF.
varper-tech.com/articulo.php?idart=39
5/24
06/04/12
Grfico 2. Formas de onda para el modo esclavo Bits de estado de recepcin Genera un pulso de datos SSPSR SSPBUF NACK BF SSPOV 0 1 1 0 0 0 1 1 Si No No Si Si No No Si Setea el bit SSPIF (ocurre interrupciones si estan habilitadas) Si Si Si Si
Tabla 1: Acciones ante bytes recibidos. Nota: las celdas sombreadas muestran las condiciones donde el software del usuario no limpia adecuadamente las condiciones de desbordamiento.
varper-tech.com/articulo.php?idart=39
6/24
06/04/12
Grfico 2. Formas de onda en una transmisin (direccionamiento de 7 bits). Una interrupcion por el SSP se genera por cada transferencia de datos. La banderilla SSPIF debe ser limpiado en software y el registro SSPSTAT se usa para determinar el estado de una transferencia. El bit SSPIF se setea en el flanco de bajada del noveno pulso de reloj. Para un transmisor esclavo, el pulso ACK desde el receptor maestro es visto en el flanco de subida del noveno pulso de reloj que entra en el pin SCL. Si la linea SDA esta en alto (NACK), entonces la transferencia se completa. Cuando un pulso NACK es establecido por el esclavo, la logica del esclavo se resetea y el esclavo monitorea otra ocurrencia de una condicion de START. Si la linea SDA estaba en bajo, los datos deben ser cargados en el registro SSPBUF, que tambien carga el registro SSPSR. Entonces el pin SCL deberia ser habilitado al setear el bit CKP.
varper-tech.com/articulo.php?idart=39
7/24
06/04/12
Modo maestro
La operacion en modo maestro es soportada por generacion de interrupciones en la deteccion de un bit START y STOP. Los bits son limpiados en un reset, o cuando el modulo MSSP es deshabilitado. El control del bus I2C puede ser tomado cuando P es seteado, o el bus esta inactivo, o tanto el bit S y el bit P en bajo.
varper-tech.com/articulo.php?idart=39
8/24
06/04/12
Modo multimaestro
En modo multimaestro, la generacion de interrupcion al detectar condiciones START o STOP permite determinar cuando el bus esta libre. Los bits de STOP (P) y START (S) son limpiados cuando ocurre un RESET o el modulo MSSP es deshabilitado. El control de bus I2C puede ser tomado cuando el bit P es seteado, o el bus esta inactivo y tanto el bit S y el bit P estan en bajo. Cuando el bus esta ocupado, al habilitar las interrupciones por SSP se generaran cuando una condicion de STOP ocurra. Los siguientes eventos causaran que la banderilla SSPIF sea puesta en uno: Una condicion START. Una condicion STOP. Un byte transferido o recibido. Una transmision de una seal de reconocimiento. Una condicion START repetida. En operacion multimaestro, la linea SDA debe ser monitoreada de forma arbitraria para ver si los niveles de seal son los esperados. Esta verificacion es desarrollada en hardware, con el resultado colocado en el bit BCLIF. Los estados donde el chequeo se puede perder son: Transferencia de direcciones. Transferencia de datos. Una condicion de START. Una condicion de START repetida. Una condicion de reconocimiento.
06/04/12
El dispositivo maestro genera todos los pulsos de reloj y las condiciones de START o STOP. Una transferencia se finaliza con una condicion de STOP o con una condicion de START repetida. Una ves que una condicion de START sea repetida, esta tambien es el comienzo de la proxima transferencia y el bus I2C no sera liberado aun. En modo de transmision maestro, los datos son puestos en la salida a traves de la linea SDA, mientras que SCL genera el reloj. El primer byte transmitido contiene la direccion del esclavo al cual seran enviados los datos y un bit R/W. En este caso, el bit R/W sera un cero logico. Los datos son transmitidos ocho bits por vez. Despues de que cada byte es transmitido una seal de reconocimiento es recibida. Las condiciones de START y STOP para indicar el inicio y el final de una transferencia. En modo receptor maestro, el primer byte transmitido contiene la direccion del dispositivo al cual sera transmitido y el bit R/W que en este caso sera un uno logico. Los datos son recibidos por medio de la linea SDA, mientras que SCL genera la seal de reloj. Los datos son recibidos ocho bits a la ves. Despues de que cada byte es recibido, un bit de reconocimiento es transmitido. Las condiciones START y STOP indican el comienzo y el final de una transmision. El generador de baud rate usado para la operacion en modo SPI no se usa para establecer la frecuencia en el pin SCL tanto para 100 Khz, 400 Khz o 1 Mhz. El valor de recarga generador de baud rate es contenido en los 7 bits mas bajos del registro SSPADD. El generador de baud rate automaticamente comenzara a contar en una escritura al registro SSPBUF. Una ves que la operacion se ha completado (por ejemplo, transmision de los ultimos bits de datos seguidos de un ACK), el reloj interno automaticamente parara de contar y el pin SCL permanecera en el ultimo estado. Una secuencia tipica de transmision debieria ser de la siguiente forma: a. El usuario genera una condicion de START poniendo en alto el bit SEN en el registro SSPCON2. b. SSPIF es puesto en alto. El modulo esperara el tiempo de inicio requerido antes de que otra operacion tome lugar. c. El usuario carga el registro SSPBUF con la direccion a transmitir. d. La direccion es enviada por el pin SDA hasta que todos los 8 bits sean transmitidos. e. El modulo MSSP lee el bit ACK desde el dispositivo esclavo y escribe su valor en el registro SSPCON2 (SSPCON2<6>). f. El modulo MSSP genera una interrupcion al final del noveno pulso de reloj seteando SSPIF. g. El usuario carga el registro SSPBUF con el byte de datos. h. El dato es enviado por el pin SDA hasta que los 8 bits sean transmitidos. i. El modulo MSSP espera una seal ACK desde el dispositivo esclavo y escribe el valor en el registro SSPCON2 (SSPCON2<6>). j. El modulo MSSP genera una interrupcion al final del noveno ciclo de reloj seteando el bit SSPIF. k. El usuario genera una condicion de STOP seteando bit PEN en el registro SSPCON2. l. Una interrupcion es generada una ves que la condicion STOP es completada.
06/04/12
significativos del registro SSPAD (Figura 10). cuando el BRG es cargado con este valor, este decrementa hasta abajo y se detiene hasta que otra recarga tenga lugar. El conteo del BRG es decrementado dos veces por ciclo de instruccion, en el tiempo Q2 y Q4. En el modo maestro, el BRG es recargado automaticamente. Si la verificacion arbitraria del reloj esta tomando lugar, el BRG sera recargado cuando el pin SCL sea muestreado en alto (). Nota: Baud Rate = Fosc / (4 * (SSPAD + 1))
Grfico 5. Tiempos para los muestreos arbitrarios del generador de baud rate. Condicin de START en modo maestro Para iniciar una condicion de START el usuario setea el bit SEN (SSPCON2<0>). Si los pines SDA y SCL son muestreados en alto, el generador de baud rate es recargado con el contenido de SSPADD <6:0> y empieza el conteo. Si SCL y SDA son muestreados ambos en alto cuando el tiempo del generador de baud rate se acaba, el pin SDA es puesto en bajo. La accion de SDA comienza poniendose en bajo mientras SCL esta en alto y entonces se tiene una condicion de START y causa que el bit S sea puesto en uno. Siguiendo esto, el generador de baud rate es recargado con el contenido de SSPADD y se retoma su conteo. Cuando el tiempo del generador de baud rate se acaba, el bit SEN automaticamente es limpiado por el hardware. El generador de baud rate es suspendido, dejando la linea SDA en bajo, y la condicion de START se completa.
varper-tech.com/articulo.php?idart=39
11/24
06/04/12
Grfico 6. Primera condicin START. Nota: si al comienzo de una condicion de START los pines SDA y SCL ya han sido muestreados en bajo, o si durante la condicion de START la linea SCL es muestreada en bajo antes de que la linea SDA sea puesta en bajo, una colision en el bus ocurre. La banderilla BCIF se pone en alto y la condicion START es abortada y el modulo es reseteado en su estado inactivo.
varper-tech.com/articulo.php?idart=39
12/24
06/04/12
Grfico 7. Repeticin de una condicin START. Nota: 1. Si RSEN es alterado mientras otro evento esta en progreso, no tendra efecto alguno. 2. Una colision de bus durante una condicion START repetida ocurrira si: SDA es muestreado en bajo cuando SCL va de bajo a alto. SCL va a un nivel bajo antes de que SDA sea puesta en bajo. Esto puede indicar que otro maestro esta intentando transmitir un dato. Inmediatamente despues de que la banderilla SSPIF es puesta en alto, el usuario debe escribir el registro SSPBUF con la direccion de 7 bits o de 10 bits, tal sea el caso. Despues de que los primeros ocho bits son transmitidos y un ACK es recibido, el usuario debe transmitir unos o bits adicionales de direccion (en modo de 10 bits) o de datos (en modo de 7 bits).
varper-tech.com/articulo.php?idart=39
13/24
06/04/12
Grfico 8. Transmisin en modo maestro. Despus de escribir en el registro SSPBUF, cada bit de direccion sera enviado en cada blanco de bajada de SCL hasta que todos los bits, incluyendo el bit R/W, sean transmitidos. En el flanco de bajada del octavo pulso de reloj, el maestro debera liberar el pin SDA, permitiendo al esclavo responder con una seal de reconocimiento. En el flanco de bajada del noveno pulso de reloj, el maestro debera muestrear el pin SDA para ver si la direccion fue reconocida por el esclavo. El estado del bit de reconocimiento es cargado en el bit ACKSTAT. Seguido del flanco de bajada del noveno pulso de reloj de la transmision de la direccion, el bit SSPIF es puesto en alto, la banderilla BF es limpiada y el generador del baud rate es apagado hasta que otra escritura tome lugar en el registro SSPBUF, reteniendo en bajo el pin SCL y liberando SDA.
06/04/12
varper-tech.com/articulo.php?idart=39
15/24
06/04/12
Grfico 10. Condicin de STOP en modo transmisin o recepcin. Siempre y cuando el firmware decida tomar control del bus, primero se debe determinar si el bus esta ocupado chequeando los bits S y P en el registro SSPSTAT. Si el bus esta ocupado, entonces el CPU puede ser interrumpido cuando un bit STOP ha sido detectado.
Grfico 11. Formas de onda para una colisin en el bus para transmisiones y reconocimiento.
varper-tech.com/articulo.php?idart=39 16/24
06/04/12
Si una transmision estaba en progreso cuando la colision en el bus ha ocurrido, la transmision es detenida, la banderilla BF es limpiada, las lineas SDA y SCL son puestas en alto y el registro SSPBUF puede ser escrito. Cuando el usuario sirve a una interrupcion por colision del bus y si el bus esta libre, el usuario puede reestablecer la comunicacin al iniciar una condicion START. Si una condicion START, START repetida, STOP o reconocimiento estaba en progreso cuando ocurrio la colision en el bus, las condiciones son abortadas, el pin SCL y SDA son liberadas y los bits de control respectivos en el registro SSPCON2 son limpiados. Cuando el usuario sirve a una rutina de interrupcion por colision en el bus y si el bus esta libre, el usuario puede reestablecer la comunicacin al iniciar una condicion START. El maestro continuara monitoreando las lineas SDA y SCL y si una condicion STOP ocurre, SSPIF sera puesto en alto. Una escritura en el registro SSPBUF empezara la transmision de datos sin importar donde la transmision termino o cuando la colision en el bus ocurrio. En odo multimaestro, la generacion de interrupciones en la deteccion de condiciones START y STOP permite la determinacion de cuando el bus esta libre. El control del bus I2C puede ser tomado cuando el bit P es puesto en alto o el bus esta inactivo y los bits S y P estan en bajo. Colision de bus durante una condicion de START Durante una condicion de START, una colision de bus ocurre si: SDA o SCL son muestreados en bajo al comienzo de la condicion START (Figura 18). SCL es muestreado en bajo antes de que la linea SDA sea muestreada en bajo (Figura 19).
Grfico 12. Colisin en el bus durante una condicin START (solamente SDA).
varper-tech.com/articulo.php?idart=39
17/24
06/04/12
Grfico 13. Colisin en el bus durante una condicin START (SCL = 0). Durante una condicion de START, tanto la linea SDA como la linea SCL son monitoreados. Si tanto el pin SDA o el pin SCL estan todavia en bajo, entonces estos eventos ocurren: La condicion START es abortada, Y el bit BCLIF es puesta en alto, y el modulo SSP es reseteado a su estado inactivo (Figura 18). La condicion START comienza con SDA y SCL en alto. Cuando el pin SDA es muestreado en alto, el generador de baud rate es cargado desde SSPADD <6:0> y cuenta hasta 0. si el pin SCL es muestreado en bajo mientras SDA esta en alto, una colision en el bus ocurre, por eso se asume que otro maestro esta tratando de transmitir un dato 1 durante una secuencia de START. Si el pin SDA es muestreado en bajo durante este conteo, el BRG es reseteado y la linea SDFA es soltada (Figura 20). Sin embargo si un uno es muestreado en SDA, este sera puesto en bajo al final del conteo de BRG. El generador de baud rate es entonces recargado y cuenta hasta 0, una colision en el bus no ocurre. Al final del conteo del BRG el pin SCL es puesto en bajo. Nota: la razon por la que la colision en el bus no es un factor durante la condision de SART es que dos maestros no pueden iniciar una condicion START exactamente al mismo tiempo. Por consiguiente, un maestro siempre inicia SDA antes que otro. Esta condicion no causa una colision en el bus, debido a que dos maestros deben ser capaces de testear la primera direccion despues de una condicion de START. Si la direccion es la misma el muestreo debe ser permitido para continuar en la porcion de datos, START repetido o condicion de STOP.
varper-tech.com/articulo.php?idart=39
18/24
06/04/12
Grfico 14. Reset en BRG debido a una colisin en SDA durante una condicin START.
varper-tech.com/articulo.php?idart=39
19/24
06/04/12
Grfico 15. Colisin de bus durante una condicin START repetida (caso 1).
Grfico 16. Colisin de bus durante una condicin START repetida (caso 2).
06/04/12
Grfico 17. Colisin de bus durante una condicin STOP (caso 1).
Grfico 18. Colisin de bus durante una condicin STOP (caso 2).
06/04/12
La capacitancia es la total del bus, las conexiones y los pines. Esta capacitancia limita el maximo valor de Rp debido al tiempo de levantamiento especificado. El bit SMP controla el tiempo de levantamiento. Este bit en el registro SSPSTAT controla el tiempo de levantamiento de los pines I/O cuando estan en modo I2C (maestro o esclavo).
Artculos relacionados
varper-tech.com/articulo.php?idart=39
22/24