MICROCONTROLADORES PIC Bienvenidos - Clase 8 Protocolo de Comunicación I 2 C. Semestre I de 2010 Adaptado Por: Lewin Andrés López
Preámbulo Protocolo entre periféricos: conjunto de reglas o normas para el intercambio de información. Para desarrollar software: Detalles del Protocolo. Hardware y software relacionado. Funcionamiento del mismo. Protocolos Serial UART, SPI (Interfaz de periféricos serie), USB, I 2 C, I 2 S,
Preámbulo La idea radica en: Si el MPU/MCU/DSP no cuenta con un módulo que maneje el protocolo desarrollar módulo de software que lo supla. Emplear metodología de eventos, interrupciones Objetivo principal de la clase Conocer un protocolo común. Distinguir sus principales características. Desarrollar el software necesario para manipular el protocolo.
Qué veremos hoy? Introducción al Protocolo I 2 C. Hardware y Términos. Funcionamiento del Protocolo. Memoria EEPROM I 2 C. Ejemplos en uc PIC.
Cómo aprendo más? Jonathan Valvano, Developing Embedded Software in C Using ICC11/ICC12/Hiware. Foros sobre Microcontroladores PIC. C for Embedded Systems. Academia Freescale Semiconductor para Profesores 2004. Documentación sobre los diferentes periféricos: LCDs, Serial, I2C, TIMERs. En el taller No. 4. Memorias Seriales EEPROM.
Y Ahora? I 2 C Agenda Protocolo I 2 C Protocolo I 2 C Hardware y términos Funcionamiento I 2 C
Inter-Integrated Circuit I 2 C Protocolo diseñado para comunicar diferentes circuitos que trabajan a velocidades relativamente bajas. Desarrollado por Phillips originalmente para la comunicación entre diferentes dispositivos dentro de los TV. Es un bus de solo dos líneas, donde los dispositivos se comunican de manera serial y sincronizada (Bus Síncrono).
Inter-Integrated Circuit I 2 C Aplicaciones Memorias EEPROM. Reloj de tiempo real. Sensores. Controladores de LCD. Microcontroladores. Otros. También se utiliza dentro de Sistemas Embebidos para comunicar periféricos.
Inter-Integrated Circuit I 2 C Líneas de Comunicación. : Línea de reloj para sincronización. : Línea por donde van los datos. Línea de referencia. P1 MCU, MPU, DSP o señal de Reloj o señal de Datos P2 MCU, MPU, LCD, MEM, RTC
Inter-Integrated Circuit I 2 C Dispositivos El bus permite tener varios dispositivos conectados. Configuración Maestro/Esclavo. Maestro Genera señal de sincronismo. Transferencia de datos: hacia/desde esclavo. Esclavo Comandado por el Maestro. Envía o recibe datos cuando el Maestro lo solicita.
Inter-Integrated Circuit I 2 C Varios periféricos conectados al BUS. Algunos pueden ser Maestro/Esclavo, otros solo son esclavos. P1 P2 P3 P4 MAESTRO SOLO EAVO EAVO MAESTRO EAVO SOLO EAVO
Inter-Integrated Circuit I 2 C El periférico P2 (Maestro) se apodera del Bus, desde ahora él es quien genera la señal de reloj. Los demás son Esclavos. P1 P2 P3 P4 P1 P3 P4 MAESTRO MAESTRO SOLO SOLO EAVO EAVO EAVO EAVO EAVO EAVO EAVO
Inter-Integrated Circuit I 2 C El periférico P2 (Maestro) establece comunicación con P4 (Esclavo) enviando n tramas. P1 P2 P3 P4 P1 P3 P4 MAESTRO MAESTRO SOLO SOLO EAVO EAVO EAVO EAVO EAVO EAVO EAVO
Inter-Integrated Circuit I 2 C El periférico P2 (Maestro) establece comunicación con P4 (Esclavo) recibiendo n tramas. P1 P2 P3 P4 P1 P3 P4 MAESTRO MAESTRO SOLO SOLO EAVO EAVO EAVO EAVO EAVO EAVO EAVO
Inter-Integrated Circuit I 2 C P2 Libera el Bus. P1 vuelve a ser un Maestro potencial. P3 y P4 esperan a que P1 o P2 los seleccionen. P1 P2 P3 P4 P1 P3 P4 MAESTRO MAESTRO SOLO SOLO EAVO EAVO EAVO EAVO EAVO EAVO EAVO
Inter-Integrated Circuit I 2 C Detección de Errores. El protocolo ofrece una forma sencilla de determinar errores. Bit de Acknowledgment o Reconocimiento. Otras especificaciones del protocolo. Velocidad de Transmisión: Modo Estándar: 100khz ó 100kbps. Modo Rápido: 400khz ó 400kbps. Modo de Alta Velocidad: 3.4MHz ó 3.4Mbps. Consideraciones!!!
Y Ahora? Agenda I 2 C Protocolo Hardware y I 2 C términos Hardware y términos Funcionamiento I 2 C
Hardware y términos Las líneas y son del tipo drenador abierto (Open-Drain). Equivalente a Colector Abierto (Open- Colector). Es necesario conectar sus Drenadores al voltaje positivo de la fuente. Se requiere de resistencias de Pull-Up (4.7k - 10k) para garantizar nivel alto.
Hardware y términos
Hardware y términos P1 no hace uso del bus: Periférico 1 VDD El suiche permanece abierto. Si nadie usa el bus, cada línea tendrá voltaje VDD. P1 toma el Bus y pone en 0V. Observe el Suiche. Lo mismo para. Ahora, P1 pondrá 5V en. Observe el suiche. Si otro periférico pone 0V en, no hay corto. _RX _TX _RX _TX
Hardware y términos
Hardware y términos Conexión de Periféricos 10k-4,7k VDD DEVICE 1 DEVICE 2 DEVICE n
Hardware y términos Maestro (Master) Establece la señal de reloj. Establece la dirección de los datos. Controla a los esclavos. Esclavo (Slave) Incapaz de generar la señal de. Recibe instrucciones y reloj del maestro. Bus Desocupado (Bus Free) Las líneas y están inactivas (nivel alto).
Hardware y términos Dato Válido (Valid Data) El dato puesto en debe ser estable mientras está en nivel lógico alto. Comienzo (Start) Ocupación del bus por parte del maestro, haciendo uso de y. Parada (Stop) Liberación del bus por parte del maestro que lo está utilizando.
Hardware y términos Formato de Datos (Data Format) Relacionado con la forma de enviar datos de maestro a esclavo y Viceversa. Dirección (Address) Relacionado con la forma en que el maestro puede dirigirse a un esclavo. Lectura/Escritura (Bit de R/W) Es un bit dentro de la dirección usado para indicarle al esclavo que el maestro va a escribir/leer datos en/de él.
Y Ahora? Agenda HW Protocolo I 2 C Hardware Funcionamiento y términos I 2 C Funcionamiento I 2 C
Funcionamiento I 2 C Se utilizan las dos líneas y. Por van los datos. Por va el reloj de sincronización. La transmisión se hace en tramas de 8 Bits con 1 Bit adicional para el reconocimiento o Acknowledgment. El protocolo define la forma en que el maestro inicia y finaliza la transmisión.
Funcionamiento I 2 C Formato de Transmisión Trama de 8 bits para datos con un noveno bit de ACK. El ACK lo hace el Esclavo si el Maestro escribe los 8 bits. El ACK lo hace el Maestro si el Esclavo escribe los 8 bits. Dicha trama va sobre la línea y podrá tenerse una transición siempre que esté en 0 lógico. D7 D6 D5 D4 D3 D2 D1 D0 ACK MSB LSB
Funcionamiento I 2 C Condiciones de START y STOP Propiamente son violaciones a la condición de Dato Válido. El START se hace en el momento en que el Maestro selecciona un Esclavo. El STOP se lleva a cabo cuando el Maestro va a liberar el Bus. Condición de START Condición de STOP
Funcionamiento I 2 C Seleccionando un periférico: Cada periférico tiene una dirección de 7 ó 10 bits. Estando el bus libre, el maestro genera un START. A continuación envía la dirección junto con el bit R/W. R/W = 0, Maestro va a escribir datos en Esclavo. R/W = 1, Maestro va a leer datos desde el Esclavo. A6 A5 A4 A3 A2 A1 A0 R/W ACK MSB LSB
Funcionamiento I 2 C Seleccionando un periférico: Si el periférico está en el bus debe responder con un ACK en 0. Causas de no respuesta: El periférico no está en el Bus. El periférico está ocupado (EEPROM escribiendo). El periférico tiene problemas. Si no hay respuesta, el Maestro finaliza con condición de STOP.
Funcionamiento I 2 C Si el Esclavo respondió con ACK = 0 y el Maestro va a escribir en el Esclavo (R/W = 0 ) Se escriben n tramas de 8 bits, esperando en cada una, reconocimiento del esclavo ACK = 0. Cuando se quiera finalizar, el Maestro envía condición de STOP. El Maestro puede generar una nueva condición de START sin condición de STOP: Escoger otro periférico. Cambiar R/W sobre el periférico.
Funcionamiento I 2 C Selección y Escritura (Un solo dato) A6 A5 A4 A3 A2 A1 A0 0 ACK START MSB LSB Generado por Maestro D7 D6 D5 D4 D3 D2 D1 D0 ACK MSB Generado por Maestro LSB Generado por Esclavo Generado por Esclavo STOP
Funcionamiento I 2 C Si el Esclavo respondió con ACK = 0 y el Maestro va a leer desde el Esclavo (R/W = 1 ) Se leen n tramas de 8 bits, generando en cada una el bit de reconocimiento ACK = 0. Cuando se quiera finalizar, el Maestro envía condición de STOP con el ACK previo en 1. El Maestro puede generar una nueva condición de START sin condición de STOP: Escoger otro periférico. Cambiar R/W sobre el periférico.
Funcionamiento I 2 C Selección y Lectura (Un solo dato) A6 A5 A4 A3 A2 A1 A0 1 ACK START MSB LSB Generado por Maestro D7 D6 D5 D4 D3 D2 D1 D0 ACK MSB Generado por Esclavo LSB Generado por Maestro Generado por Esclavo STOP
Funcionamiento I 2 C Cómo se realiza la escritura de múltiples datos? Cómo se realiza la lectura de múltiples datos? Cómo se pasa de escritura a lectura sin condición de STOP? Cómo se selecciona otro periférico desde el mismo Maestro sin utilizar STOP?
Resumiendo un poco Protocolo I 2 C P1 P1 MAESTRO EAVO EAVO P2 MAESTRO EAVO P3 P3 SOLO EAVO EAVO P4 P4 SOLO EAVO EAVO
Resumiendo un poco Protocolo I 2 C 10k-47k VDD DEVICE 1 DEVICE 2 DEVICE n
Resumiendo un poco Protocolo I 2 C D7 D6 D5 D4 D3 D2 D1 D0 ACK MSB LSB Condición de START Condición de STOP
Terminando de resumir A6 A5 A4 A3 A2 A1 A0 R/W ACK START MSB LSB Generado por M/S D7 D6 D5 D4 D3 D2 D1 D0 ACK MSB Generado por M/S LSB Generado por S/M Generado por S/M STOP
Memoria EEPROM I 2 C Se tienen varias referencias: 24LC02 ó 24LC02B 24LC16 ó 24LC16B 24LC128 ó 24LC128B 24LC256 y muchas más. Las anteriores son memorias EEPROM de 2k, 16k, 128k y 256k bits. El tamaño en bytes será de 256 bytes, 2kbytes, 16kbytes y 32kbytes respectivamente.
Memoria EEPROM I 2 C Direccionando la Memoria (Periférico). START Cada memoria tiene una dirección de 7 bits. Se envía después de la condición de START o RE- START. DA = Device Address. R/W: Indica de donde a donde se dirige la próxima trama. M>S o S>M. DA6 DA5 DA4 DA3 DA2 DA1 DA0 R/W ACK MSB Generado por Maestro LSB Generado por Esclavo
Memoria EEPROM I 2 C Direccionando la Memoria (Periférico). Normalmente, se compone de 4 bits de ID y 3 bits para: Selección de memoria física (1 0 1 0 A2 A1 A0). Selección de bloque en de la memoria (1 0 1 0 B2 B1 B0). A0/NC A1/NC A2/NC GND 24LCXX VDD WP $000 $0FF $100 $1FF $200 $2FF $300 $3FF Bloque 0 256 BYTES Bloque 1 256 BYTES Bloque 2 256 BYTES Bloque 3 256 BYTES $400 $4FF $500 $5FF $600 $6FF $700 $7FF Bloque 4 256 BYTES Bloque 5 256 BYTES Bloque 6 256 BYTES Bloque 7 256 BYTES
Memoria EEPROM I 2 C Selección de un registro de la memoria. Para memorias de 256 bytes. Después de enviar dirección de periférico se envía dirección del registro donde se va a escribir. Previamente R/W debe haberse enviado como 0. El valor A7..A0 escoge uno de los MSB 256 registros. A7 A6 A5 A4 A3 A2 A1 A0 ACK Generado por Maestro Byte 00 Byte 01 Byte 02 LSB Byte FE Byte FF Generado por Esclavo
Memoria EEPROM I 2 C Selección de un registro de la memoria. Para memorias con más de 256 bytes. Conformación por bloques de memoria de 256 bytes. El bloque se selecciona usando otra trama de dirección. Trama de 8 bits, para seleccionar entre 1 y 256 bloques. Utilizar parte de la dirección del dispositivo para selección del bloque: A6 A5 A4 A3 B2 B1 B0 R/W. Para el anterior entre 1 y 8 bloques.
Memoria EEPROM I 2 C Selección de un registro de la memoria. Memoria 24LC08: 8 kbits = 1024 bytes. 4 Bloques. START + 1 0 1 0 X 0 1 R/W: Bloque 1. Dirección a escribir en el bloque 1: $20. Bloque 0 256 BYTES $1E $1F $20 256 $21 BYTES Bloque 1 Bloque 2 256 BYTES Bloque 3 256 BYTES Bloque 1: 256 Bytes
Memoria EEPROM I 2 C Selección de un registro de la memoria. 24LC02, memoria de 256 Bytes. Trama 1 0 1 0 A2 A1 A0. Luego se envía Dir. Registro. 1 0 1 0 1 1 0. Luego se envía trama con dir. $00 a $FF. 1 0 1 0 0 1 0. Luego se envía trama con dir. $00 a $FF 0V A0 VDD 0V A0 VDD 5V 0V A1 A2 24LC02 WP 5V 5V A1 A2 24LC02 WP GND GND
Memoria EEPROM I 2 C Selección de un registro de la memoria. 24LC04, memoria de 512 Bytes. Trama 1 0 1 0 A2 A1 B0. Luego se envía Dir. Registro. 1 0 1 0 1 1 0. Luego se envía trama con dir. $00 a $FF. 1 0 1 0 0 1 1. Luego se envía trama con dir. $00 a $FF 5V 0V NC A1 A2 GND VDD Bloque 0 256 BYTESWP 24LC04 Bloque 1 256 BYTES NC 5V A1 24LC04 5V A2 Bloque 1 GND VDD Bloque 0 256 BYTESWP 256 BYTES
Memoria EEPROM I 2 C Selección de un registro de la memoria. 24LC16, memoria de 2048 Bytes. Trama 1 0 1 0 B2 B1 B0. Luego se envía Dir. Registro. Dir: $10E. 1 0 1 0 0 0 1. Luego se envía trama $0E. Dir: $620. 1 0 1 0 1 1 0. Luego se envía trama $20. NCBloque 0 256 BYTES NC Bloque 1 256 BYTES NC Bloque 2 256 BYTES Bloque 3 GND 256 BYTES 24LC16 Bloque VDD 4 256 BYTES Bloque WP 5 256 BYTES Bloque 6 256 BYTES Bloque 7 256 BYTES
Memoria EEPROM I 2 C Escribir un Byte. Enviar trama de 8 bits de datos. Finalizar con condición de STOP. Múltiples datos. Tramas sucesivas de 8 bits, en la última se envía STOP. D7 D6 D5 D4 D3 D2 D1 D0 ACK MSB Generado por Maestro LSB Generado por Esclavo STOP
Memoria EEPROM I 2 C Múltiples datos. La memoria se divide en páginas de 8, 16 o más bytes. Para la escritura, la memoria incluye un buffer de acuerdo al tamaño de la página. 24LC04. 4kbits = 512 Bytes = 32 Pages/16 Bytes. Page 0 Page 1 Page 2 Page 3 Page 4 Page 5 Page 31 Byte 32Byte 33 Byte 46Byte 47
Memoria EEPROM I 2 C Múltiples datos: Cuidado con las páginas!!! Suponer una memoria de 256 bytes con 32 páginas de 8 bytes. Página 1. Buffer y Flash. Write $08. $03, $A3, $13, $FE Stop. Write $14. $AB, $12, $07. Stop. Buf $03 $070 Buf $A31 Buf $132 Buf $FE3 Buf 4 Buf 5 Buf $AB6 Buf $127 Buffer RAM Byte $03 $078 Byte $A39 Byte $1310 Byte $FE11 Byte 12 Byte 13 Byte $AB14 Byte $1215 Memoria Flash
Memoria EEPROM I 2 C Escritura de $45 (24LC02 = 1 0 1 0 A2 A1 A0) en $3E 1 0 1 0 A2 A1 A0 0 ACK START 0 0 1 1 1 1 1 0 ACK 0 1 0 0 0 1 0 1 ACK STOP
Memoria EEPROM I 2 C Escritura de $72 (24LC16 = 1 0 1 0 B2 B1 B0) en $23A 1 0 1 0 0 1 0 0 ACK START 0 0 1 1 1 0 1 0 ACK 0 1 1 1 0 0 1 0 ACK STOP
Memoria EEPROM I 2 C Escribir en $A12 (24LC32 = 1 0 1 0 A2 A1 A0) 1 0 1 0 A2 A1 A0 0 ACK START 0 0 0 0 1 0 1 0 ACK 0 0 0 1 0 0 1 0 ACK
Memoria EEPROM I 2 C Para lectura. Se inicia un proceso de escritura, enviando solamente la dirección de memoria. De acuerdo a los casos anteriores. Cuando se reciba el ACK de la dirección, se genera un Re-Start con R/W en 1 y se empiezan a leer tramas. Las tramas serán enviadas mientras el maestro genere ACK. Para el último dato, no se genera ACK.
Driver I 2 C Es un archivo que contiene todas las funciones necesarias para manejar el módulo I 2 C. Se encarga de: Generar y controlar la señal de Reloj. Generar condiciones de Start y Stop. La escritura de tramas. La lectura de tramas. Manejar memorias y periféricos en general que soporten el protocolo.
Driver I 2 C Archivo de Cabecera: #use i2c (options) //Configuración I2C para el PIC Maestro #use i2c(master, =PIN_C4, =PIN_C3,FAST,FORCE_HW) //Configuración I2C para el PIC Esclavo #use I2C(SLAVE, =PIN_C4,=PIN_C3, address=0xa0,force_hw) Funciones más comunes: i2c_start(); I2c_write(); I2c_read(); I2c_stop();
Driver I 2 C Otras Funciones disponibles: i2c_isr_state( ) ; i2c_poll( ) ; i2c_slaveaddr( ) ; i2c_speed( ) ;
Fin de Clase Motivación para la próxima clase. El primer parcial no incluye I 2 C. Preguntas por parte de ustedes? El opcional si lo incluye Qué falta por hacer? Pensar el laboratorio 2 y realizar su montaje. Estudiar MUCHO! Agradecimientos a Luis Germán García Morales por el material.