mirror of
https://github.com/MikronMIK32/mik32-uploader.git
synced 2026-01-01 21:37:05 +03:00
41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
from typing import List
|
|
from mik32_upload import Segment
|
|
from tclrpc import TclException
|
|
from tclrpc import OpenOcdTclRpc
|
|
from pathlib import Path
|
|
import time
|
|
|
|
from utils import bytes2words
|
|
|
|
def write_file(filename):
|
|
|
|
with OpenOcdTclRpc() as openocd:
|
|
openocd.halt()
|
|
print(openocd.run("load_image {%s} 0x0" % Path(filename)))
|
|
print("RAM write file maybe done")
|
|
|
|
|
|
def write_segments(segments: List[Segment], openocd: OpenOcdTclRpc):
|
|
openocd.halt()
|
|
for segment in segments:
|
|
t = time.localtime()
|
|
current_time = time.strftime("%H:%M:%S", t)
|
|
print(f"[{current_time}] Writing segment %s with size %d..." % (hex(segment.offset), segment.data.__len__()))
|
|
segment_words = bytes2words(segment.data)
|
|
openocd.write_memory(segment.offset, 32, segment_words)
|
|
|
|
|
|
def check_segments(segments: List[Segment], openocd: OpenOcdTclRpc) -> int:
|
|
openocd.halt()
|
|
for segment in segments:
|
|
print("Checking segment %s with size %d..." % (hex(segment.offset), segment.data.__len__()))
|
|
segment_words = bytes2words(segment.data)
|
|
segment_memory_words = openocd.read_memory(segment.offset, 32, len(segment_words))
|
|
|
|
for i in range(len(segment_words)):
|
|
if segment_words[i] != segment_memory_words[i]:
|
|
print(f"Word [{i}] expect {segment_words[i]} != read {segment_memory_words[i]} in segment {segment.offset}")
|
|
return 1
|
|
|
|
return 0
|