-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathi2ceeprom.py
50 lines (35 loc) · 1.23 KB
/
i2ceeprom.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# i2ceeprom.py
# routines to address I2C serial EEPROM and store module config data
# SDA = pin 16, SCL = pin 17
import time
from machine import Pin, I2C
import logger
class i2ceeprom:
def __init__(self, i2caddr=0x50, scl_pin=17, sda_pin=16, size=8192):
self.logger = logger.logger()
self.logger.log("** i2ceeprom constructor")
self.i2caddr = i2caddr
self.bus = I2C(0, scl=Pin(scl_pin), sda=Pin(sda_pin), freq=400_000)
slaves = self.bus.scan()
self.logger.log(f"found devices: {slaves}")
self._addrbuf = bytearray(2)
self._databuf = bytearray(1)
self.set_size(size)
def set_size(self, size):
self.size = size
def read(self, addr):
self._addrbuf[0] = (addr >> 8) & 0xff
self._addrbuf[1] = addr & 0xff
self.bus.writeto(self.i2caddr, self._addrbuf)
data = self.bus.readfrom(self.i2caddr, 1)
return data
def write(self, addr, data):
t = bytearray(3)
t[0] = (addr >> 8) & 0xff
t[1] = addr & 0xff
t[2] = data & 0xff
self.bus.writeto(self.i2caddr, t)
time.sleep_ms(5)
def erase(self):
for x in range(0, self.size - 1):
self.write(x, 0xff)