Vous êtes sur la page 1sur 32

TEMA 20.

1
EL BUS

2
IC

PERIFRICOS

Memorias serie
Uno los elementos que se utilizan en la comunicacin 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 lgico de dicha memoria es:

CCFF DPE MDULO DE PROYECTOS

Los nombres de las seales son:

La direccin del dispositivo es la siguiente:

CCFF DPE MDULO DE PROYECTOS

Como podemos comprobar existe una parte fija (b7 a b4), y otra
seleccionable por hard (b3-b1), adems del bit de seleccin de
lectura/escritura (R/W#)

Si mediante el hard los 3 bits (b3-b1) a 0.


6
5
7

SCL
SDA
WC

E0
E1
E2

1
2
3

M24512

CCFF DPE MDULO DE PROYECTOS

El byte de direccin quedar como:


A0 para operaciones de escritura
A1 para operaciones de lectura
Evidentemente podemos conectar mas de una memoria, pero su
direccin 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 MDULO DE PROYECTOS

Hasta ahora no hemos hecho referencia al pin WC (Write Control)

Esta seal es utilizada para la proteccin de la totalidad de la


memoria ante escrituras involuntarias, si esta seal est a H, las
operaciones de escritura estn deshabilitadas.
Mientras la seal WC se encuentra a nivel H, la seleccin de
dispositivo y los bytes de direccin son reconocidos, pero los
bytes de datos no.
Si este pin est desconectado (al aire), la seal es puesta a L
internamente, y las operaciones de escritura son reconocidas.

CCFF DPE MDULO DE PROYECTOS

De lo anterior se deduce que para efectuar escrituras, se debe


gobernar esta seal desde el master, o bien poner dicho terminal
a masa.
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 MDULO DE PROYECTOS

Este dispositivo, posee un modo de escritura de pgina, en el


cual las direcciones en la memoria se autoincrementan (solo el
byte de menor peso), por esto la condicin que debe cumplirse,
es que todas las direcciones que van a ser escritas deben tener en
comn los 8 bits de mayor peso.
Hay que prestar cuidado a que el nmero de datos no sea
superior al final de la pgina ya que si no se sobreescribiran.
(una pgina la componen 128 datos o bytes).
La escritura finaliza cuando el master genera una seal de
parada (Stop).

CCFF DPE MDULO DE PROYECTOS

Secuencia de escritura de una pgina

Las velocidades de transferencia de datos que admite son:


Modo estndar: 100Kbits/segundo
Modo rpido: mximo 400Kbits/s
CCFF DPE MDULO DE PROYECTOS

Manejo de la memoria en C desde el compilador CCS


El compilador CCS dispone de un driver para el manejo de esta
memoria, y de otros especficos para dispositivos i2c

CCFF DPE MDULO DE PROYECTOS

10

CCFF DPE MDULO DE PROYECTOS

11

CCFF DPE MDULO DE PROYECTOS

12

Analicemos el driver:
void write_ext_eeprom(long int address, BYTE data)
{
short int status;
i2c_start();
i2c_write(0xa0);
i2c_write(address>>8);
i2c_write(address);
i2c_write(data);
i2c_stop();
i2c_start();
status=i2c_write(0xa0);
while(status==1)
{
i2c_start();
status=i2c_write(0xa0);
}

1
//inicializamos la transmisin reloj a nivel bajo
//direccin del esclavo + bit de escritura
//byte H de la direccin de memoria donde queremos escribir
//mandamos byte L de la direccin de memoria
//enviamos el dato a escribir
//finalizamos la transmisin
//reinicio de la transmisin
//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 MDULO DE PROYECTOS

13

BYTE read_ext_eeprom(long int address) {


2
BYTE data;
//
i2c_start();
//inicalizamos la transmisin
i2c_write(0xa0);
//direccin del esclavo + bit de escritura (el ltimo = 0)
i2c_write(address>>8);
//byte H de la direccin de memoria donde queremos leer
i2c_write(address);
//byte L de la direccin donde queremos leer
i2c_start();
//reinicio
i2c_write(0xa1);
//direccin del esclavo + bit de lectura (el ltimo= 1)
data=i2c_read(0);
//en la variable data guardamos dato leido, no esperamos ACK
i2c_stop();
//finalizamos la transmisin
return(data);
//retornamos dato ledo
}

CCFF DPE MDULO DE PROYECTOS

14

3
void init_ext_eeprom()
{
output_float(EEPROM_SCL); //pone en SCL en como entrada y nivel H en colector A.
output_float(EEPROM_SDA); //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

#endif

Como podemos comprobar el driver tiene una direccin fija que


es: =0xA0 para escritura y 0xA1 para lectura, si se desea utilizar
la memoria en otra direccin de las posibles deberamos
modificar el driver.
CCFF DPE MDULO DE PROYECTOS

15

Ejercicio de Aplicacin
Como aplicacin realicemos el siguiente circuito:

CCFF DPE MDULO DE PROYECTOS

16

En este circuito deseamos guardar datos en las primeras 20


posiciones de memoria.
Posteriormente se leer dicha informacin.
Los valores ledos y escritos se a informacin enviada y recibida
se representar en un lcd Lm044L, que es un display de 4 lneas
y 20 caracteres por lnea.
El ejercicio se ralizar de por partes, construyndose por partes.
Se debern utilizar los drivers que incorpora el compilador ,
haciendo en ellos las correcciones oportunas.
Como ampliacin el alumno deber hacer que se escriban y lean
las 20 ltimas posiciones de memoria.
CCFF DPE MDULO DE PROYECTOS

17

Comenzamos definiendo nuestro proyecto:

CCFF DPE MDULO DE PROYECTOS

18

CCFF DPE MDULO DE PROYECTOS

19

Veamos el programa y fichero.h generado por el propio


compilador:

CCFF DPE MDULO DE PROYECTOS

20

Programa:

CCFF DPE MDULO DE PROYECTOS

21

CCFF DPE MDULO DE PROYECTOS

22

Para la simulacin, utilizaremos el siguiente circuito:

CCFF DPE MDULO DE PROYECTOS

23

Como podemos ver hemos incluido un debugger de bus I2C,


cuyo modo de funcionamiento podemos obtener haciendo
seleccionando el dispositivo y luego haciendo clic sobre Display
Model Help

CCFF DPE MDULO DE PROYECTOS

24

Obtenindose la siguiente ayuda:

CCFF DPE MDULO DE PROYECTOS

25

Comenzamos la simulacin:

CCFF DPE MDULO DE PROYECTOS

26

Antes de comenzar conviene que comprobemos que la memoria


se encuentra sin ningn dato escrito (todo a FF):

CCFF DPE MDULO 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 MDULO DE PROYECTOS

28

Observamos que el analizador de bus I2C ha realizado una captura,


veamos que informacin nos facilita:
Instante en que comienza la transmisin
Instante en que finaliza la transmisin
Informacin presente en el bus I2C

CCFF DPE MDULO DE PROYECTOS

29

El significado de la informacin presente en el bus es :


S Comando de Start
A0 Direccin del esclavo y orden de escritura
A Ack
00 Byte alto de direccin de la EEprom
A Ack
00 Byte bajo de direccin de la EEprom
A Ack
02 Byte de datos
A Ack
P Stop

CCFF DPE MDULO DE PROYECTOS

30

La secuencia de comunicacin puede ser vista con ms detalle si


hacemos clic sobre + en el debugger I2C:

CCFF DPE MDULO DE PROYECTOS

31

Evidentemente todo lo visto en las transparencias anteriores est


en concordancia con lo definido en el programa que hemos
desarrollado.

CCFF DPE MDULO DE PROYECTOS

32

Vous aimerez peut-être aussi