You are on page 1of 32

TEMA 20.

1
EL BUS

2
IC

PERIFÉRICOS

Memorias serie
Uno los elementos que se utilizan en la comunicación i2c son las
memorias serie, como ejemplo tomamos la memoria M24512 se ST.
Esta memoria posee una capacidad de 64K x 8 bits, por lo que se
necesitan 16 bits para direccionarla o lo que es lo mismo 2 bytes.
El pinout y diagrama lógico de dicha memoria es:

CCFF DPE MÓDULO DE PROYECTOS

2

Los nombres de las señales son:

La dirección del dispositivo es la siguiente:

CCFF DPE MÓDULO DE PROYECTOS

3

además del bit de selección de lectura/escritura (R/W#) Si mediante el hard los 3 bits (b3-b1) a “0”. y otra seleccionable por hard (b3-b1). 6 5 7 SCL SDA WC E0 E1 E2 1 2 3 M24512 CCFF DPE MÓDULO DE PROYECTOS 4 .Como podemos comprobar existe una parte fija (b7 a b4).

pero su dirección deberá ser diferente 6 5 7 SCL SDA WC E0 E1 E2 1 2 3 M24512 U2 6 5 7 SCL SDA WC E0 E1 E2 1 2 3 M24512 Para la segunda memoria tendremos: A3 para las operaciones de escritura A2 para las operaciones de lectura CCFF DPE MÓDULO DE PROYECTOS 5 .El byte de dirección quedará como: A0 para operaciones de escritura A1 para operaciones de lectura Evidentemente podemos conectar mas de una memoria.

la señal es puesta a L internamente. si esta señal está a H. Mientras la señal WC se encuentra a nivel H. pero los bytes de datos no. CCFF DPE MÓDULO DE PROYECTOS 6 . la selección de dispositivo y los bytes de dirección son reconocidos. las operaciones de escritura están deshabilitadas. Si este pin está desconectado (al aire). y las operaciones de escritura son reconocidas.Hasta ahora no hemos hecho referencia al pin WC (Write Control) Esta señal es utilizada para la protección de la totalidad de la memoria ante escrituras involuntarias.

De lo anterior se deduce que para efectuar escrituras. 6 5 7 SCL SDA WC 1 2 3 E0 E1 E2 M24512 U2 6 5 7 SCL SDA WC E0 E1 E2 1 2 3 M24512 La secuencia que se debe seguir para la escritura de un byte es: CCFF DPE MÓDULO DE PROYECTOS 7 . se debe gobernar esta señal desde el master. o bien poner dicho terminal a masa.

por esto la condición que debe cumplirse.Este dispositivo. CCFF DPE MÓDULO DE PROYECTOS 8 . Hay que prestar cuidado a que el número de datos no sea superior al final de la página ya que si no se sobreescribirían. es que todas las direcciones que van a ser escritas deben tener en común los 8 bits de mayor peso. posee un modo de escritura de página. (una página la componen 128 datos o bytes). La escritura finaliza cuando el master genera una señal de parada (Stop). en el cual las direcciones en la memoria se autoincrementan (solo el byte de menor peso).

Secuencia de escritura de una página Las velocidades de transferencia de datos que admite son: Modo estándar: 100Kbits/segundo Modo rápido: máximo 400Kbits/s CCFF DPE MÓDULO DE PROYECTOS 9 .

y de otros específicos para dispositivos i2c CCFF DPE MÓDULO DE PROYECTOS 10 .Manejo de la memoria en C desde el compilador CCS El compilador CCS dispone de un driver para el manejo de esta memoria.

4 3 CCFF DPE MÓDULO DE PROYECTOS 11 .

1 2 CCFF DPE MÓDULO DE PROYECTOS 12 .

while(status==1) { i2c_start(). i2c_start(). i2c_write(address>>8). i2c_start(). i2c_write(address). i2c_write(data). status=i2c_write(0xa0). i2c_stop(). status=i2c_write(0xa0).Analicemos el driver: void write_ext_eeprom(long int address. i2c_write(0xa0). } 1 //inicializamos la transmisión reloj a nivel bajo //dirección del esclavo + bit de escritura //byte H de la dirección de memoria donde queremos escribir //mandamos byte L de la dirección de memoria //enviamos el dato a escribir //finalizamos la transmisión //reinicio de la transmisión //en status debo recibir un 0 para indicar que el esclavo //ha devuelto ACK# y evitar escrituras incorrectas //si no he recibido ACK = 0 espero a que responda el sclavo //lazo de espera para que responda el esclavo } Recuerde que las direcciones de la EEprom son 2 bytes CCFF DPE MÓDULO DE PROYECTOS 13 . BYTE data) { short int status.

//byte L de la dirección donde queremos leer i2c_start().BYTE read_ext_eeprom(long int address) { 2 BYTE data. //dirección del esclavo + bit de escritura (el último = 0) i2c_write(address>>8). // i2c_start(). //en la variable data guardamos dato leido. no esperamos ACK i2c_stop(). //finalizamos la transmisión return(data). //dirección del esclavo + bit de lectura (el último= 1) data=i2c_read(0). //reinicio i2c_write(0xa1). //inicalizamos la transmisión i2c_write(0xa0). //retornamos dato leído } CCFF DPE MÓDULO DE PROYECTOS 14 . //byte H de la dirección de memoria donde queremos leer i2c_write(address).

CCFF DPE MÓDULO DE PROYECTOS 15 . //pone en DA en como entrada y nivel H en colector A } #ifndef EEPROM_SDA //compilacion condicional #define EEPROM_SDA PIN_B1 #define EEPROM_SCL PIN_B0 //si no se definen en main toma estos pines // si no se definen en main toma estos pines 4 #endif Como podemos comprobar el driver tiene una dirección fija que es: =0xA0 para escritura y 0xA1 para lectura. output_float(EEPROM_SDA). si se desea utilizar la memoria en otra dirección de las posibles deberíamos modificar el driver.3 void init_ext_eeprom() { output_float(EEPROM_SCL). //pone en SCL en como entrada y nivel H en colector A.

Ejercicio de Aplicación Como aplicación realicemos el siguiente circuito: CCFF DPE MÓDULO DE PROYECTOS 16 .

El ejercicio se ralizará de por partes. Se deberán utilizar los drivers que incorpora el compilador . Los valores leídos y escritos se a información enviada y recibida se representará en un lcd Lm044L.En este circuito deseamos guardar datos en las primeras 20 posiciones de memoria. CCFF DPE MÓDULO DE PROYECTOS 17 . haciendo en ellos las correcciones oportunas. que es un display de 4 líneas y 20 caracteres por línea. Como ampliación el alumno deberá hacer que se escriban y lean las 20 últimas posiciones de memoria. construyéndose por partes. Posteriormente se leerá dicha información.

Comenzamos definiendo nuestro proyecto: CCFF DPE MÓDULO DE PROYECTOS 18 .

CCFF DPE MÓDULO DE PROYECTOS 19 .

h generado por el propio compilador: CCFF DPE MÓDULO DE PROYECTOS 20 .Veamos el programa y fichero.

Programa: CCFF DPE MÓDULO DE PROYECTOS 21 .

CCFF DPE MÓDULO DE PROYECTOS 22 .

Para la simulación. utilizaremos el siguiente circuito: CCFF DPE MÓDULO DE PROYECTOS 23 .

cuyo modo de funcionamiento podemos obtener haciendo seleccionando el dispositivo y luego haciendo clic sobre Display Model Help CCFF DPE MÓDULO DE PROYECTOS 24 .Como podemos ver hemos incluido un debugger de bus I2C.

Obteniéndose la siguiente ayuda: CCFF DPE MÓDULO DE PROYECTOS 25 .

Comenzamos la simulación: CCFF DPE MÓDULO DE PROYECTOS 26 .

Antes de comenzar conviene que comprobemos que la memoria se encuentra sin ningún dato escrito (todo a FF): CCFF DPE MÓDULO DE PROYECTOS 27 .

Ahora simulamos observe que hemos incluido un punto de ruptura para visualizar como se va escribiendo cada uno de los datos: CCFF DPE MÓDULO DE PROYECTOS 28 .

Observamos que el analizador de bus I2C ha realizado una captura. veamos que información nos facilita: Instante en que comienza la transmisión Instante en que finaliza la transmisión Información presente en el bus I2C CCFF DPE MÓDULO DE PROYECTOS 29 .

El significado de la información presente en el bus es : S Comando de Start A0 Dirección del esclavo y orden de escritura A Ack 00 Byte alto de dirección de la EEprom A Ack 00 Byte bajo de dirección de la EEprom A Ack 02 Byte de datos A Ack P Stop CCFF DPE MÓDULO DE PROYECTOS 30 .

La secuencia de comunicación puede ser vista con más detalle si hacemos clic sobre “ +” en el debugger I2C: CCFF DPE MÓDULO DE PROYECTOS 31 .

CCFF DPE MÓDULO DE PROYECTOS 32 .Evidentemente todo lo visto en las transparencias anteriores está en concordancia con lo definido en el programa que hemos desarrollado.