import machine
import at24c32n
import time
i2c = machine.I2C(0, scl=machine.Pin(22), sda=machine.Pin(21))
eeprom = at24c32n.AT24C32N(i2c)
print('escanea bus i2c...')
devices = i2c.scan()
if len(devices) == 0:
print("No hay dispositivos i2c!")
else:
print('Se encontro i2c dispositivos:',len(devices))
for device in devices:
print(" Direccion Decimal: ",device," | Direccion Hexa: ",hex(device))
# leer 32 bytes a partir de la dirección de memoria 0
print(eeprom.read(0, 32))
time.sleep_ms(1000)
# escribe Micros 32 bits en la dirección de memoria 0
eeprom.write(0, 'Micros 32 bits')
time.sleep_ms(1000)
# vuelve a leer Micros 32 bits
print(eeprom.read(0, 32))
time.sleep_ms(1000)
# leer solamente Micros 32 bits
print(eeprom.read(0, 14))
time.sleep_ms(1000)
# escribir varias páginas (32 bytes por página)
eeprom.write(0, b'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ')
print(eeprom.read(0,64))
time.sleep_ms(1000)
# escritura en varias páginas (llenar las páginas 0 y 1 con datos de prueba)
# la escritura se realiza en dos pasos, "0" x 32 en la primera página, luego "1" x 32 en la página siguiente
# la dirección de memoria estaba al principio de un límite de página, por lo que cada escritura es una escritura de página completa de 32 bytes
eeprom.write(0, b'0000000000000000000000000000000011111111111111111111111111111111')
print(eeprom.read(0,64))
time.sleep_ms(1000)
# escrituras parciales de página
# escribe algunos bytes que abarcan dos páginas, sin empezar en un límite de página
# la escritura se realiza en dos pasos, "abc" en la primera página y luego "def" en la página siguiente
eeprom.write(29, b'abcdef')
print(eeprom.read(0,64))
time.sleep_ms(1000)
# rellena toda la eeprom con 0xFF
buf = b'\xff' * 32
for i in range(128):
eeprom.write(i*32, buf)
time.sleep_ms(1000)
# mostrar límites de página
for i in range(128):
eeprom.write(i*32, '|-Page-{:-<24}|'.format(i))
print(eeprom.read(0,128))
time.sleep_ms(1000)
# leer toda la eeprom
eeprom.read(0,4096)
time.sleep_ms(1000)
print()