From 6fdd8f6a2a3db3f3d1d8571ec5b87338bd7e3668 Mon Sep 17 00:00:00 2001 From: Sergey Shchelkanov Date: Thu, 1 Jun 2023 10:59:09 +0300 Subject: [PATCH] fix chip erase commands mismatch --- mik32_spifi.py | 24 +++++++++++++----------- mik32_upload.py | 2 +- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/mik32_spifi.py b/mik32_spifi.py index 702414e..5a7034a 100644 --- a/mik32_spifi.py +++ b/mik32_spifi.py @@ -231,6 +231,7 @@ def spifi_init(openocd: OpenOcdTclRpc): openocd.write_word(SPIFI_CONFIG_STAT, openocd.read_word(SPIFI_CONFIG_STAT) | SPIFI_CONFIG_STAT_INTRQ_M | SPIFI_CONFIG_STAT_RESET_M) + openocd.write_word(SPIFI_CONFIG_CTRL, openocd.read_word(SPIFI_CONFIG_CTRL) | (7 << SPIFI_CONFIG_CTRL_SCK_DIV_S)) openocd.write_word(SPIFI_CONFIG_ADDR, 0x00) openocd.write_word(SPIFI_CONFIG_IDATA, 0x00) openocd.write_word(SPIFI_CONFIG_CLIMIT, 0x00) @@ -285,10 +286,10 @@ def spifi_wait_busy(openocd: OpenOcdTclRpc): def spifi_chip_erase(openocd: OpenOcdTclRpc): print("Chip erase...") - spifi_intrq_clear(openocd) + # spifi_intrq_clear(openocd) openocd.write_word(SPIFI_CONFIG_STAT, openocd.read_word( SPIFI_CONFIG_STAT) | SPIFI_CONFIG_STAT_INTRQ_M) - openocd.write_word(SPIFI_CONFIG_CMD, (SECTOR_ERASE_COMMAND << SPIFI_CONFIG_CMD_OPCODE_S) | + openocd.write_word(SPIFI_CONFIG_CMD, (CHIP_ERASE_COMMAND << SPIFI_CONFIG_CMD_OPCODE_S) | (SPIFI_CONFIG_CMD_FRAMEFORM_OPCODE_NOADDR << SPIFI_CONFIG_CMD_FRAMEFORM_S) | (SPIFI_CONFIG_CMD_FIELDFORM_ALL_SERIAL << SPIFI_CONFIG_CMD_FIELDFORM_S)) spifi_wait_intrq_timeout(openocd, "Timeout executing chip erase command") @@ -297,15 +298,15 @@ def spifi_chip_erase(openocd: OpenOcdTclRpc): def spifi_sector_erase(openocd: OpenOcdTclRpc, address: int): print("Erase sector %s..." % hex(address)) openocd.write_word(SPIFI_CONFIG_ADDR, address) - # spifi_intrq_clear(openocd) - openocd.write_word(SPIFI_CONFIG_STAT, openocd.read_word( - SPIFI_CONFIG_STAT) | SPIFI_CONFIG_STAT_INTRQ_M) - openocd.write_word(SPIFI_CONFIG_STAT, openocd.read_word( - SPIFI_CONFIG_STAT) | SPIFI_CONFIG_STAT_INTRQ_M) - openocd.write_word(SPIFI_CONFIG_CMD, (CHIP_ERASE_COMMAND << SPIFI_CONFIG_CMD_OPCODE_S) | + + spifi_intrq_clear(openocd) + # openocd.write_word(SPIFI_CONFIG_STAT, openocd.read_word( + # SPIFI_CONFIG_STAT) | SPIFI_CONFIG_STAT_INTRQ_M) + openocd.write_word(SPIFI_CONFIG_CMD, (SECTOR_ERASE_COMMAND << SPIFI_CONFIG_CMD_OPCODE_S) | (SPIFI_CONFIG_CMD_FRAMEFORM_OPCODE_3ADDR << SPIFI_CONFIG_CMD_FRAMEFORM_S) | (SPIFI_CONFIG_CMD_FIELDFORM_ALL_SERIAL << SPIFI_CONFIG_CMD_FIELDFORM_S)) - spifi_wait_intrq_timeout(openocd, "Timeout executing chip erase command") + # spifi_wait_intrq_timeout(openocd, "Timeout executing chip erase command") + spifi_intrq_clear(openocd) def spifi_read_data(openocd: OpenOcdTclRpc, address: int, byte_count: int, bin_data: List[int]) -> int: @@ -490,10 +491,11 @@ def write_pages(pages: Dict[int, List[int]], openocd: OpenOcdTclRpc, is_resume=T openocd.halt() spifi_init(openocd) - spifi_erase(openocd, EraseType.SECTOR_ERASE, get_segments_list(list(pages), 4*1024)) + spifi_erase(openocd, EraseType.CHIP_ERASE, get_segments_list(list(pages), 4*1024)) address = 0 - spifi_quad_enable(openocd) + spifi_quad_disable(openocd) + # spifi_quad_enable(openocd) for page_offset in list(pages): page_bytes = pages[page_offset] diff --git a/mik32_upload.py b/mik32_upload.py index a7a00db..6b9798d 100644 --- a/mik32_upload.py +++ b/mik32_upload.py @@ -219,7 +219,7 @@ def upload_file( if (pages_spifi.__len__() > 0): # print(pages_spifi) result |= mik32_spifi.write_pages( - pages_spifi, openocd, is_resume, use_quad_spi) + pages_spifi, openocd, is_resume=is_resume, use_quad_spi=use_quad_spi) if (segments_ram.__len__() > 0): mik32_ram.write_segments(segments_ram, openocd, is_resume) result |= 0