53 from time
import sleep
64 def __init__(self, slave, byteCount, pageSize, writeTime, name):
66 if not slave
in range(0x50, 0x57 + 1):
67 raise ValueError(
"Slave value [0x%02X] out of range [0x%02X..0x%02X]" % (slave, 0x50, 0x57))
68 I2C.__init__(self, slave)
70 Memory.__init__(self, byteCount)
71 self._pageSize = pageSize
72 self._writeTime =
toint(writeTime) / 1000
78 return "%s(slave=0x%02X)" % (self.name, self.slave)
84 (addrHigh, addrLow) = self.splitAddress(address)
85 return self.read16Byte(addrHigh, addrLow)
88 (addrHigh, addrLow) = self.splitAddress(address)
89 self.write16Byte(addrHigh, addrLow, value)
90 sleep(self._writeTime)
93 (addrHigh, addrLow) = self.splitAddress(address * 2)
94 data = self.read16Bytes(addrHigh, addrLow, 2)
95 return (data[0] << 8) + data[1]
99 data[0] = (value >> 8) & 0xFF
100 data[1] = value & 0xFF
101 self.writeMemoryBytes(address * 2, data)
104 (addrHigh, addrLow) = self.splitAddress(address * 4)
105 data = self.read16Bytes(addrHigh, addrLow, 4)
106 return (data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3]
110 data[0] = (value >> 24) & 0xFF
111 data[1] = (value >> 16) & 0xFF
112 data[2] = (value >> 8) & 0xFF
113 data[3] = value & 0xFF
114 self.writeMemoryBytes(address * 4, data)
121 maxCount = self.byteCount()
124 self.checkByteAddress(start)
125 self.checkStopByteAddress(stop)
128 raise ValueError(
"Stop address must be >= start address")
129 readCount = stop - start
130 (addrHigh, addrLow) = self.splitAddress(start)
131 return self.read16Bytes(addrHigh, addrLow, readCount)
134 self.checkByteAddress(start)
135 stop = start + len(byteValues)
136 self.checkStopByteAddress(stop)
137 self.writeMemoryBytesPaged(start, byteValues)
143 return (address >> 8, address & 0xFF)
146 pSize = self._pageSize
147 firstPage = start // pSize
148 lastPage = (start + len(byteValues) - 1) // pSize
149 if firstPage == lastPage:
150 (addrHigh, addrLow) = self.splitAddress(start)
151 self.write16Bytes(addrHigh, addrLow, byteValues)
152 sleep(self._writeTime)
155 for p
in range(firstPage, lastPage+1):
156 vStart = p * pSize - start
159 vStop = (p + 1) * pSize - start
160 pageBytes = byteValues[vStart:vStop]
161 (addrHigh, addrLow) = self.splitAddress(address)
162 self.write16Bytes(addrHigh, addrLow, pageBytes)
163 address = (p + 1) * pSize
164 sleep(self._writeTime)
170 self.writeBytes([addrHigh, addrLow])
171 return self.readByte()
174 self.writeBytes([addrHigh, addrLow])
175 if count < (I2CMAXBUFF + 1):
176 return self.readBytes(count)
179 remainingCount = count
180 while remainingCount > I2CMAXBUFF:
181 remainingCount = remainingCount - I2CMAXBUFF
182 byteValues += self.readBytes(I2CMAXBUFF)
183 byteValues += self.readBytes(remainingCount)
188 self.writeBytes([addrHigh, addrLow, byte])
193 d = bytearray(len(buff)+2)
208 EE24XXXX.__init__(self, slave, 4096, 32, writeTime,
"EE24BASIC")
215 def __init__(self, slave=0x50, writeTime=5, slots=4096):
217 if not slots
in range(1, 4097):
218 raise ValueError(
"Slots value [%d] out of range [1..4096]" % slots)
219 EE24XXXX.__init__(self, slave, slots, 32, writeTime,
"EE24X32")
226 def __init__(self, slave=0x50, writeTime=5, slots=8192):
227 if not slots
in range(1, 8193):
228 raise ValueError(
"Slots value [%d] out of range [1..8192]" % slots)
229 EE24XXXX.__init__(self, slave, slots, 32, writeTime,
"EE24X64")
236 def __init__(self, slave=0x50, writeTime=5, slots=16384):
237 if not slots
in range(1, 16385):
238 raise ValueError(
"Slots value [%d] out of range [1..16384]" % slots)
239 EE24XXXX.__init__(self, slave, slots, 64, writeTime,
"EE24X128")
246 def __init__(self, slave=0x50, writeTime=5, slots=32768):
247 if not slots
in range(1, 32769):
248 raise ValueError(
"Slots value [%d] out of range [1..32768]" % slots)
249 EE24XXXX.__init__(self, slave, slots, 64, writeTime,
"EE24X256")
256 def __init__(self, slave=0x50, writeTime=5, slots=65536):
257 if not slots
in range(1, 65537):
258 raise ValueError(
"Slots value [%d] out of range [1..65536]" % slots)
259 EE24XXXX.__init__(self, slave, slots, 128, writeTime,
"EE24X512")
270 def __init__(self, slave=0x50, writeTime=5, slots=65536):
271 if not slots
in range(1, 65537):
272 raise ValueError(
"Slots value [%d] out of range [1..65536]" % slots)
273 EE24XXXX.__init__(self, slave, slots, 128, writeTime,
"EE24X1024_2")
def writeMemoryBytesPaged