spi_flash: support spi protocol changes

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
Eric Callahan 2022-04-22 19:48:39 -04:00 committed by KevinOConnor
parent 7793784640
commit 7db07c46e6
1 changed files with 22 additions and 8 deletions

View File

@ -104,7 +104,10 @@ GET_CFG_RESPONSES = ( # Supported responses (sorted by newer revisions first).
"config is_config=%c crc=%u move_count=%hu is_shutdown=%c" # Original
)
ALLOC_OIDS_CMD = "allocate_oids count=%d"
SPI_CFG_CMD = "config_spi oid=%d pin=%s"
SPI_CFG_CMDS = (
"config_spi oid=%d pin=%s cs_active_high=%d", # 7793784
"config_spi oid=%d pin=%s" # Original
)
SPI_BUS_CMD = "spi_set_bus oid=%d spi_bus=%s mode=%d rate=%d"
SW_SPI_BUS_CMD = "spi_set_software_bus oid=%d " \
"miso_pin=%s mosi_pin=%s sclk_pin=%s mode=%d rate=%d"
@ -794,6 +797,7 @@ class MCUConnection:
self.connected = False
self.enumerations = {}
self.raw_dictionary = None
self.proto_error = None
def connect(self):
output("Connecting to MCU..")
@ -821,6 +825,7 @@ class MCUConnection:
% (build_mcu_type, mcu_type))
self.enumerations = msgparser.get_enumerations()
self.raw_dictionary = msgparser.get_raw_data_dictionary()
self.proto_error = msgparser.error
def _do_serial_connect(self, eventtime):
endtime = eventtime + 60.
@ -903,15 +908,24 @@ class MCUConnection:
bus_cmd = SPI_BUS_CMD % (SPI_OID, bus, SPI_MODE, SD_SPI_SPEED)
if cs_pin not in pin_enums:
raise SPIFlashError("Invalid CS Pin: %s" % (cs_pin,))
cfg_cmds = [
ALLOC_OIDS_CMD % (1),
SPI_CFG_CMD % (SPI_OID, cs_pin),
bus_cmd,
cfg_cmds = [ALLOC_OIDS_CMD % (1,), bus_cmd]
self._serial.send(cfg_cmds[0])
spi_cfg_cmds = [
SPI_CFG_CMDS[0] % (SPI_OID, cs_pin, False),
SPI_CFG_CMDS[1] % (SPI_OID, cs_pin),
]
for cmd in spi_cfg_cmds:
try:
self._serial.send(cmd)
except self.proto_error:
if cmd == spi_cfg_cmds[-1]:
raise
else:
cfg_cmds.insert(1, cmd)
break
self._serial.send(bus_cmd)
config_crc = zlib.crc32('\n'.join(cfg_cmds).encode()) & 0xffffffff
cfg_cmds.append(FINALIZE_CFG_CMD % (config_crc,))
for cmd in cfg_cmds:
self._serial.send(cmd)
self._serial.send(FINALIZE_CFG_CMD % (config_crc,))
self.fatfs = FatFS(self._serial)
self.reactor.pause(self.reactor.monotonic() + .5)
printfunc("Initializing SD Card and Mounting file system...")