mirror of
https://github.com/MikronMIK32/mik32-uploader.git
synced 2026-01-01 13:37:03 +03:00
Fix writing SREG registers according actual datasheet
This commit is contained in:
parent
6c5bbd58d4
commit
43ea7057b7
@ -137,7 +137,6 @@ SPIFI_CONFIG_STAT_VERSION_M = (0xFF << SPIFI_CONFIG_STAT_VERSION_S)
|
|||||||
# --------------------------
|
# --------------------------
|
||||||
SREG1_BUSY = 1
|
SREG1_BUSY = 1
|
||||||
|
|
||||||
READ_SREG_LEN = 1
|
|
||||||
READ_LEN = 256
|
READ_LEN = 256
|
||||||
TIMEOUT = 1000
|
TIMEOUT = 1000
|
||||||
|
|
||||||
@ -155,11 +154,8 @@ READ_DATA_COMMAND = 0x03
|
|||||||
FAST_READ_QUAD_OUTPUT_COMMAND = 0x6B
|
FAST_READ_QUAD_OUTPUT_COMMAND = 0x6B
|
||||||
|
|
||||||
READ_SREG1_COMMAND = 0x05
|
READ_SREG1_COMMAND = 0x05
|
||||||
WRITE_SREG1_COMMAND = 0x01
|
|
||||||
READ_SREG2_COMMAND = 0x35
|
READ_SREG2_COMMAND = 0x35
|
||||||
WRITE_SREG2_COMMAND = 0x31
|
WRITE_SREG_COMMAND = 0x01
|
||||||
READ_SREG3_COMMAND = 0x15
|
|
||||||
WRITE_SREG3_COMMAND = 0x11
|
|
||||||
|
|
||||||
SREG2_QUAD_ENABLE = 9
|
SREG2_QUAD_ENABLE = 9
|
||||||
SREG2_QUAD_ENABLE_S = (SREG2_QUAD_ENABLE-8)
|
SREG2_QUAD_ENABLE_S = (SREG2_QUAD_ENABLE-8)
|
||||||
@ -173,7 +169,6 @@ QUAD_PAGE_PROGRAM_COMMAND = 0x32
|
|||||||
class SREG_Num(Enum):
|
class SREG_Num(Enum):
|
||||||
SREG1 = 0x00
|
SREG1 = 0x00
|
||||||
SREG2 = 0x30
|
SREG2 = 0x30
|
||||||
SREG3 = 0x10
|
|
||||||
|
|
||||||
|
|
||||||
def spifi_intrq_clear(openocd: OpenOcdTclRpc):
|
def spifi_intrq_clear(openocd: OpenOcdTclRpc):
|
||||||
@ -346,14 +341,31 @@ def spifi_write_enable(openocd: OpenOcdTclRpc):
|
|||||||
|
|
||||||
|
|
||||||
def spifi_read_sreg(openocd: OpenOcdTclRpc, sreg: SREG_Num) -> int:
|
def spifi_read_sreg(openocd: OpenOcdTclRpc, sreg: SREG_Num) -> int:
|
||||||
read_sreg: int = 0
|
|
||||||
|
|
||||||
return spifi_send_command(
|
return spifi_send_command(
|
||||||
openocd, READ_SREG1_COMMAND | sreg.value, SPIFI_Frameform.OPCODE_NOADDR,
|
openocd,
|
||||||
SPIFI_Fieldform.ALL_SERIAL, byte_count=READ_SREG_LEN
|
READ_SREG1_COMMAND | sreg.value,
|
||||||
|
SPIFI_Frameform.OPCODE_NOADDR,
|
||||||
|
SPIFI_Fieldform.ALL_SERIAL,
|
||||||
|
byte_count=1
|
||||||
)[0]
|
)[0]
|
||||||
|
|
||||||
|
|
||||||
|
def spifi_write_sreg(openocd: OpenOcdTclRpc, sreg1: int, sreg2: int):
|
||||||
|
spifi_send_command(openocd, 0xFF,
|
||||||
|
SPIFI_Frameform.OPCODE_NOADDR, SPIFI_Fieldform.ALL_PARALLEL)
|
||||||
|
spifi_write_enable(openocd)
|
||||||
|
spifi_send_command(
|
||||||
|
openocd,
|
||||||
|
WRITE_SREG_COMMAND,
|
||||||
|
SPIFI_Frameform.OPCODE_NOADDR,
|
||||||
|
SPIFI_Fieldform.ALL_SERIAL,
|
||||||
|
byte_count=2,
|
||||||
|
direction=SPIFI_Direction.WRITE,
|
||||||
|
data=[sreg1, sreg2]
|
||||||
|
)
|
||||||
|
spifi_wait_busy(openocd)
|
||||||
|
|
||||||
|
|
||||||
def spifi_wait_busy(openocd: OpenOcdTclRpc):
|
def spifi_wait_busy(openocd: OpenOcdTclRpc):
|
||||||
while 1:
|
while 1:
|
||||||
sreg1 = spifi_read_sreg(openocd, SREG_Num.SREG1)
|
sreg1 = spifi_read_sreg(openocd, SREG_Num.SREG1)
|
||||||
@ -488,24 +500,23 @@ def spifi_quad_page_program(
|
|||||||
|
|
||||||
|
|
||||||
def spifi_quad_enable(openocd):
|
def spifi_quad_enable(openocd):
|
||||||
sreg2 = spifi_read_sreg(openocd, SREG_Num.SREG2)
|
spifi_write_sreg(
|
||||||
|
openocd,
|
||||||
spifi_write_enable(openocd)
|
spifi_read_sreg(openocd, SREG_Num.SREG1),
|
||||||
spifi_send_command(openocd, WRITE_SREG2_COMMAND, SPIFI_Frameform.OPCODE_3ADDR,
|
spifi_read_sreg(openocd, SREG_Num.SREG2) | SREG2_QUAD_ENABLE_M
|
||||||
SPIFI_Fieldform.ALL_SERIAL, byte_count=1,
|
)
|
||||||
idata=0, cache_limit=0, direction=SPIFI_Direction.WRITE, data=[sreg2 | SREG2_QUAD_ENABLE_M])
|
|
||||||
spifi_wait_busy(openocd)
|
|
||||||
|
|
||||||
|
|
||||||
def spifi_quad_disable(openocd):
|
def spifi_quad_disable(openocd):
|
||||||
sreg2 = spifi_read_sreg(openocd, SREG_Num.SREG2)
|
spifi_write_sreg(
|
||||||
|
openocd,
|
||||||
|
spifi_read_sreg(openocd, SREG_Num.SREG1),
|
||||||
|
spifi_read_sreg(openocd, SREG_Num.SREG2) & (0xFF ^ SREG2_QUAD_ENABLE_M)
|
||||||
|
)
|
||||||
|
|
||||||
spifi_write_enable(openocd)
|
|
||||||
spifi_send_command(openocd, WRITE_SREG2_COMMAND, SPIFI_Frameform.OPCODE_3ADDR,
|
def spifi_check_quad_enable(openocd):
|
||||||
SPIFI_Fieldform.ALL_SERIAL, byte_count=1,
|
return (spifi_read_sreg(openocd, SREG_Num.SREG2) & SREG2_QUAD_ENABLE_M) != 0
|
||||||
idata=0, cache_limit=0, direction=SPIFI_Direction.WRITE, data=[
|
|
||||||
sreg2 & (~SREG2_QUAD_ENABLE_M)])
|
|
||||||
spifi_wait_busy(openocd)
|
|
||||||
|
|
||||||
|
|
||||||
def get_segments_list(pages_offsets: List[int], segment_size: int) -> List[int]:
|
def get_segments_list(pages_offsets: List[int], segment_size: int) -> List[int]:
|
||||||
@ -663,12 +674,18 @@ def write_pages(pages: Dict[int, List[int]], openocd: OpenOcdTclRpc, use_quad_sp
|
|||||||
# print("Data error")
|
# print("Data error")
|
||||||
# return result
|
# return result
|
||||||
|
|
||||||
|
print("Quad Enable", spifi_check_quad_enable(openocd))
|
||||||
|
|
||||||
if (use_quad_spi):
|
if (use_quad_spi):
|
||||||
print("Quad Enable")
|
print("Using Quad SPI")
|
||||||
spifi_quad_enable(openocd)
|
spifi_quad_enable(openocd)
|
||||||
else:
|
else:
|
||||||
|
print("Using Single SPI")
|
||||||
spifi_quad_disable(openocd)
|
spifi_quad_disable(openocd)
|
||||||
|
|
||||||
|
# print("SREG1", spifi_read_sreg(openocd, SREG_Num.SREG1))
|
||||||
|
# print("SREG2", spifi_read_sreg(openocd, SREG_Num.SREG2))
|
||||||
|
|
||||||
pages_offsets = list(pages)
|
pages_offsets = list(pages)
|
||||||
|
|
||||||
for index, page_offset in enumerate(pages_offsets):
|
for index, page_offset in enumerate(pages_offsets):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user