TEMA 20 1perifericos i2c

32
TEMA 20.1 EL BUS I 2 C PERIFÉRICOS

description

ELEC

Transcript of TEMA 20 1perifericos i2c

  • TEMA 20.1

    EL BUS I2C

    PERIFRICOS

  • CCFF DPE MDULO DE PROYECTOS 2

    Memorias serieMemorias serieUUnono los elementos que se utilizan en la comunicacilos elementos que se utilizan en la comunicacin i2c son las n i2c son las memorias serie, como ejemplo tomamos la memoria M24512 se ST.memorias serie, como ejemplo tomamos la memoria M24512 se ST.Esta memoria posee una capacidad de 64K x 8 bits, por lo que seEsta memoria posee una capacidad de 64K x 8 bits, por lo que se necesitan 16 bits para necesitan 16 bits para direccionarladireccionarla o lo que es lo mismo 2 bytes.o lo que es lo mismo 2 bytes.El pinout y diagrama lgico de dicha memoria es:

  • CCFF DPE MDULO DE PROYECTOS 3

    Los nombres de las seales son:

    La direccin del dispositivo es la siguiente:

  • CCFF DPE MDULO DE PROYECTOS 4

    CComo podemos comprobar existe una parte fija (b7 a b4), y otra omo podemos comprobar existe una parte fija (b7 a b4), y otra seleccionable por seleccionable por hardhard (b3(b3--b1), ademb1), adems del s del bitbit de seleccide seleccin de n de lectura/escritura (R/W#) lectura/escritura (R/W#)

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

    SCL6

    SDA5

    WC7

    E0 1

    E1 2

    E2 3

    M24512

  • CCFF DPE MDULO DE PROYECTOS 5

    El byte de direccin quedar como:A0 para operaciones de escritura A1 para operaciones de lecturaEvidentemente podemos conectar mas de una memoria, pero su direccin deber ser diferente

    Para la segunda memoria tendremos:A3 para las operaciones de escrituraA2 para las operaciones de lectura

    SCL6

    SDA5

    WC7

    E0 1

    E1 2

    E2 3

    M24512

    SCL6

    SDA5

    WC7

    E0 1

    E1 2

    E2 3

    U2

    M24512

  • CCFF DPE MDULO DE PROYECTOS 6

    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 7

    De lo anterior se deduce que para efectuar escrituras, se debe gobernar esta seal desde el master, o bien poner dicho terminal a masa.

    La secuencia que se debe seguir para la escritura de un byte es:

    SCL6

    SDA5

    WC7

    E0 1

    E1 2

    E2 3

    M24512

    SCL6

    SDA5

    WC7

    E0 1

    E1 2

    E2 3

    U2

    M24512

  • CCFF DPE MDULO DE PROYECTOS 8

    Este dispositivo, posee un modo de escritura de pEste dispositivo, posee un modo de escritura de pgina, en el gina, en el cual las direcciones en la memoria se cual las direcciones en la memoria se autoincrementanautoincrementan (solo el (solo el byte de menor peso), por esto la condicibyte de menor peso), por esto la condicin que debe cumplirse, n que debe cumplirse, es que todas las direcciones que van a ser escritas deben tener es que todas las direcciones que van a ser escritas deben tener en en comcomn los 8 bits de mayor peso. n los 8 bits de mayor peso. Hay que prestar cuidado a que el nHay que prestar cuidado a que el nmero de datos no sea mero de datos no sea superior al final de la psuperior al final de la pgina ya que si no se gina ya que si no se sobreescribirsobreescribiranan..(una p(una pgina la componen 128 datos o bytes).gina la componen 128 datos o bytes).La escritura finaliza cuando el master genera una seLa escritura finaliza cuando el master genera una seal de al de parada (Stop).parada (Stop).

  • CCFF DPE MDULO DE PROYECTOS 9

    Secuencia de escritura de una pgina

    Las velocidades de transferencia de datos que admite son:Modo estndar: 100Kbits/segundoModo rpido: mximo 400Kbits/s

  • CCFF DPE MDULO DE PROYECTOS 10

    Manejo de la memoria en C desde el compilador CCSEl compilador CCS dispone de un driver para el manejo de esta memoria, y de otros especficos para dispositivos i2c

  • CCFF DPE MDULO DE PROYECTOS 11

    3

    4

  • CCFF DPE MDULO DE PROYECTOS 12

    1

    2

  • CCFF DPE MDULO DE PROYECTOS 13

    Analicemos el driver:voidvoid write_ext_eeprom(longwrite_ext_eeprom(long intint addressaddress, BYTE data), BYTE data)

    {{short short intint status;status;i2c_i2c_startstart();(); //inicializamos la transmisi//inicializamos la transmisin reloj a nivel bajon reloj a nivel bajoi2c_i2c_writewrite(0xa0);(0xa0); //direcci//direccin del esclavo + n del esclavo + bitbit de escritura de escritura i2c_i2c_write(addresswrite(address>>8);>>8); //byte H de la direcci//byte H de la direccin de memoria donde queremos escribirn de memoria donde queremos escribiri2c_i2c_write(addresswrite(address);); //mandamos byte L de la direcci//mandamos byte L de la direccin de memorian de memoriai2c_i2c_write(datawrite(data);); //enviamos el dato a escribir//enviamos el dato a escribiri2c_stop();i2c_stop(); //finalizamos la transmisi//finalizamos la transmisinni2c_i2c_startstart();(); //reinicio de la transmisi//reinicio de la transmisinnstatus=i2c_status=i2c_writewrite(0xa0);(0xa0); //en status debo recibir un 0 para indicar que el esclavo //en status debo recibir un 0 para indicar que el esclavo

    //ha devuelto ACK# y evitar escrituras incorrectas//ha devuelto ACK# y evitar escrituras incorrectaswhile(statuswhile(status==1)==1) //si no he recibido ACK = 0 espero a que responda el //si no he recibido ACK = 0 espero a que responda el sclavosclavo{{

    i2c_i2c_startstart();(); //lazo de espera para que responda el esclavo//lazo de espera para que responda el esclavostatus=i2c_status=i2c_writewrite(0xa0);(0xa0);

    }}}}

    Recuerde que las direcciones de la Recuerde que las direcciones de la EEpromEEprom son 2 bytes son 2 bytes

    1

  • CCFF DPE MDULO DE PROYECTOS 14

    BYTE read_ext_eeprom(long int address) {BYTE read_ext_eeprom(long int address) {BYTE data;BYTE data; ////i2c_start();i2c_start(); //inicalizamos la transmisi//inicalizamos la transmisinni2c_write(0xa0);i2c_write(0xa0); //direcci//direccin del esclavo + bit de escritura (el n del esclavo + bit de escritura (el ltimo = 0)ltimo = 0)i2c_write(address>>8);i2c_write(address>>8); //byte H de la direcci//byte H de la direccin de memoria donde queremos leern de memoria donde queremos leeri2c_write(address);i2c_write(address); //byte L de la direcci//byte L de la direccin donde queremos leern donde queremos leeri2c_start();i2c_start(); //reinicio//reinicioi2c_write(0xa1);i2c_write(0xa1); //direcci//direccin del esclavo + bit de lectura (el n del esclavo + bit de lectura (el ltimo= 1)ltimo= 1)data=i2c_read(0);data=i2c_read(0); //en la variable data guardamos dato leido, no esperamos ACK//en la variable data guardamos dato leido, no esperamos ACKi2c_stop();i2c_stop(); //finalizamos la transmisi//finalizamos la transmisinnreturn(data);return(data); //retornamos dato le//retornamos dato ledodo

    }}

    2

  • CCFF DPE MDULO DE PROYECTOS 15

    voidvoid init_ext_eeprominit_ext_eeprom()(){{

    output_float(EEPROM_SCLoutput_float(EEPROM_SCL); //pone en SCL en como entrada y nivel H en colector A.); //pone en SCL en como entrada y nivel H en colector A.output_float(EEPROM_SDAoutput_float(EEPROM_SDA); //pone en DA en como entrada y nivel H en colector A); //pone en DA en como entrada y nivel H en colector A

    }}

    3

    #ifndef EEPROM_SDA //compilacion condicional

    #define EEPROM_SDA PIN_B1 //si no se definen en main toma estos pines#define EEPROM_SCL PIN_B0 // si no se definen en main toma estos pines

    #endif

    4

    Como podemos comprobar el Como podemos comprobar el driverdriver tiene una direccitiene una direccin fija que n fija que es: =0xA0 para escritura y 0xA1 para lectura, si se desea utilizes: =0xA0 para escritura y 0xA1 para lectura, si se desea utilizar ar la memoria en otra direccila memoria en otra direccin de las posibles debern de las posibles deberamos amos modificar el modificar el driverdriver..

  • CCFF DPE MDULO DE PROYECTOS 16

    Ejercicio de AplicaciEjercicio de AplicacinnComo aplicaciComo aplicacin realicemos el siguiente circuito:n realicemos el siguiente circuito:

  • CCFF DPE MDULO DE PROYECTOS 17

    En este circuito deseamos guardar datos en las primeras 20 En este circuito deseamos guardar datos en las primeras 20 posiciones de memoria. posiciones de memoria. Posteriormente se leerPosteriormente se leer dicha informacidicha informacin.n.Los valores leLos valores ledos y escritos se a informacidos y escritos se a informacin enviada y recibida n enviada y recibida se representarse representar en un en un lcdlcd Lm044LLm044L, que es un display de 4 l, que es un display de 4 lneas neas y 20 caracteres por ly 20 caracteres por lnea.nea.

    El ejercicio se El ejercicio se ralizarralizar de por partes, construyde por partes, construyndose por partes.ndose por partes.Se deberSe debern utilizar los n utilizar los driversdrivers que incorpora el compilador , que incorpora el compilador , haciendo en ellos las correcciones oportunas.haciendo en ellos las correcciones oportunas.

    Como ampliaciComo ampliacin el alumno debern el alumno deber hacer que se escriban y lean hacer que se escriban y lean las 20 las 20 ltimas posiciones de memoria.ltimas posiciones de memoria.

  • CCFF DPE MDULO DE PROYECTOS 18

    Comenzamos definiendo nuestro proyecto: Comenzamos definiendo nuestro proyecto:

  • CCFF DPE MDULO DE PROYECTOS 19

  • CCFF DPE MDULO DE PROYECTOS 20

    Veamos el programa y Veamos el programa y fichero.hfichero.h generado por el propio generado por el propio compilador:compilador:

  • CCFF DPE MDULO DE PROYECTOS 21

    Programa:Programa:

  • CCFF DPE MDULO DE PROYECTOS 22

  • CCFF DPE MDULO DE PROYECTOS 23

    Para la simulaciPara la simulacin, utilizaremos el siguiente circuito:n, utilizaremos el siguiente circuito:

  • CCFF DPE MDULO DE PROYECTOS 24

    Como podemos ver hemos incluido un Como podemos ver hemos incluido un debuggerdebugger de bus I2C, de bus I2C, cuyo modo de funcionamiento podemos obtener haciendo cuyo modo de funcionamiento podemos obtener haciendo seleccionando el dispositivo y luego haciendo clic sobre Displayseleccionando el dispositivo y luego haciendo clic sobre Display ModelModel HelpHelp

  • CCFF DPE MDULO DE PROYECTOS 25

    ObteniObtenindose la siguiente ayuda:ndose la siguiente ayuda:

  • CCFF DPE MDULO DE PROYECTOS 26

    Comenzamos la simulaciComenzamos la simulacin:n:

  • CCFF DPE MDULO DE PROYECTOS 27

    Antes de comenzar conviene que comprobemos que la memoria Antes de comenzar conviene que comprobemos que la memoria se encuentra sin ningse encuentra sin ningn dato escrito (todo a FF):n dato escrito (todo a FF):

  • CCFF DPE MDULO DE PROYECTOS 28

    Ahora simulamos observe que hemos incluido un punto de Ahora simulamos observe que hemos incluido un punto de ruptura para visualizar como se va escribiendo cada uno de los ruptura para visualizar como se va escribiendo cada uno de los datos:datos:

  • CCFF DPE MDULO DE PROYECTOS 29

    Observamos que el analizador de bus I2C ha realizado una capturaObservamos que el analizador de bus I2C ha realizado una captura,,veamos que informaciveamos que informacin nos facilita:n nos facilita:

    Instante en que comienza la transmisiInstante en que comienza la transmisinnInstante en que finaliza la transmisiInstante en que finaliza la transmisinnInformaciInformacin presente en el bus I2C n presente en el bus I2C

  • CCFF DPE MDULO DE PROYECTOS 30

    El significado de la informaciEl significado de la informacin presente en el bus es :n presente en el bus es :SS Comando de StartA0A0 Direccin del esclavo y orden de escrituraA Ack00 Byte alto de direccin de la EEpromA Ack00 Byte bajo de direccin de la EEpromA Ack02 Byte de datosA AckP Stop

  • CCFF DPE MDULO DE PROYECTOS 31

    La secuencia de comunicaciLa secuencia de comunicacin puede ser vista con mn puede ser vista con ms detalle si s detalle si hacemos clic sobre hacemos clic sobre + en el en el debuggerdebugger I2C:I2C:

  • CCFF DPE MDULO DE PROYECTOS 32

    Evidentemente todo lo visto en las transparencias anteriores estEvidentemente todo lo visto en las transparencias anteriores est en concordancia con lo definido en el programa que hemos en concordancia con lo definido en el programa que hemos desarrollado.desarrollado.

    TEMA 20.1 EL BUS I2CPERIFRICOS Memorias serieNmero de diapositiva 3Nmero de diapositiva 4Nmero de diapositiva 5Nmero de diapositiva 6Nmero de diapositiva 7Nmero de diapositiva 8Nmero de diapositiva 9Nmero de diapositiva 10Nmero de diapositiva 11Nmero de diapositiva 12Nmero de diapositiva 13Nmero de diapositiva 14Nmero de diapositiva 15 Ejercicio de AplicacinNmero de diapositiva 17Nmero de diapositiva 18Nmero de diapositiva 19Nmero de diapositiva 20Nmero de diapositiva 21Nmero de diapositiva 22Nmero de diapositiva 23Nmero de diapositiva 24Nmero de diapositiva 25Nmero de diapositiva 26Nmero de diapositiva 27Nmero de diapositiva 28Nmero de diapositiva 29Nmero de diapositiva 30Nmero de diapositiva 31Nmero de diapositiva 32