From 1d75948839319ad622aae796bb027b79412f6f28 Mon Sep 17 00:00:00 2001 From: Mateusz Faderewski Date: Sat, 21 Jan 2023 03:44:26 +0100 Subject: [PATCH] [SC64][SW] Fixed FPGA refresh --- sw/controller/src/lcmxo2.c | 16 +--------------- sw/pc/primer.py | 15 +++++++-------- 2 files changed, 8 insertions(+), 23 deletions(-) diff --git a/sw/controller/src/lcmxo2.c b/sw/controller/src/lcmxo2.c index ba66e81..de8535c 100644 --- a/sw/controller/src/lcmxo2.c +++ b/sw/controller/src/lcmxo2.c @@ -36,7 +36,6 @@ #define LSC_READ_FEABITS (0xFB) #define ISC_NOOP (0xFF) -#define ISC_ERASE_SRAM (1 << 16) #define ISC_ERASE_FEATURE (1 << 17) #define ISC_ERASE_CFG (1 << 18) #define ISC_ERASE_UFM (1 << 19) @@ -189,11 +188,6 @@ static void lcmxo2_disable_flash (void) { lcmxo2_execute_cmd(ISC_NOOP, 0xFFFFFF, CMD_NORMAL, NULL, 0, false); } -static bool lcmxo2_erase_sram (void) { - lcmxo2_execute_cmd(ISC_ERASE, ISC_ERASE_SRAM, CMD_NORMAL, NULL, 0, false); - return lcmxo2_wait_busy(); -} - static bool lcmxo2_erase_featbits (void) { lcmxo2_execute_cmd(ISC_ERASE, ISC_ERASE_FEATURE, CMD_NORMAL, NULL, 0, false); return lcmxo2_wait_busy(); @@ -329,7 +323,6 @@ typedef enum { CMD_RESTART = '$', CMD_GET_DEVICE_ID = 'I', CMD_ENABLE_FLASH = 'E', - CMD_DISABLE_FLASH = 'D', CMD_ERASE_FLASH = 'X', CMD_RESET_ADDRESS = 'A', CMD_WRITE_PAGE = 'W', @@ -418,13 +411,6 @@ void vendor_initial_configuration (vendor_get_cmd_t get_cmd, vendor_send_respons error = lcmxo2_enable_flash(); break; - case CMD_DISABLE_FLASH: - if (lcmxo2_read_status() & LSC_STATUS_CFG_ENABLE) { - error = lcmxo2_erase_sram(); - lcmxo2_disable_flash(); - } - break; - case CMD_ERASE_FLASH: error = lcmxo2_erase_flash(); break; @@ -452,7 +438,7 @@ void vendor_initial_configuration (vendor_get_cmd_t get_cmd, vendor_send_respons case CMD_REFRESH: lcmxo2_refresh(); - hw_delay_ms(100); + hw_delay_ms(200); break; default: diff --git a/sw/pc/primer.py b/sw/pc/primer.py index e2fde1e..d56422b 100644 --- a/sw/pc/primer.py +++ b/sw/pc/primer.py @@ -288,7 +288,6 @@ class LCMXO2Primer: __CMD_RESTART = b'$' __CMD_GET_DEVICE_ID = b'I' __CMD_ENABLE_FLASH = b'E' - __CMD_DISABLE_FLASH = b'D' __CMD_ERASE_FLASH = b'X' __CMD_RESET_ADDRESS = b'A' __CMD_WRITE_PAGE = b'W' @@ -322,17 +321,19 @@ class LCMXO2Primer: self.__write(packet) response = self.__read(5) + if (len(response) != 5): + raise LCMXO2PrimerException(f'No response received [{cmd}]') length = int.from_bytes(response[4:5], byteorder='little') response += self.__read(length) calculated_checksum = crc32(response) received_checksum = int.from_bytes(self.__read(4), byteorder='little') if (response[0:3] != b'RSP'): - raise LCMXO2PrimerException('Invalid response token') + raise LCMXO2PrimerException(f'Invalid response token [{response[0:3]} / {cmd}]') if (response[3:4] != cmd): - raise LCMXO2PrimerException('Invalid response command') + raise LCMXO2PrimerException(f'Invalid response command [{cmd} / {response[3]}]') if (calculated_checksum != received_checksum): - raise LCMXO2PrimerException('Invalid response checksum') + raise LCMXO2PrimerException(f'Invalid response checksum [{cmd}]') return response[5:] @@ -383,8 +384,6 @@ class LCMXO2Primer: self.__cmd_execute(self.__CMD_PROGRAM_DONE) - self.__cmd_execute(self.__CMD_DISABLE_FLASH) - self.__cmd_execute(self.__CMD_REFRESH) if (self.__cmd_execute(self.__CMD_PROBE_FPGA) != self.__FPGA_PROBE_VALUE): @@ -393,7 +392,7 @@ class LCMXO2Primer: except LCMXO2PrimerException as e: self.__cmd_execute(self.__CMD_ENABLE_FLASH) self.__cmd_execute(self.__CMD_ERASE_FLASH) - self.__cmd_execute(self.__CMD_DISABLE_FLASH) + self.__cmd_execute(self.__CMD_REFRESH) self.__cmd_execute(self.__CMD_RESTART) raise LCMXO2PrimerException(e) @@ -402,7 +401,7 @@ class LCMXO2Primer: class SC64BringUp: __SERIAL_BAUD: int = 115200 - __SERIAL_TIMEOUT: float = 16.0 + __SERIAL_TIMEOUT: float = 6.0 __INTERVAL_TIME: float = 0.5 def __init__(self, progress: Callable[[int, int, str], None]) -> None: