#%%
import pylink

jlink = pylink.JLink()

jlink.open()

jlink.set_tif(pylink.enums.JLinkInterfaces.SWD)
jlink.connect("MIMXRT1024XXX5A")
jlink.coresight_configure()
jlink.set_reset_strategy(pylink.enums.JLinkResetStrategyCortexM3.RESETPIN)

# %%
jlink.reset()

#%% read GP2
GP2 = jlink.memory_read8(0x401F4670, 4)
GP2_hex = ''.join('{:02x}'.format(b) for b in GP2)
print(f"GP2 {GP2_hex}")

#%% write GP2
print("write GP2")
jlink.flash_write8(0x401F4670, [0xDE,0xAD, 0xBE, 0xEF])

#%% read GP2
GP2 = jlink.memory_read8(0x401F4670, 4)
GP2_hex = ''.join('{:02x}'.format(b) for b in GP2)
print(f"GP2 {GP2_hex}")

#%% Read lock 
lock = jlink.memory_read32(0x401F4400, 1)
print(f"lock     {lock[0]:b}")
newlock = lock[0] | (0b1<<13)
print(f"new lock {newlock:b}")

#%% write lock
jlink.memory_write32(0x401F4400, [newlock])

written_lock = jlink.memory_read32(0x401F4400, 1)
print(f"written: {written_lock[0]:b}")

assert written_lock==newlock, "New lock not written correctly"

#%%
jlink.restart()

#%%
jlink.close()

