<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Processor Expert Software中的主题 Re: eeprom bit io</title>
    <link>https://community.nxp.com/t5/Processor-Expert-Software/eeprom-bit-io/m-p/398991#M3161</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I am sorry but I am not able to verify your driver code.&lt;/P&gt;&lt;P&gt;Please, look at the &lt;A href="http://mcuoneclipse.com/2013/08/18/driver-for-microchip-24xx-serial-eeprom/" title="http://mcuoneclipse.com/2013/08/18/driver-for-microchip-24xx-serial-eeprom/"&gt;Driver for Microchip 24xx Serial EEPROM | MCU on Eclipse&lt;/A&gt; technical user guide document where the driver for 24LC512 is described by using the 24AA_EEPROM component. I hope it will help you.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best Regards,&lt;/P&gt;&lt;P&gt;Marek Neuzi&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 16 Nov 2015 12:56:54 GMT</pubDate>
    <dc:creator>marek_neuzil</dc:creator>
    <dc:date>2015-11-16T12:56:54Z</dc:date>
    <item>
      <title>eeprom bit io</title>
      <link>https://community.nxp.com/t5/Processor-Expert-Software/eeprom-bit-io/m-p/398990#M3160</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello every body, since a few months i try to play with an eeprom 24lc512, at first i have been using the component 24AA_EEPROM but when i try to read more than two strings seems that my code only was storing the last data and i can't read correctly an specific address, then i try to follow the data sheet and do the task using bit io .I get a perfect work writing and reading bytes the following is the code:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * I2C_24LC512.c&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; *&amp;nbsp; Created on: 15/09/2015&lt;/P&gt;&lt;P&gt; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Author: ingeniero03&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;#include "Cpu.h"&lt;/P&gt;&lt;P&gt;#include "PE_Types.h"&lt;/P&gt;&lt;P&gt;#include "PE_Error.h"&lt;/P&gt;&lt;P&gt;#include "PE_Const.h"&lt;/P&gt;&lt;P&gt;#include "I2C_24LC512.h"&lt;/P&gt;&lt;P&gt;#include "string.h"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;volatile unsigned char aaa;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void Ret5us (void);&lt;/P&gt;&lt;P&gt;void NOP4 (void); // OK&lt;/P&gt;&lt;P&gt;void NotBusy (void); // OK&lt;/P&gt;&lt;P&gt;void StopBit (void); // OK&lt;/P&gt;&lt;P&gt;void StartBit (void); // OK&lt;/P&gt;&lt;P&gt;unsigned char LeerAck (void); // OK&lt;/P&gt;&lt;P&gt;void LeerNOAck (void);&lt;/P&gt;&lt;P&gt;void E_ByteI2C (unsigned char datoI2C); // OK&lt;/P&gt;&lt;P&gt;unsigned char L_ByteI2C (void); // OK&lt;/P&gt;&lt;P&gt;unsigned char LeerByteI2C (unsigned int addT); // OK&lt;/P&gt;&lt;P&gt;void EscribirByteI2C (unsigned int addT, unsigned char datoI2C); // OK&lt;/P&gt;&lt;P&gt;void E_BloqueI2C (char datoI2CB); // OK&lt;/P&gt;&lt;P&gt;char L_BloqueI2C (void); // OK&lt;/P&gt;&lt;P&gt;char LeerBloqueI2C (unsigned int addT); // OK&lt;/P&gt;&lt;P&gt;void EscribirBloqueI2C (unsigned int addT, char datoI2CB[]); // OK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;unsigned char addrL, addrH, valorACK;&lt;/P&gt;&lt;P&gt;char addrLB, addrHB, valorACKB;&lt;/P&gt;&lt;P&gt;volatile unsigned char aaa;&lt;/P&gt;&lt;P&gt;unsigned char&amp;nbsp; temp, tickEE;&lt;/P&gt;&lt;P&gt;int i;&lt;/P&gt;&lt;P&gt;char bloqueleido[64];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * NOMBRE: EscribirByteI2C&lt;/P&gt;&lt;P&gt; * ENTRADAS: Direccion de memoria a escribir&lt;/P&gt;&lt;P&gt; * Dato a escribir&lt;/P&gt;&lt;P&gt; * SALIDAS: Ninguna&lt;/P&gt;&lt;P&gt; * DESCRIPCION: Escribe un dato en la memoria I2C&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;void EscribirByteI2C (unsigned int addT, unsigned char datoI2C)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; addrH = (unsigned char)(addT&amp;gt;&amp;gt;8);&lt;/P&gt;&lt;P&gt;&amp;nbsp; addrL = (unsigned char)(addT);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NotBusy ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; StartBit ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; E_ByteI2C (CONTROL_E);&lt;/P&gt;&lt;P&gt;&amp;nbsp; if&amp;nbsp; ( !LeerAck() ) { E_ByteI2C(addrH); }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else { goto parar; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; if&amp;nbsp; ( !LeerAck() ) { E_ByteI2C(addrL); }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else { goto parar; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; if&amp;nbsp; ( !LeerAck() ) { E_ByteI2C(datoI2C); }&lt;/P&gt;&lt;P&gt;&amp;nbsp; valorACK = LeerAck();&lt;/P&gt;&lt;P&gt;&amp;nbsp; parar:&lt;/P&gt;&lt;P&gt;&amp;nbsp; StopBit ();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * NOMBRE: LeerByteI2C&lt;/P&gt;&lt;P&gt; * ENTRADAS: Direccion a leer&lt;/P&gt;&lt;P&gt; * SALIDAS: Error&lt;/P&gt;&lt;P&gt; * DESCRIPCION: Lee una posicion en la memoria EEPROM&lt;/P&gt;&lt;P&gt; * retorna 0 si hubo lectura correcta&lt;/P&gt;&lt;P&gt; * retorna 1 si no hubo lectura correcta&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;unsigned char LeerByteI2C (unsigned int addT)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; addrH = (unsigned char)(addT&amp;gt;&amp;gt;8);&lt;/P&gt;&lt;P&gt;&amp;nbsp; addrL = (unsigned char)(addT);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; valorACK = 0xFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NotBusy ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; StartBit ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; E_ByteI2C (CONTROL_E);&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ( !LeerAck() ) { E_ByteI2C(addrH); }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else { goto detener; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ( !LeerAck() ) { E_ByteI2C(addrL); }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else { goto detener; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ( !LeerAck() )&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; NotBusy ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; StartBit();&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else { goto detener; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; E_ByteI2C (CONTROL_L);&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ( !LeerAck() ) { valorACK = L_ByteI2C (); }&lt;/P&gt;&lt;P&gt;&amp;nbsp; LeerNOAck();&lt;/P&gt;&lt;P&gt;detener:&lt;/P&gt;&lt;P&gt;&amp;nbsp; StopBit ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; return valorACK;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * NOMBRE: NOP4&lt;/P&gt;&lt;P&gt; * ENTRADAS: Ninguna&lt;/P&gt;&lt;P&gt; * SALIDAS: Ninguna&lt;/P&gt;&lt;P&gt; * DESCRIPCION: Funcion para deliveradamente perder&lt;/P&gt;&lt;P&gt; * algunos ciclos de maquina en tiempo&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;void NOP4 (void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; aaa = 2;&lt;/P&gt;&lt;P&gt;&amp;nbsp; aaa++;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * NOMBRE: NotBusy&lt;/P&gt;&lt;P&gt; * ENTRADAS: Ninguna&lt;/P&gt;&lt;P&gt; * SALIDAS: Ninguna&lt;/P&gt;&lt;P&gt; * DESCRIPCION: Coloca desocupado el bus I2C&lt;/P&gt;&lt;P&gt; * Coloca SDA y SCL en alto&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;void NotBusy (void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_OFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Ret5us ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; SDA_OUT;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SDA_ON;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_ON;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Ret5us ();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * NOMBRE: StartBit&lt;/P&gt;&lt;P&gt; * ENTRADAS: Ninguna&lt;/P&gt;&lt;P&gt; * SALIDAS: Ninguna&lt;/P&gt;&lt;P&gt; * DESCRIPCION: Coloca un bajo en SDA, cuando SCL esta en alto&lt;/P&gt;&lt;P&gt; * Debe ejecutarse antes la funcion NotBusy&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;void StartBit (void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; SDA_OUT;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SDA_OFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Ret5us ();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * NOMBRE: E_ByteI2C&lt;/P&gt;&lt;P&gt; * ENTRADAS: datoI2C, unsigned char&lt;/P&gt;&lt;P&gt; * SALIDAS: Ninguna&lt;/P&gt;&lt;P&gt; * DESCRIPCION: Manda el valor en datoI2C, por los pines I2C&lt;/P&gt;&lt;P&gt; * Envia primero el bit mas significativo&lt;/P&gt;&lt;P&gt; * Cada bit cambia cuando SCL esta en bajo&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;void E_ByteI2C (unsigned char datoI2C)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; unsigned char datoRRF, RRF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_OFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SDA_OUT;&lt;/P&gt;&lt;P&gt;&amp;nbsp; datoRRF = 128;&lt;/P&gt;&lt;P&gt;&amp;nbsp; for (RRF=0; RRF&amp;lt;8; RRF++)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_OFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4();&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4();&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ( ( datoI2C &amp;amp; datoRRF ) == datoRRF ) { SDA_ON; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else { SDA_OFF; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; Ret5us ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_ON;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4();&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4();&lt;/P&gt;&lt;P&gt;&amp;nbsp; Ret5us ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; datoRRF = datoRRF&amp;gt;&amp;gt;1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * NOMBRE: L_ByteI2C&lt;/P&gt;&lt;P&gt; * ENTRADAS: Ninguna&lt;/P&gt;&lt;P&gt; * SALIDAS: El Dato I2C leido&lt;/P&gt;&lt;P&gt; * DESCRIPCION: Recibe un dato I2c&lt;/P&gt;&lt;P&gt; * Recibe primero el bit mas significativo&lt;/P&gt;&lt;P&gt; * Lee cada bit cuando SCL esta en alto&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;unsigned char L_ByteI2C (void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; unsigned char datoRRF, RRF, datoLeido;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_OFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SDA_INP; // SDA como entrada&lt;/P&gt;&lt;P&gt;&amp;nbsp; datoRRF = 128;&lt;/P&gt;&lt;P&gt;&amp;nbsp; datoLeido = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; for (RRF=0; RRF&amp;lt;8; RRF++)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_OFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4();&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4();&lt;/P&gt;&lt;P&gt;&amp;nbsp; Ret5us ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_ON;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Ret5us ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ( SDA_IO ) {datoLeido = (datoLeido | datoRRF);&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4();&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4;&lt;/P&gt;&lt;P&gt;&amp;nbsp; datoRRF = datoRRF&amp;gt;&amp;gt;1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; SDA_OUT;&lt;/P&gt;&lt;P&gt;&amp;nbsp; return datoLeido;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * NOMBRE: LeerAck&lt;/P&gt;&lt;P&gt; * ENTRADAS: Ninguno&lt;/P&gt;&lt;P&gt; * SALIDAS: Valor de ACK, Unsigned char&lt;/P&gt;&lt;P&gt; * DESCRIPCION: Con cada Byte enviado o recibido, el esclavo debe enviar un caracer de&lt;/P&gt;&lt;P&gt; * reconocimiento, que consiste en colocar la linea SDA en bajo&lt;/P&gt;&lt;P&gt; * El Maestro por su parte debe enviar un pulso de reloj adicional para tal fin&lt;/P&gt;&lt;P&gt; * LeerAck = 0, si el esclavo envio el ACK&lt;/P&gt;&lt;P&gt; * LeerAck = 1, si el esclavo NO envio el ACK&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;unsigned char LeerAck (void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; unsigned char lecturaACK;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_OFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SDA_INP;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Ret5us ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_ON;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (SDA_IO == 0) { lecturaACK = 0; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else { lecturaACK = 1; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; Ret5us ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; return lecturaACK;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * NOMBRE: LeerNOAck&lt;/P&gt;&lt;P&gt; * ENTRADAS: Ninguno&lt;/P&gt;&lt;P&gt; * SALIDAS: nINGUNO&lt;/P&gt;&lt;P&gt; * DESCRIPCION: Pulso adicional necesario para&lt;/P&gt;&lt;P&gt; * el bit de reconocimiento&lt;/P&gt;&lt;P&gt; *&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;void LeerNOAck (void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; SDA_INP;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_OFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Ret5us ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; SDA_OUT;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SDA_OFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_ON;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Ret5us ();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * NOMBRE: StopBit&lt;/P&gt;&lt;P&gt; * ENTRADAS: Ninguna&lt;/P&gt;&lt;P&gt; * SALIDAS: Ninguna&lt;/P&gt;&lt;P&gt; * DESCRIPCION: Bit de stop para comunicacion I2C&lt;/P&gt;&lt;P&gt; * Flanco de subida de SDA&lt;/P&gt;&lt;P&gt; * mientras SCL esta en alto&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;void StopBit (void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_OFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SDA_OUT;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SDA_OFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Ret5us ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_ON;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SDA_ON;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Ret5us ();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*&lt;/P&gt;&lt;P&gt; * NOMBRE: Ret5us&lt;/P&gt;&lt;P&gt; * ENTRADAS: Ninguna&lt;/P&gt;&lt;P&gt; * SALIDAS: Ninguna&lt;/P&gt;&lt;P&gt; * DESCRIPCION: Retardo de 15 micro segundos&lt;/P&gt;&lt;P&gt; * Utiliza la variable tickEE que se incrementa cada 5 microsegundos&lt;/P&gt;&lt;P&gt; * en una interrupcion de tiempo.&lt;/P&gt;&lt;P&gt; * Es Obligatorio tener una interrupcion de tiempo de 5 microsegundos&lt;/P&gt;&lt;P&gt; * que incremente la variable tickEE&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;void Ret5us (void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; tickEE = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; while (tickEE&amp;lt;2) {}&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;With that i try to modify the writing cicles before the star and sending the control bytes for write blocks or pages or strings but i have no lucky this time, it seems i can't write and read more than one char , the next was the code that i try:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void EscribirBloqueI2C (unsigned int addT, char datoI2CB[])&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; addrHB = (char)(addT&amp;gt;&amp;gt;8);&lt;/P&gt;&lt;P&gt;&amp;nbsp; addrLB = (char)(addT);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NotBusy ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; StartBit ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; E_BloqueI2C (CONTROL_E);&lt;/P&gt;&lt;P&gt;&amp;nbsp; if&amp;nbsp; ( !LeerAck() ) { E_BloqueI2C(addrHB); }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else { goto parar; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; if&amp;nbsp; ( !LeerAck() ) { E_BloqueI2C(addrLB); }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else { goto parar; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; for(i=0 ; i &amp;lt;strlen(datoI2CB);i++){&lt;/P&gt;&lt;P&gt;&amp;nbsp; if&amp;nbsp; ( !LeerAck() ) { E_BloqueI2C(datoI2CB[i]); &lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; valorACK = LeerAck();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; parar:&lt;/P&gt;&lt;P&gt;&amp;nbsp; StopBit ();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;char LeerBloqueI2C (unsigned int addT)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; addrHB = (char )(addT&amp;gt;&amp;gt;8);&lt;/P&gt;&lt;P&gt;&amp;nbsp; addrLB = (char )(addT);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; valorACK = 0xFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NotBusy ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; StartBit ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; E_BloqueI2C (CONTROL_E);&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ( !LeerAck() ) { E_BloqueI2C(addrHB); }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else { goto detener; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ( !LeerAck() ) { E_BloqueI2C(addrLB); }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else { goto detener; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ( !LeerAck() )&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; NotBusy ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; StartBit();&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else { goto detener; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; E_BloqueI2C (CONTROL_L);&lt;/P&gt;&lt;P&gt;&amp;nbsp; for(i=0 ; i &amp;lt; sizeof(bloqueleido)-1;i++){&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ( !LeerAck() ) {bloqueleido[i] = L_BloqueI2C (); }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; LeerNOAck();&lt;/P&gt;&lt;P&gt;detener:&lt;/P&gt;&lt;P&gt;&amp;nbsp; StopBit ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; return valorACK;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;void E_BloqueI2C (char datoI2CB)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; char&amp;nbsp; datoRRFB, RRFB;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_OFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SDA_OUT;&lt;/P&gt;&lt;P&gt;&amp;nbsp; datoRRFB = 128;&lt;/P&gt;&lt;P&gt;&amp;nbsp; for (RRFB=0; RRFB&amp;lt;8; RRFB++)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_OFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4();&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4();&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ( ( datoI2CB &amp;amp; datoRRFB ) == datoRRFB ) { SDA_ON; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else { SDA_OFF; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; Ret5us ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_ON;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4();&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4();&lt;/P&gt;&lt;P&gt;&amp;nbsp; Ret5us ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; datoRRFB = datoRRFB&amp;gt;&amp;gt;1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; char L_BloqueI2C (void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; char&amp;nbsp; datoRRFB, RRFB, datoLeidoB;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_OFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SDA_INP; // SDA como entrada&lt;/P&gt;&lt;P&gt;&amp;nbsp; datoRRFB = 128;&lt;/P&gt;&lt;P&gt;&amp;nbsp; datoLeidoB = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; for (RRFB=0; RRFB&amp;lt;8; RRFB++)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_OFF;&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4();&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4();&lt;/P&gt;&lt;P&gt;&amp;nbsp; Ret5us ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; SCL_ON;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Ret5us ();&lt;/P&gt;&lt;P&gt;&amp;nbsp; if ( SDA_IO ) {datoLeidoB = (datoLeidoB | datoRRFB);&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4();&lt;/P&gt;&lt;P&gt;&amp;nbsp; NOP4;&lt;/P&gt;&lt;P&gt;&amp;nbsp; datoRRFB = datoRRFB&amp;gt;&amp;gt;1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; SDA_OUT;&lt;/P&gt;&lt;P&gt;&amp;nbsp; return datoLeidoB;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Some body can help me? i dont know what i am doing wrong&amp;nbsp; :smileyconfused:&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 10 Nov 2015 21:12:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Processor-Expert-Software/eeprom-bit-io/m-p/398990#M3160</guid>
      <dc:creator>marceladuenas</dc:creator>
      <dc:date>2015-11-10T21:12:50Z</dc:date>
    </item>
    <item>
      <title>Re: eeprom bit io</title>
      <link>https://community.nxp.com/t5/Processor-Expert-Software/eeprom-bit-io/m-p/398991#M3161</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I am sorry but I am not able to verify your driver code.&lt;/P&gt;&lt;P&gt;Please, look at the &lt;A href="http://mcuoneclipse.com/2013/08/18/driver-for-microchip-24xx-serial-eeprom/" title="http://mcuoneclipse.com/2013/08/18/driver-for-microchip-24xx-serial-eeprom/"&gt;Driver for Microchip 24xx Serial EEPROM | MCU on Eclipse&lt;/A&gt; technical user guide document where the driver for 24LC512 is described by using the 24AA_EEPROM component. I hope it will help you.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best Regards,&lt;/P&gt;&lt;P&gt;Marek Neuzi&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 16 Nov 2015 12:56:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Processor-Expert-Software/eeprom-bit-io/m-p/398991#M3161</guid>
      <dc:creator>marek_neuzil</dc:creator>
      <dc:date>2015-11-16T12:56:54Z</dc:date>
    </item>
    <item>
      <title>Re: eeprom bit io</title>
      <link>https://community.nxp.com/t5/Processor-Expert-Software/eeprom-bit-io/m-p/398992#M3162</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you for answer myf&amp;nbsp; question , but this tutorial i was follow at first , but i can't read an specific memory address. if i choose readbyte or read block and write byte/ block and an specific adrees like 0X0A and store a data like 3 and after repeat the same process but this time the adress 0X13 and store the data 2 . when i try to read the 0X13&amp;nbsp; i got return the data 3. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 25 Nov 2015 19:12:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Processor-Expert-Software/eeprom-bit-io/m-p/398992#M3162</guid>
      <dc:creator>marceladuenas</dc:creator>
      <dc:date>2015-11-25T19:12:04Z</dc:date>
    </item>
    <item>
      <title>Re: eeprom bit io</title>
      <link>https://community.nxp.com/t5/Processor-Expert-Software/eeprom-bit-io/m-p/398993#M3163</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I am sorry but I am not able to use your driver and debug the application (it is fragment of your application and I have not also the eeprom device).&lt;/P&gt;&lt;P&gt;Please, look at the datasheet of your eeprom device and verify the configuration (control byte, chip selection address, address range and so on).&lt;/P&gt;&lt;P&gt;Do you execute acknowledge polling&amp;nbsp; after writing data into eeprom device? There is possible that you don't allow the device to write data, i.e. when you execute writing of a block of data the application must wait until all data are internally flashed into eeprom device.&lt;/P&gt;&lt;P&gt;For example there is stated in a 24LC512 datasheet:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;ACKNOWLEDGE POLLING&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P data-canvas-width="359.9115000000001" style="font-size: 15px; font-family: sans-serif;"&gt;&lt;EM&gt;Since the device will not acknowledge during a write&lt;/EM&gt;&lt;/P&gt;&lt;P data-canvas-width="359.89349999999996" style="font-size: 15px; font-family: sans-serif;"&gt;&lt;EM&gt;cycle, this can be used to determine when the cycle is&lt;/EM&gt;&lt;/P&gt;&lt;P data-canvas-width="359.88599999999997" style="font-size: 15px; font-family: sans-serif;"&gt;&lt;EM&gt;complete (this feature can be used to maximize bus&lt;/EM&gt;&lt;/P&gt;&lt;P data-canvas-width="359.94750000000005" style="font-size: 15px; font-family: sans-serif;"&gt;&lt;EM&gt;throughput). Once the Stop condition for a Write&lt;/EM&gt;&lt;/P&gt;&lt;P data-canvas-width="359.9564999999999" style="font-size: 15px; font-family: sans-serif;"&gt;&lt;EM&gt;command has been issued from the master, the device&lt;/EM&gt;&lt;/P&gt;&lt;P data-canvas-width="359.8875" style="font-size: 15px; font-family: sans-serif;"&gt;&lt;EM&gt;initiates the internally timed write cycle. ACK polling&lt;/EM&gt;&lt;/P&gt;&lt;P data-canvas-width="359.97599999999994" style="font-size: 15px; font-family: sans-serif;"&gt;&lt;EM&gt;can be initiated immediately. This involves the master&lt;/EM&gt;&lt;/P&gt;&lt;P data-canvas-width="359.9025" style="font-size: 15px; font-family: sans-serif;"&gt;&lt;EM&gt;sending a Start condition, followed by the control byte&lt;/EM&gt;&lt;/P&gt;&lt;P data-canvas-width="184.941" style="font-size: 15px; font-family: sans-serif;"&gt;&lt;EM&gt;for a Write command (R/W = 0). If the device is still&lt;/EM&gt;&lt;/P&gt;&lt;P data-canvas-width="359.93849999999975" style="font-size: 15px; font-family: sans-serif;"&gt;&lt;EM&gt;busy with the write cycle, then no ACK will be returned.&lt;/EM&gt;&lt;/P&gt;&lt;P data-canvas-width="359.90549999999996" style="font-size: 15px; font-family: sans-serif;"&gt;&lt;EM&gt;If no ACK is returned, then the Start bit and control byte&lt;/EM&gt;&lt;/P&gt;&lt;P data-canvas-width="359.958" style="font-size: 15px; font-family: sans-serif;"&gt;&lt;EM&gt;must be re-sent. If the cycle is complete, then the&lt;/EM&gt;&lt;/P&gt;&lt;P data-canvas-width="359.9535" style="font-size: 15px; font-family: sans-serif;"&gt;&lt;EM&gt;device will return the ACK and the master can then&lt;/EM&gt;&lt;/P&gt;&lt;P data-canvas-width="359.89800000000014" style="font-size: 15px; font-family: sans-serif;"&gt;&lt;EM&gt;proceed with the next Read or Write command. See&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;Figure 7-1 for flow diagram&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;Marek Neuzil&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 27 Nov 2015 10:26:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Processor-Expert-Software/eeprom-bit-io/m-p/398993#M3163</guid>
      <dc:creator>marek_neuzil</dc:creator>
      <dc:date>2015-11-27T10:26:23Z</dc:date>
    </item>
  </channel>
</rss>

