def _eeprom_spi_wait( spi: busio.SPI, csel: digitalio.DigitalInOut, timeout: float = 1.0 ) -> bool: # Continually read from STATUS register timestamp = time.monotonic() while time.monotonic() < timestamp + timeout: # Perfrom RDSR operation csel.value = False result = bytearray(1) spi.write(bytearray([EEPROM_SPI_RDSR])) spi.readinto(result) csel.value = True # Mask out and compare WIP bit if (result[0] & (1 << EEPROM_SPI_WIP_BIT)) == 0: return True return False
def _eeprom_spi_read_byte( spi: busio.SPI, csel: digitalio.DigitalInOut, address: int, timeout: float = 1.0 ) -> Tuple[bool, bytearray]: # Make sure address is only one byte: if address > 255: return False, bytearray() # Wait for WIP to be low if not _eeprom_spi_wait(spi, csel, timeout): return False, bytearray() # Read byte from address csel.value = False result = bytearray(1) spi.write(bytearray([EEPROM_SPI_READ, address])) spi.readinto(result) csel.value = True return True, result