Paso 3: 24AA - / 24LC I2C EEPROM
Bus: I2C, resistencias de pull-up requeridos.
Requisitos de alimentación: 1.8volts a 5.5volts (24AA), 2.5volts a 5.5 voltios (24LC).
Referencias: hoja de datos, hackear una demostración del día.
Registro de sesión completa Bus Pirate para esta demostración.
No podía incluir algún formato y tablas HTML en un Instructable, usted puede ver el original en el blog de prototipos peligroso.
IC4 es un 24AA serie I2C EEPROM de Microchip, estos EEPROMs vienen en una tonelada de tamaños. Piezas AA trabajan desde 1.8volts a 5.5volts, mientras que las partes 24LC tienen un requisito mínimo de 2,5 voltios.
Un 0.1uF condensador (C2) desempareja IC4 de la alimentación. Protección contra la escritura pin (WP) puede ser controlado desde un microcontrolador, pero esta simple demostración desactivar con una conexión a tierra. Los pines de bus I2C, SDA y SCL, se sacó al jefe JP2.
La dirección de la mayoría 24AA EEPROMs es 1010AAAS, con los cuatro bits finales determinados por los pines de dirección (A0, A1, A2) y el bit de selección modo de lectura/escritura (S). Todos los bits de dirección se basan en este ejemplo, por lo que la dirección de escritura de la EEPROM es 10100000 (hoja de datos, página 6).
Programa de instalación
Si está utilizando a un Bus Pirate, conecte al 3EEPROM o 24AA-IC como se muestra en la imagen de la tabla a continuación. I2C es un bus bidireccional que requiere resistencias de pull-up en ambos pines. Puede utilizar resistencias de pull-up a bordo del Bus Pirate conectando el pin Vpullup (Vpu) a la fuente de alimentación de 3.3 voltios y que les permita en el terminal.
Entretela
Nota: No todos EEPROMs I2C funcionan de la misma. La pequeña 24AA01, por ejemplo, tiene un sistema de mando y abordar completamente diferente. Asegúrese de comprobar la hoja de datos para su ficha.
Soy de la prensa ' en el I2C Bus Pirate terminal y seleccione en el menú modo. Habilitar las fuentes de alimentación (grandes ' W') y las resistencias de pull-up ('p', opción 2) en el indicador de I2C. Obtener un informe de la tensión (v) para asegurarse de que las fuentes de alimentación son el y el pin Vpullup está conectado a un voltaje.
I2C > (0) <<< obtener la lista de macros
0 menú macro
búsqueda de direcciones de bits 1,7
I2C > (1) <<< utilizar la macro de búsqueda de dirección
Busca el espacio de direcciones de 7 bits I2C.
Dispositivos encontrados en:
0XA0 0xA1 <<< encontrado dispositivos
I2C >
Ya sabemos que la dirección I2C es 10100000, pero también podemos usar macro de búsqueda del Pirata Bus I2C (1) buscar la 24AA-. La macro de búsqueda encontró el dispositivo en la escritura esperada (0xA0) y Lee (0xA1) direcciones.
Paso 1, escriba algunos valores
I2C > [0b10100000 0 0 3 2 1]
CONDICIÓN de inicio de I2C <<< I2C Inicio condición
ESCRITURA: 0xA0 consiguió ACK: sí <<< dirección 24AA-escritura
ESCRITURA: 0 x 00 consiguió ACK: sí <<< escribir dirección byte 1
ESCRITURA: 0 x 00 consiguió ACK: sí <<< escribir dirección byte 2
ESCRITURA: 0 x 03 consiguió ACK: sí <<< 3 valores para escribir (3,2,1)
ESCRITURA: 0 X 02 CONSIGUIÓ ACK: SÍ
ESCRITURA: 0 X 01 CONSIGUIÓ ACK: SÍ
CONDICIÓN de parada de I2C <<< condición de parada de I2C
I2C >
Comenzar la escritura con una condición de inicio de I2C ([]), seguida de la dirección de escritura 24AA (0xa0). A continuación, enviar la dirección de 16 bits escribir a (0 0) y los datos a escribir (3 2 1). Fin de la transacción I2C con una condición de parada (]).
Paso 2, coloque el puntero de lectura
I2C > [0b10100000 0 0]
CONDICIÓN de inicio de I2C <<< I2C Inicio condición
ESCRITURA: 0xA0 consiguió ACK: sí <<< dirección 24AA-escritura
ESCRITURA: 0 x 00 consiguió ACK: sí <<< escribir dirección byte 1
ESCRITURA: 0 x 00 consiguió ACK: sí <<< escribir dirección byte 2
CONDICIÓN de parada de I2C <<< condición de parada de I2C
I2C >
Se necesitan dos operaciones leer de la 24AA-. Uno coloca el puntero de lectura/escritura, el otro devuelve los valores.
Comienzan con una condición de inicio de I2C ([]) y la dirección de escritura (0xa0). Enviar la dirección de 16 bits para leer (0 0) y entonces la condición de parada (]). No enviamos los datos para escribir esta vez, que sólo coloca el puntero de lectura/escritura a principio de los datos que escribió en el paso 1.
Paso 3, leer algunos valores
I2C > [0b10100001 r: 3]
CONDICIÓN de inicio de I2C <<< I2C Inicio condición
ESCRITURA: 0xA1 consiguió ACK: sí <<< dirección 24AA-leer
A granel leer BYTES de 0 x 03: <<< Lea 3 valores
0 x 03 0x02 0x01
CONDICIÓN de parada de I2C <<< condición de parada de I2C
I2C >
Paso 2 Coloque el puntero de lectura/escritura al principio de los datos que queremos leer. Ahora podemos leer los datos utilizando la dirección 24AA de leer.
Comienzan con la condición de inicio de I2C ([]) y 24AA leer dirección (0xa1). Leer los tres valores que escribió en el paso 1 (r: 3) y terminan con una condición de parada (]). Si los valores coinciden, su escritura era acertado.