1 votos

Interfaz EEPROM confusión con la Dirección?

Así que estoy investigando cómo interactuar con un chip EEPROM a través de I2C con un AVR (todavía estoy aprendiendo mucho sobre 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 excepto por una parte:

introducir descripción de la imagen aquí

Entonces creo que mi confusión radica en las "Direcciones" de dónde escribir. ¿O tal vez estoy confundiendo la dirección del dispositivo? Si solo tuviera 1 EEPROM conectada... ¿sería simplemente cero? Estoy asumiendo que esto es solo si tuvieras más de un chip en la línea i2c?

De todos modos, vamos a suponer que tengo 1, necesitaría seguir estos pasos según mi comprensión (corríjanme si me equivoco):

  1. Inicializar I2C
  2. Enviar el bit de inicio
  3. Enviar la dirección del dispositivo (¿que supongo que sería 0x00?, esto asume escribir en R/W es 0, por supuesto, ya que es el LSB)
  4. Esperar la ACK de vuelta del EEPROM (¿esto literalmente solo sería un 0 que vuelve o qué?)
  5. Escribir la dirección de la palabra (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. Esperar ACK para ver si es una dirección válida
  7. Enviar mis datos hasta que envíe el bit de parada (Asumo que el EEPROM "sabe" moverse a la siguiente dirección después de cada byte de datos? ¿o hay que actualizar la dirección de la palabra cada vez?)

Gracias! solo un poco confundido por el funcionamiento interno.

3voto

Chenghua Yang Puntos 51

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 solo responde si su propia dirección coincide con la dirección en ese byte.

Para permitir que múltiples chips idénticos se utilicen en el mismo bus, algunos bits de dirección son configurables (con los pines Ax). Por ejemplo, si tienes dos chips de 1 Kb, con los pines A0/1/2 configurados en 0/0/0 y 1/1/1, respectivamente, entonces estos dos chips pueden ser direccionados con 1010000 y 1010111.

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

Cuando un chip es más grande que 256 bytes, una sola palabra de dirección ya no es suficiente para alcanzar todos los bytes. Por lo tanto, estos chips grandes fingen ser múltiples dispositivos, cada uno con su propia dirección de esclavo. Por ejemplo, el chip de 4 Kb (= 512 bytes) accede los primeros 256 bytes cuando se usa la dirección de esclavo 1010xx0, y los últimos 256 bytes cuando se usa la dirección de esclavo 1010xx1 (donde xx son configurados por los dos pines A).

En general, dejas que el hardware AVR maneje los detalles del protocolo I²C como los bits de inicio/parada/ACK; solo necesitas preocuparte por eso cuando estás haciendo una implementación de I²C de software.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X