51
51
__version__ = "0.0.0-auto.0"
52
52
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_FRAM.git"
53
53
54
- _MAX_SIZE_I2C = const (32768 )
55
- _MAX_SIZE_SPI = const (8192 )
54
+ _MAX_SIZE_I2C = const (0x8000 )
55
+ _MAX_SIZE_SPI = const (0x2000 )
56
56
57
57
_I2C_MANF_ID = const (0x0A )
58
58
_I2C_PROD_ID = const (0x510 )
@@ -310,7 +310,8 @@ class FRAM_SPI(FRAM):
310
310
311
311
# pylint: disable=too-many-arguments,too-many-locals
312
312
def __init__ (
313
- self , spi_bus , spi_cs , write_protect = False , wp_pin = None , baudrate = 100000
313
+ self , spi_bus , spi_cs , write_protect = False , wp_pin = None , baudrate = 100000 ,
314
+ max_size = _MAX_SIZE_SPI
314
315
):
315
316
from adafruit_bus_device .spi_device import ( # pylint: disable=import-outside-toplevel
316
317
SPIDevice as spidev ,
@@ -327,20 +328,26 @@ def __init__(
327
328
raise OSError ("FRAM SPI device not found." )
328
329
329
330
self ._spi = _spi
330
- super ().__init__ (_MAX_SIZE_SPI , write_protect , wp_pin )
331
+ super ().__init__ (max_size , write_protect , wp_pin )
331
332
332
333
def _read_address (self , address , read_buffer ):
333
- write_buffer = bytearray (3 )
334
+ write_buffer = bytearray (4 )
334
335
write_buffer [0 ] = _SPI_OPCODE_READ
335
- write_buffer [1 ] = address >> 8
336
- write_buffer [2 ] = address & 0xFF
336
+ if self ._max_size > 0xFFFF :
337
+ write_buffer [1 ] = (address >> 16 ) & 0xFF
338
+ write_buffer [2 ] = (address >> 8 ) & 0xFF
339
+ write_buffer [3 ] = address & 0xFF
340
+ else :
341
+ write_buffer [1 ] = (address >> 8 ) & 0xFF
342
+ write_buffer [2 ] = address & 0xFF
343
+
337
344
with self ._spi as spi :
338
345
spi .write (write_buffer )
339
346
spi .readinto (read_buffer )
340
347
return read_buffer
341
348
342
349
def _write (self , start_address , data , wraparound = False ):
343
- buffer = bytearray (3 )
350
+ buffer = bytearray (4 )
344
351
if not isinstance (data , int ):
345
352
data_length = len (data )
346
353
else :
@@ -359,8 +366,13 @@ def _write(self, start_address, data, wraparound=False):
359
366
spi .write (bytearray ([_SPI_OPCODE_WREN ]))
360
367
with self ._spi as spi :
361
368
buffer [0 ] = _SPI_OPCODE_WRITE
362
- buffer [1 ] = start_address >> 8
363
- buffer [2 ] = start_address & 0xFF
369
+ if self ._max_size > 0xFFFF :
370
+ buffer [1 ] = (start_address >> 16 ) & 0xFF
371
+ buffer [2 ] = (start_address >> 8 ) & 0xFF
372
+ buffer [3 ] = start_address & 0xFF
373
+ else :
374
+ buffer [1 ] = (start_address >> 8 ) & 0xFF
375
+ buffer [2 ] = start_address & 0xFF
364
376
spi .write (buffer )
365
377
for i in range (0 , data_length ):
366
378
spi .write (bytearray ([data [i ]]))
0 commit comments