Porównaj commity

...

6 Commity

Autor SHA1 Wiadomość Data
Peter Hinch 4a8c00bf98 eep_i2c.py: Fix cptest path handling. 2024-01-07 18:05:40 +00:00
Peter Hinch 0a1bdce0d2 eep_i2c.py: Fix cptest path handling. 2024-01-07 18:04:06 +00:00
Peter Hinch b5e9bcb160
Merge pull request #22 from adeuring/master
Add support for I2C EEPROMs with page sizes other than 128 in eeprom_…
2024-01-07 08:29:24 +00:00
Abel Deuring 6399f9f6d3
- "Meaning" of the new EEPROM constructor parameter `page_size` changed from
the size itself to the binary logarithm of the size.
- Default value of this parameter changed from None to 7, to match the
  behaviour of the constructor in its previous form, as discussed in the PR.
- Dictionary _PAGE_SIZES removed.
- Documentation updated.
2024-01-06 16:07:04 +01:00
Peter Hinch 26f2726fee Docs: Add warnig re block protocol methods. 2024-01-05 17:47:35 +00:00
Abel Deuring 208b3089bb
Add support for I2C EEPROMs with page sizes other than 128 in eeprom_i2c.py. 2024-01-03 17:24:41 +01:00
8 zmienionych plików z 36 dodań i 16 usunięć

Wyświetl plik

@ -132,6 +132,7 @@ Arguments:
is `2**block_size` so is 512 bytes by default.
5. `addr` override base address for first chip
6. `max_chips_count` override max_chips_count
7. `page_size=7` The binary logarithm of the page size of the EEPROMs, i.e., the page size in bytes is `2 ** page_size`. The page size may vary between chips from different manufacturers even for the same storage size. Note that specifying a too large value will most likely lead to data corruption in write operations. Look up the correct value for your setup in the chip's datasheet.
With `addr` and `max_chips_count` override, it's possible to make multiple
configuration
@ -216,6 +217,9 @@ These are provided by the base class. For the protocol definition see
[the pyb documentation](http://docs.micropython.org/en/latest/library/uos.html#uos.AbstractBlockDev)
also [here](http://docs.micropython.org/en/latest/reference/filesystem.html#custom-block-devices).
These methods exist purely to support the block protocol. They are undocumented:
their use in application code is not recommended.
`readblocks()`
`writeblocks()`
`ioctl()`

Wyświetl plik

@ -67,9 +67,7 @@ def test(eep=None):
eep[sa + v] = v
for v in range(256):
if eep[sa + v] != v:
print(
"Fail at address {} data {} should be {}".format(sa + v, eep[sa + v], v)
)
print("Fail at address {} data {} should be {}".format(sa + v, eep[sa + v], v))
break
else:
print("Test of byte addressing passed")
@ -132,14 +130,15 @@ def cptest(eep=None): # Assumes pre-existing filesystem of either type
print("Fail mounting device. Have you formatted it?")
return
print("Mounted device.")
cp("eep_i2c.py", "/eeprom/")
cp("eeprom_i2c.py", "/eeprom/")
cp(__file__, "/eeprom/")
# We may have the source file or a precompiled binary (*.mpy)
cp(__file__.replace("eep", "eeprom"), "/eeprom/")
print('Contents of "/eeprom": {}'.format(uos.listdir("/eeprom")))
print(uos.statvfs("/eeprom"))
# ***** TEST OF HARDWARE *****
def full_test(eep=None, block_size = 128):
def full_test(eep=None, block_size=128):
eep = eep if eep else get_eep()
page = 0
for sa in range(0, len(eep), block_size):

Wyświetl plik

@ -19,7 +19,7 @@ T24C32 = const(4096) # 4KiB 32Kbits
# Logical EEPROM device consists of 1-8 physical chips. Chips must all be the
# same size, and must have contiguous addresses.
class EEPROM(BlockDevice):
def __init__(self, i2c, chip_size=T24C512, verbose=True, block_size=9, addr=_ADDR, max_chips_count=_MAX_CHIPS_COUNT):
def __init__(self, i2c, chip_size=T24C512, verbose=True, block_size=9, addr=_ADDR, max_chips_count=_MAX_CHIPS_COUNT, page_size=7):
self._i2c = i2c
if chip_size not in (T24C32, T24C64, T24C128, T24C256, T24C512):
print("Warning: possible unsupported chip. Size:", chip_size)
@ -29,6 +29,8 @@ class EEPROM(BlockDevice):
self._i2c_addr = 0 # I2C address of current chip
self._buf1 = bytearray(1)
self._addrbuf = bytearray(2) # Memory offset into current chip
self._page_size = 2 ** page_size
self._page_mask = ~(self._page_size - 1)
# Check for a valid hardware configuration
def scan(self, verbose, chip_size, addr, max_chips_count):
@ -67,7 +69,7 @@ class EEPROM(BlockDevice):
self._addrbuf[0] = (la >> 8) & 0xFF
self._addrbuf[1] = la & 0xFF
self._i2c_addr = self._min_chip_address + ca
pe = (addr & ~0x7F) + 0x80 # byte 0 of next page
pe = (addr & self._page_mask) + self._page_size # byte 0 of next page
return min(nbytes, pe - la)
# Read or write multiple bytes at an arbitrary address

Wyświetl plik

@ -209,6 +209,9 @@ These are provided by the base class. For the protocol definition see
[the pyb documentation](http://docs.micropython.org/en/latest/library/uos.html#uos.AbstractBlockDev)
also [here](http://docs.micropython.org/en/latest/reference/filesystem.html#custom-block-devices).
These methods exist purely to support the block protocol. They are undocumented:
their use in application code is not recommended.
`readblocks()`
`writeblocks()`
`ioctl()`

Wyświetl plik

@ -271,6 +271,9 @@ These are provided by the base class. For the protocol definition see
[the pyb documentation](http://docs.micropython.org/en/latest/library/uos.html#uos.AbstractBlockDev)
also [here](http://docs.micropython.org/en/latest/reference/filesystem.html#custom-block-devices).
These methods exist purely to support the block protocol. They are undocumented:
their use in application code is not recommended.
`readblocks()`
`writeblocks()`
`ioctl()`

Wyświetl plik

@ -187,6 +187,9 @@ These are provided by the base class. For the protocol definition see
[the pyb documentation](http://docs.micropython.org/en/latest/library/uos.html#uos.AbstractBlockDev)
also [here](http://docs.micropython.org/en/latest/reference/filesystem.html#custom-block-devices).
These methods exist purely to support the block protocol. They are undocumented:
their use in application code is not recommended.
`readblocks()`
`writeblocks()`
`ioctl()`

Wyświetl plik

@ -179,6 +179,9 @@ These are provided by the base class. For the protocol definition see
[the pyb documentation](http://docs.micropython.org/en/latest/library/uos.html#uos.AbstractBlockDev)
also [here](http://docs.micropython.org/en/latest/reference/filesystem.html#custom-block-devices).
These methods exist purely to support the block protocol. They are undocumented:
their use in application code is not recommended.
`readblocks()`
`writeblocks()`
`ioctl()`

Wyświetl plik

@ -163,6 +163,9 @@ These are provided by the base class. For the protocol definition see
[the pyb documentation](http://docs.micropython.org/en/latest/library/uos.html#uos.AbstractBlockDev)
also [here](http://docs.micropython.org/en/latest/reference/filesystem.html#custom-block-devices).
These methods exist purely to support the block protocol. They are undocumented:
their use in application code is not recommended.
`readblocks()`
`writeblocks()`
`ioctl()`