Actualmente estoy escribiendo una biblioteca para las EEPROM de la serie 24C de ATMEL (no es una pregunta de programación) . La biblioteca funciona bien con una sola EEPROM en este momento y estoy tratando de admitir varias EEPROM ahora, ya que, según la hoja de datos, se pueden conectar hasta 8 EEPROM 24C02 al mismo tiempo. Sin embargo, no puedo entender cómo asignar una dirección a la EEPROM. Por lo que entiendo, puedo asignar una dirección entre 0x50 y 0x57 configurando los pines A0, A1 y A2 en ALTO o BAJO. Sin embargo, no importa a qué configuro estos pines. La EEPROM utiliza las 8 direcciones:
I2C scanner. Scanning ...
Found address: 80 (0x50)
Found address: 81 (0x51)
Found address: 82 (0x52)
Found address: 83 (0x53)
Found address: 84 (0x54)
Found address: 85 (0x55)
Found address: 86 (0x56)
Found address: 87 (0x57)
Done.
Found 8 device(s).
Esta salida es del escáner I2C. Puedo transmitir con todas las direcciones y la única EEPROM lo recibe todo. ¿Hay algo más que deba hacer?
Aquí está la hoja de datos de la EEPROM: https://www.rhydolabz.com/documents/24c04.pdf
¿Está confundido por el error común que muchas personas cometen al tratar incorrectamente la dirección de un I 2 C? Algunas partes se referirán a la dirección como una cantidad de 7 bits que no incluye el bit R/W. Otros se referirán a la dirección como una cantidad de 8 bits que incluye el bit R/W. Incluso la hoja de datos que vinculó puede generar confusión a este respecto. En la figura 4 se refieren a la dirección como una cantidad de 8 bits:
Y en la figura 5 inmediatamente siguiente se refieren a la dirección como la cantidad de 7 bits de MSB a LSB:
También tenga en cuenta que los pines A0 a A2 en el paquete del dispositivo deben permanecer estáticos en un diseño. Si se utiliza un total de ocho 24C02 en el diseño, cada uno de los dispositivos tendrá estos tres pines fuertemente sujetos en una combinación diferente del conjunto de 000b, 001b, 010b, 011b, 100b, 101b, 110b y 111b. Cuando dice que está "escribiendo" en los pines, esto no aclara exactamente lo que está haciendo. Normalmente no hay escritura en los pines 24C02. En cambio, los tres bits que proporciona en la interfaz en el campo de dirección del dispositivo deben coincidir con los valores fijos en los pines para que se seleccione el dispositivo.
Si por casualidad hubiera decidido agregar algunos otros MCU GPIO vinculados a los pines A0, A1 y A2 en un solo dispositivo, ese no sería un escenario de uso válido. Además de eso, nunca he estado seguro de que sea posible cambiar dinámicamente el valor ajustado en los pines A0, A1 y A2 de un 24C02 después de que se haya encendido.
Los pines A0:A2 se utilizan para crear la dirección.
Entonces, por ejemplo, mantiene A0: bajo, A1: alto y A2: bajo, su dirección será 1010010 + R/W.
El dispositivo no responderá a la dirección que se establece dinámicamente. Considera el valor de A0, A1 y A2 antes del encendido y lo mantiene hasta que se reinicia.
turbo j
Pedro Smith
usuario193111
usuario193111
manyyack