mirror of
https://github.com/MikronMIK32/mik32-uploader.git
synced 2026-01-01 21:37:05 +03:00
Вынесено описание регистров EEPROM
This commit is contained in:
parent
d0ed717fb8
commit
d0973fc77b
@ -4,51 +4,8 @@ import time
|
|||||||
from tclrpc import OpenOcdTclRpc
|
from tclrpc import OpenOcdTclRpc
|
||||||
from utils import bytes2words
|
from utils import bytes2words
|
||||||
|
|
||||||
|
import mik32_debug_hal.registers.memory_map as mem_map
|
||||||
# --------------------------
|
import mik32_debug_hal.registers.bitfields.eeprom as eeprom_fields
|
||||||
# EEPROM register offset
|
|
||||||
# --------------------------
|
|
||||||
EEPROM_REGS_BASE_ADDRESS = 0x00070400
|
|
||||||
|
|
||||||
EEPROM_REGS_EEDAT = EEPROM_REGS_BASE_ADDRESS + 0x00
|
|
||||||
EEPROM_REGS_EEA = EEPROM_REGS_BASE_ADDRESS + 0x04
|
|
||||||
EEPROM_REGS_EECON = EEPROM_REGS_BASE_ADDRESS + 0x08
|
|
||||||
EEPROM_REGS_EESTA = EEPROM_REGS_BASE_ADDRESS + 0x0C
|
|
||||||
EEPROM_REGS_EERB = EEPROM_REGS_BASE_ADDRESS + 0x10
|
|
||||||
EEPROM_REGS_EEADJ = EEPROM_REGS_BASE_ADDRESS + 0x14
|
|
||||||
EEPROM_REGS_NCYCRL = EEPROM_REGS_BASE_ADDRESS + 0x18
|
|
||||||
EEPROM_REGS_NCYCEP1 = EEPROM_REGS_BASE_ADDRESS + 0x1C
|
|
||||||
EEPROM_REGS_NCYCEP2 = EEPROM_REGS_BASE_ADDRESS + 0x20
|
|
||||||
|
|
||||||
# --------------------------
|
|
||||||
# EEPROM register fields
|
|
||||||
# --------------------------
|
|
||||||
# EECON
|
|
||||||
EEPROM_EX_S = 0
|
|
||||||
EEPROM_OP_S = 1
|
|
||||||
EEPROM_WRBEH_S = 3
|
|
||||||
EEPROM_APBNWS_S = 5
|
|
||||||
EEPROM_DISECC_S = 6
|
|
||||||
EEPROM_BWE_S = 7
|
|
||||||
EEPROM_IESERR_S = 8
|
|
||||||
# EESTA
|
|
||||||
EEPROM_BSY_S = 0
|
|
||||||
EEPROM_SERR_S = 1
|
|
||||||
# NCYCRL
|
|
||||||
EEPROM_N_LD_S = 0
|
|
||||||
EEPROM_N_R_1_S = 8
|
|
||||||
EEPROM_N_R_2_S = 16
|
|
||||||
# --------------------------
|
|
||||||
# EEPROM codes
|
|
||||||
# --------------------------
|
|
||||||
EEPROM_OP_RD = 0
|
|
||||||
EEPROM_OP_ER = 1
|
|
||||||
EEPROM_OP_PR = 2
|
|
||||||
EEPROM_BEH_EVEN = 1
|
|
||||||
EEPROM_BEH_ODD = 2
|
|
||||||
EEPROM_BEH_GLOB = 3
|
|
||||||
|
|
||||||
EEPROM_PAGE_MASK = 0x1F80
|
|
||||||
|
|
||||||
|
|
||||||
def eeprom_sysinit(openocd: OpenOcdTclRpc):
|
def eeprom_sysinit(openocd: OpenOcdTclRpc):
|
||||||
@ -56,39 +13,39 @@ def eeprom_sysinit(openocd: OpenOcdTclRpc):
|
|||||||
|
|
||||||
|
|
||||||
class EEPROM_Operation(Enum):
|
class EEPROM_Operation(Enum):
|
||||||
READ = EEPROM_OP_RD
|
READ = eeprom_fields.OP_RD
|
||||||
ERASE = EEPROM_OP_ER
|
ERASE = eeprom_fields.OP_ER
|
||||||
PROGRAM = EEPROM_OP_PR
|
PROGRAM = eeprom_fields.OP_PR
|
||||||
|
|
||||||
|
|
||||||
class EEPROM_AffectedPages(Enum):
|
class EEPROM_AffectedPages(Enum):
|
||||||
SINGLE = 0
|
SINGLE = 0
|
||||||
EVEN = EEPROM_BEH_EVEN
|
EVEN = eeprom_fields.BEH_EVEN
|
||||||
ODD = EEPROM_BEH_ODD
|
ODD = eeprom_fields.BEH_ODD
|
||||||
GLOBAL = EEPROM_BEH_GLOB
|
GLOBAL = eeprom_fields.BEH_GLOB
|
||||||
|
|
||||||
|
|
||||||
def eeprom_execute_operation(openocd: OpenOcdTclRpc, op: EEPROM_Operation, affected_pages: EEPROM_AffectedPages, offset: int, buffer: List[int]):
|
def eeprom_execute_operation(openocd: OpenOcdTclRpc, op: EEPROM_Operation, affected_pages: EEPROM_AffectedPages, offset: int, buffer: List[int]):
|
||||||
# buffer write enable and select affected pages
|
# buffer write enable and select affected pages
|
||||||
openocd.write_memory(EEPROM_REGS_EEA, 32, [offset, (1 << EEPROM_BWE_S)
|
openocd.write_memory(mem_map.EEPROM_REGS_EEA, 32, [offset, (1 << eeprom_fields.EECON_BWE_S)
|
||||||
| (affected_pages.value << EEPROM_WRBEH_S)])
|
| (affected_pages.value << eeprom_fields.EECON_WRBEH_S)])
|
||||||
|
|
||||||
if buffer.__len__() > 32:
|
if buffer.__len__() > 32:
|
||||||
return
|
return
|
||||||
for word in buffer:
|
for word in buffer:
|
||||||
openocd.write_word(EEPROM_REGS_EEDAT, word)
|
openocd.write_word(mem_map.EEPROM_REGS_EEDAT, word)
|
||||||
# start operation
|
# start operation
|
||||||
openocd.write_word(EEPROM_REGS_EECON, (
|
openocd.write_word(mem_map.EEPROM_REGS_EECON, (
|
||||||
(1 << EEPROM_EX_S) | (1 << EEPROM_BWE_S) |
|
(1 << eeprom_fields.EECON_EX_S) | (1 << eeprom_fields.EECON_BWE_S) |
|
||||||
(op.value << EEPROM_OP_S) | (affected_pages.value << EEPROM_WRBEH_S)
|
(op.value << eeprom_fields.EECON_OP_S) | (affected_pages.value << eeprom_fields.EECON_WRBEH_S)
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
||||||
def eeprom_configure_cycles(openocd: OpenOcdTclRpc, LD=1, R_1=2, R_2=1, CYCEP1=66667, CYCEP2=500):
|
def eeprom_configure_cycles(openocd: OpenOcdTclRpc, LD=1, R_1=2, R_2=1, CYCEP1=66667, CYCEP2=500):
|
||||||
openocd.write_word(EEPROM_REGS_NCYCRL, LD << EEPROM_N_LD_S |
|
openocd.write_word(mem_map.EEPROM_REGS_NCYCRL, LD << eeprom_fields.NCYCRL_N_LD_S |
|
||||||
R_1 << EEPROM_N_R_1_S | R_2 << EEPROM_N_R_2_S)
|
R_1 << eeprom_fields.NCYCRL_N_R_1_S | R_2 << eeprom_fields.NCYCRL_N_R_2_S)
|
||||||
openocd.write_word(EEPROM_REGS_NCYCEP1, CYCEP1)
|
openocd.write_word(mem_map.EEPROM_REGS_NCYCEP1, CYCEP1)
|
||||||
openocd.write_word(EEPROM_REGS_NCYCEP2, CYCEP2)
|
openocd.write_word(mem_map.EEPROM_REGS_NCYCEP2, CYCEP2)
|
||||||
|
|
||||||
|
|
||||||
def eeprom_global_erase(openocd: OpenOcdTclRpc):
|
def eeprom_global_erase(openocd: OpenOcdTclRpc):
|
||||||
@ -102,11 +59,11 @@ def eeprom_global_erase_check(openocd: OpenOcdTclRpc):
|
|||||||
print("EEPROM global erase check through APB...", flush=True)
|
print("EEPROM global erase check through APB...", flush=True)
|
||||||
print(" Read Data at ...", flush=True)
|
print(" Read Data at ...", flush=True)
|
||||||
ex_value = 0x00000000
|
ex_value = 0x00000000
|
||||||
openocd.write_word(EEPROM_REGS_EEA, 0x00000000)
|
openocd.write_word(mem_map.EEPROM_REGS_EEA, 0x00000000)
|
||||||
for i in range(0, 64):
|
for i in range(0, 64):
|
||||||
print(f" Row={i+1}/64")
|
print(f" Row={i+1}/64")
|
||||||
for j in range(0, 32):
|
for j in range(0, 32):
|
||||||
value = openocd.read_memory(EEPROM_REGS_EEDAT, 32, 1)[0]
|
value = openocd.read_memory(mem_map.EEPROM_REGS_EEDAT, 32, 1)[0]
|
||||||
if ex_value != value:
|
if ex_value != value:
|
||||||
print(
|
print(
|
||||||
f"Unexpect value at Row {i}, Word {j}, expect {ex_value:#0x}, {value:#0x}", flush=True)
|
f"Unexpect value at Row {i}, Word {j}, expect {ex_value:#0x}, {value:#0x}", flush=True)
|
||||||
@ -128,13 +85,13 @@ def eeprom_check_data_apb(openocd: OpenOcdTclRpc, words: List[int], offset: int,
|
|||||||
if print_progress:
|
if print_progress:
|
||||||
print("EEPROM check through APB...", flush=True)
|
print("EEPROM check through APB...", flush=True)
|
||||||
# address load
|
# address load
|
||||||
openocd.write_word(EEPROM_REGS_EEA, offset)
|
openocd.write_word(mem_map.EEPROM_REGS_EEA, offset)
|
||||||
word_num = 0
|
word_num = 0
|
||||||
progress = 0
|
progress = 0
|
||||||
if print_progress:
|
if print_progress:
|
||||||
print("[", end="", flush=True)
|
print("[", end="", flush=True)
|
||||||
for word in words:
|
for word in words:
|
||||||
value: int = openocd.read_word(EEPROM_REGS_EEDAT)
|
value: int = openocd.read_word(mem_map.EEPROM_REGS_EEDAT)
|
||||||
if words[word_num] != value:
|
if words[word_num] != value:
|
||||||
print(
|
print(
|
||||||
f"Unexpect value at {word_num} word, expect {word:#0x}, get {value:#0x}", flush=True)
|
f"Unexpect value at {word_num} word, expect {word:#0x}, get {value:#0x}", flush=True)
|
||||||
|
|||||||
34
mik32_debug_hal/registers/bitfields/eeprom.py
Normal file
34
mik32_debug_hal/registers/bitfields/eeprom.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# --------------------------
|
||||||
|
# EEPROM register fields
|
||||||
|
# --------------------------
|
||||||
|
|
||||||
|
# EECON
|
||||||
|
EECON_EX_S = 0
|
||||||
|
EECON_OP_S = 1
|
||||||
|
EECON_WRBEH_S = 3
|
||||||
|
EECON_APBNWS_S = 5
|
||||||
|
EECON_DISECC_S = 6
|
||||||
|
EECON_BWE_S = 7
|
||||||
|
EECON_IESERR_S = 8
|
||||||
|
|
||||||
|
# EESTA
|
||||||
|
EESTA_BSY_S = 0
|
||||||
|
EESTA_SERR_S = 1
|
||||||
|
|
||||||
|
# NCYCRL
|
||||||
|
NCYCRL_N_LD_S = 0
|
||||||
|
NCYCRL_N_R_1_S = 8
|
||||||
|
NCYCRL_N_R_2_S = 16
|
||||||
|
|
||||||
|
# --------------------------
|
||||||
|
# EEPROM codes
|
||||||
|
# --------------------------
|
||||||
|
OP_RD = 0
|
||||||
|
OP_ER = 1
|
||||||
|
OP_PR = 2
|
||||||
|
|
||||||
|
BEH_EVEN = 1
|
||||||
|
BEH_ODD = 2
|
||||||
|
BEH_GLOB = 3
|
||||||
|
|
||||||
|
EEPROM_PAGE_MASK = 0x1F80
|
||||||
@ -87,3 +87,18 @@ class PAD_CONFIG_REGS_V2(Enum):
|
|||||||
PORT_2_CFG = 0x18
|
PORT_2_CFG = 0x18
|
||||||
PORT_2_DS = 0x1C
|
PORT_2_DS = 0x1C
|
||||||
PORT_2_PUD = 0x20
|
PORT_2_PUD = 0x20
|
||||||
|
|
||||||
|
# --------------------------
|
||||||
|
# EEPROM register offset
|
||||||
|
# --------------------------
|
||||||
|
EEPROM_REGS_BASE_ADDRESS = 0x00070400
|
||||||
|
|
||||||
|
EEPROM_REGS_EEDAT = EEPROM_REGS_BASE_ADDRESS + 0x00
|
||||||
|
EEPROM_REGS_EEA = EEPROM_REGS_BASE_ADDRESS + 0x04
|
||||||
|
EEPROM_REGS_EECON = EEPROM_REGS_BASE_ADDRESS + 0x08
|
||||||
|
EEPROM_REGS_EESTA = EEPROM_REGS_BASE_ADDRESS + 0x0C
|
||||||
|
EEPROM_REGS_EERB = EEPROM_REGS_BASE_ADDRESS + 0x10
|
||||||
|
EEPROM_REGS_EEADJ = EEPROM_REGS_BASE_ADDRESS + 0x14
|
||||||
|
EEPROM_REGS_NCYCRL = EEPROM_REGS_BASE_ADDRESS + 0x18
|
||||||
|
EEPROM_REGS_NCYCEP1 = EEPROM_REGS_BASE_ADDRESS + 0x1C
|
||||||
|
EEPROM_REGS_NCYCEP2 = EEPROM_REGS_BASE_ADDRESS + 0x20
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user