EEPROM ¿Confusión de la interfaz con la dirección?

1

Así que estoy investigando cómo interactuar con un chip EEPROM a través de I2C con un AVR (todavía estoy aprendiendo mucho de la interfaz).

De todos modos, el AT24C16 por ejemplo (o esa familia de EEPROM) parece bastante popular. Miré la hoja de datos y, en su mayoría, tenía sentido, además de una parte:

Asíquecreoquemiconfusiónestáenlas"Direcciones" de dónde escribir. ¿O tal vez estoy confundiendo la dirección del dispositivo? Si solo tuviera 1 eeprom conectado ... ¿sería solo cero? ¿Supongo que esto es solo si tuviera más de un chip en la línea i2c?

De todos modos, simulemos que tengo 1, necesitaría seguir estos pasos desde mi entendimiento (corríjame si me equivoco):

  1. Inicializar I2C
  2. Enviar el bit de inicio
  3. Enviar la dirección del dispositivo (¿cuál supongo que sería 0x00?, esta supuesta escritura en R / W es 0, por supuesto, ya que es el LSB)
  4. Espere a que ACK vuelva de la EEPROM (¿Esto sería literalmente un 0 que regresa o qué?)
  5. Escriba la palabra Dirección (no entiendo cómo un chip puede tener 1024 ubicaciones, por ejemplo, si hay 8 bits para una ubicación. ¿El valor máximo para 8 bits es 255?)
  6. Espere a que ACK vea si esa es una dirección válida
  7. Enviar mis datos hasta que envíe un bit de detención (supongo que la EEPROM "sabe" que se debe mover a la siguiente dirección después de cada byte de datos, ¿o tiene que actualizar la dirección de la palabra cada vez?)

Gracias! solo un poco confundido por el funcionamiento interno.

    
pregunta msmith1114

1 respuesta

3

El primer byte de una transacción I²C contiene la dirección de esclavo de 7 bits. Se supone que cada dispositivo esclavo en el bus tiene una dirección única y que responde solo si su propia dirección coincide con la dirección en ese byte.

Para permitir que se usen múltiples chips idénticos en el mismo bus, algunos bits de dirección se pueden configurar (con los pines Axe). Por ejemplo, si tiene dos chips de 1 Kb, con los pines A0 / 1/2 configurados en 0/0/0 y 1/1/1, respectivamente, estos dos chips pueden direccionarse con 1010 000 y 1010 111 .

La hoja de datos cuenta bits , no bytes, para hacer que los números parezcan más grandes. Estos chips realmente pueden almacenar 128/256 /… / 2048 bytes de datos.

Cuando un chip tiene más de 256 bytes, la palabra de dirección única ya no es suficiente para alcanzar todos los bytes. Así que estos grandes chips pretenden ser múltiples dispositivos, cada uno con su propia dirección de esclavo. Por ejemplo, el chip de 4 Kb (= 512 bytes) accede a los primeros 256 bytes cuando usa la dirección de esclavo 1010xx 0 , y los últimos 256 bytes cuando usa la dirección de esclavo 1010xx 1 ( donde xx están establecidos por los dos pines A).

En general, deja que el hardware del AVR maneje los detalles del protocolo I²C, como los bits de inicio / parada / ACK; debe preocuparse por eso solo al realizar una implementación de I²C por software.

    
respondido por el CL.

Lea otras preguntas en las etiquetas