Respuesta de I2C a "Ghost Address" 0x5F

1

Hace poco compré un ZS-042 RTC module que se comunica mediante el protocolo I2C. El módulo incluye un DS3231 (RTC) y un AT24C32 (4k EEPROM) .

El módulo ZS-042 no tiene hoja de datos, pero el listado de Ebay (vinculado arriba) muestra cómo se ensamblan el DS3231 y el AT24C32 en el módulo (ZS-042 NO es un IC).

Cuando lo compré, no tenía idea de qué direcciones de I2C se encontraban en el dispositivo, por lo que ejecuté un escaneo rápido y las direcciones 0x57, 0x5F y 0x68 reconocidas.

Estoy un poco confundido porque el módulo solo incluye dos dispositivos I2C, pero recibo el ACK de tres. Investigué y las direcciones I2C 0x57 y 0x68 corresponden a DS3131 y AT24C32 respectivamente, pero no pude encontrar un solo dispositivo con la dirección 0x5F.

Intenté ejecutar la exploración con el módulo desconectado y las tres direcciones desaparecieron. Cuando se reconectaron, las tres direcciones reaparecieron. Para empeorar las cosas, cuando envío un byte al dispositivo fantasma, ¡el dispositivo ACKs!

Puedo ver físicamente solo dos circuitos integrados soldados al ZS-042.

¿Alguna idea de qué dispositivo responde a la dirección I2C 0x5F?

P.S. Estoy usando un Arduino UNO con una biblioteca personalizada para ejecutar las líneas I2C a 3.3V (no el estándar de 5V) desde cualquier par de pines digitales. Yo mismo escribí la biblioteca utilizando las pautas del protocolo I2C y la he probado exhaustivamente en EEPROM. Este es un enlace a los archivos de la biblioteca:

enlace

Estoy usando este simple boceto para buscar dispositivos:

#include <I2CDigital.h>

#define WRITE 0b00000000
#define READ 0b00000001

I2CDigital I2C(12,11);

void setup(){
  Serial.begin(9600);
}

void loop() {
  for(int i=16;i<120;i++){
    if(I2C.startCom((byte)i,WRITE)){
      Serial.print("Device detected at address: ");
      Serial.println(i);
      if(I2C.sendByte(0b00000000)){
        Serial.println("Byte sent successfully");
      }
      I2C.stopCom();
      delayMicroseconds(5);
    }
  }
  delay(5000);
}

Gracias de antemano!

EDIT sugerido por @ChrisStratton:

Para poder usar cualquier par de pines digitales para la comunicación I2C, los pines solo se pueden ejecutar en pinMode(pin,INPUT) (para lógica alta) o pinMode(pin,OUTPUT) y digitalWrite(pin,LOW) (para lógica baja). Luego, las líneas se pueden conectar a cualquier tensión de activación deseada (siempre que el dispositivo aún lo reconozca como lógica alta).

En mi caso particular, están conectados al regulador de 3.3V en el Arduino a través de resistencias de 4.7k.

EDIT sugerido por @ElliotAlderson:

simular este circuito : esquema creado usando CircuitLab

EDIT sugerido por @Janka

DS3131

AT24C32

    
pregunta J Physics FM

1 respuesta

3

AT24C32 original (y amigos) dicen ATMEL al principio de la primera línea de la marca, no ATMLH (o cualquier otra cosa).

El chip en su tablero es una imitación del AT24C32 original. Puede hacer cualquier cosa . Por favor, consulte la hoja de datos de ese chip ATMLH24C32, si puede encontrarlo. Sospecho que esto tiene un decodificador de dirección incompleto para que sea posible pasar por dos chips diferentes, el AT24C32 y algún otro original en la dirección 0x5f.

    
respondido por el Janka

Lea otras preguntas en las etiquetas