MCPcopy Create free account
hub / github.com/RetiredWizard/PyDOS / SPIflash

Class SPIflash

mpython/extFlash/lib/spiflash.py:49–158  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

47SECTOR_SIZE = const(4096)
48
49class SPIflash:
50 def __init__(self, spi, cs, addr4b=False, size=None, pagesize=PAGE_SIZE, sectorsize=SECTOR_SIZE):
51 self._spi = spi
52 self._cs = cs
53 self._cs(1)
54 self._buf = bytearray(1)
55 self.pagesize = pagesize
56 self._addr4b = 0
57 self._cmds = _CMDS3BA
58 self._addrbuf = bytearray(4)
59
60 self.wait()
61 if size is None:
62 id = self.getid()
63 if id[2] == 1:
64 self._size = 512 * 1024
65 else:
66 self._size = 1 << id[2]
67 else:
68 self._size = size
69
70 header = self.get_sfdp(0, 16)
71 len = header[11] * 4;
72 if len >= 29:
73 addr = header[12] + (header[13] << 8) + (header[14] << 16)
74 table = self.get_sfdp(addr, len)
75 self._addr4b = ((table[2] >> 1) & 0x03) != 0
76 self.sectorsize = 1 << table[28]
77 else:
78 self._addr4b = addr4b
79 self.sectorsize = sectorsize
80
81 if self._addr4b:
82 self._cmds = _CMDS4BA
83 self._addrbuf = bytearray(5)
84
85 def flash_size(self):
86 return self._size
87
88 def flash_sectorsize(self):
89 return self.sectorsize
90
91 def _write_cmd(self, val):
92 self._buf[0] = val
93 self._spi.write(self._buf)
94
95 def _write_addr(self, cmd, addr):
96 self._addrbuf[0] = cmd
97 if self._addr4b:
98 self._addrbuf[-4] = addr >> 24
99 self._addrbuf[-3] = addr >> 16
100 self._addrbuf[-2] = addr >> 8
101 self._addrbuf[-1] = addr
102 self._cs(0)
103 self._spi.write(self._addrbuf)
104
105 def getid(self):
106 self._cs(0)

Callers 2

ThngPls_SAMD51.pyFile · 0.90
XIAO_nRF52840.pyFile · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected