108 lines
3.8 KiB
Python
108 lines
3.8 KiB
Python
import setup
|
|
import random
|
|
import pdb
|
|
import time
|
|
import words
|
|
import time
|
|
import sys
|
|
import logging
|
|
import datetime
|
|
import argparse
|
|
import io
|
|
import os.path
|
|
import serial
|
|
|
|
UART_BLOCK = 0x1000
|
|
SKIP_VERIFY = False
|
|
|
|
###############################################################################
|
|
# Memory Read/Write
|
|
###############################################################################
|
|
def sendcmd_scpu_run(addr):
|
|
address = int(addr,16)
|
|
print('send_scpu_run command..')
|
|
setup.send_scpu_run(address)
|
|
|
|
def memory_specific_bin_program(addr, file, size = 0):
|
|
logging.info('\nProgramming .. from %s [size=%d]' %(file, size))
|
|
rdata = list(setup.file_read_binary(file))
|
|
if size == 0:
|
|
size = len(rdata)
|
|
setup.flash_write(addr, rdata, size, UART_BLOCK)
|
|
|
|
def memory_specific_verify(add, file, size = 0):
|
|
logging.info('\nStart Verify...')
|
|
rdata = list(setup.file_read_binary(file))
|
|
if size == 0:
|
|
size = len(rdata)
|
|
rdata = rdata[0:size]
|
|
fdata = setup.flash_read(add, size)
|
|
with io.open('memory_dump_partial.bin', 'wb') as fo:
|
|
fo.write(bytearray(fdata))
|
|
if (rdata == fdata):
|
|
logging.info('memory bin comparsion PASS')
|
|
else:
|
|
logging.info('ERR: memory bin file comparsion error')
|
|
|
|
def memory_specific_programming(start, fw_bin):
|
|
#logging.info('=================================================================')
|
|
#logging.info('Memory: (Specific) Sector Erase Start')
|
|
start = int(start,16)
|
|
#start_idx = start // 4096
|
|
#print('dddd =', os.path.exists(fw_bin))
|
|
file_size = os.path.getsize(fw_bin)
|
|
memory_specific_bin_program(start, fw_bin, file_size)
|
|
memory_specific_verify(start, fw_bin, file_size)
|
|
|
|
def memory_specific_get_bin(start, fw_bin):
|
|
logging.info('=================================================================')
|
|
logging.info('Memory: (Specific) Get / Read BIN BACK')
|
|
start = int(start,16)
|
|
start_idx = start // 4096
|
|
#print('dddd =', os.path.exists(fw_bin))
|
|
file_size = os.path.getsize(fw_bin)
|
|
memory_specific_verify(start, fw_bin, file_size)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
|
# arugment parser
|
|
parser = argparse.ArgumentParser(epilog="See the DOC: [SDK_DOC]/KL520 DFW_Boot.pdf")
|
|
parser.add_argument('-s', '--CHIP_INIT', action='store_true', help='Chip init', default=False)
|
|
parser.add_argument('-r', '--RUN_SCPU_START', action='store_true', help='Change CP to specific address', default=False)
|
|
parser.add_argument('-i', '--ADDR_INDEX', help='Set start address index', default="0")
|
|
parser.add_argument('-p', '--MEMORY_SPECIFIC_PARTITION', help='Specific partition memory writing')
|
|
parser.add_argument('-g', '--MEMORY_SPECIFIC_GET_BIN', help='Specific partition memory reading')
|
|
|
|
args = parser.parse_args()
|
|
|
|
# set log file
|
|
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s : %(message)s', filename='test_report.txt')
|
|
console = logging.StreamHandler()
|
|
console.setLevel(logging.INFO)
|
|
logging.getLogger('').addHandler(console)
|
|
|
|
if (args.CHIP_INIT):
|
|
setup.dev_init(115200)
|
|
print('Device init successfully')
|
|
ret = setup.xmodem_send_bin()
|
|
if(ret):
|
|
print("Xmodem sends Minion file DONE!!!")
|
|
else:
|
|
print("Xmodem sends Minion file FAIL!!!")
|
|
elif (args.RUN_SCPU_START):
|
|
setup.dev_init(921600)
|
|
print('Device init successfully')
|
|
sendcmd_scpu_run(args.ADDR_INDEX)
|
|
elif (args.MEMORY_SPECIFIC_PARTITION):
|
|
setup.dev_init(921600)
|
|
print('Device init successfully')
|
|
memory_specific_programming(args.ADDR_INDEX, args.MEMORY_SPECIFIC_PARTITION)
|
|
elif (args.MEMORY_SPECIFIC_GET_BIN):
|
|
setup.dev_init(921600)
|
|
memory_specific_get_bin(args.ADDR_INDEX, args.MEMORY_SPECIFIC_GET_BIN)
|
|
else:
|
|
parser.print_help()
|
|
|