mik32-uploader/mik32_ram.py
2023-12-20 15:14:22 +03:00

38 lines
1.3 KiB
Python

from typing import List
from mik32_upload import Segment
from tclrpc import TclException
from tclrpc import OpenOcdTclRpc
from pathlib import Path
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:
print("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