上传flash镜像并转化为txt

This commit is contained in:
ranchuan
2024-10-12 19:16:00 +08:00
parent 32681546ce
commit 7914b9bb04
4 changed files with 219 additions and 59 deletions

142
kunlun.py
View File

@@ -10,6 +10,9 @@ import time
import xmodem
import os
import binascii
from log import myprint
from log import log_init
from bin_to_hex import bin_to_hex_file
def init_send(s_port:serial.Serial, send_str):
@@ -28,36 +31,31 @@ def init_send(s_port:serial.Serial, send_str):
m_ram=False
if m_ram:
print ("Program enters transmission mode...")
myprint ("Program enters transmission mode...")
break
def burn_ram_bin(x_modem:xmodem.XMODEM, r_file):
global trans_time_0
wf = open(log_file, 'a')
stime = datetime.datetime.now()
print ("Transferring %s..." % r_file)
wf.writelines("Transferring %s..." % r_file)
myprint ("Transferring %s..." % r_file)
try:
stream = open(r_file, 'rb')
except Exception:
print("Cannot load file, please check the file path and retry. Press <enter> to exit")
myprint("Cannot load file, please check the file path and retry. Press <enter> to exit")
sys.exit()
xmodem_send = x_modem.send(stream, callback=status_update_0)
etime = datetime.datetime.now()
trans_time_0 = (etime - stime).seconds
print ("\nTransferring ram.bin result: %s, consuming time: %s s \n" % (xmodem_send, trans_time_0))
wf.writelines("Transferring %s..." % r_file)
wf.close()
myprint ("\nTransferring ram.bin result: %s, consuming time: %s s \n" % (xmodem_send, trans_time_0))
def burn_flash_bin(s_port:serial.Serial, x_modem:xmodem.XMODEM, f_file):
global trans_time_1
s_info = bytearray()
wf = open(log_file, 'a')
while True:
s_info += s_port.read(1)
print(f"recv:{s_info.hex(' ')}")
myprint(f"recv:{s_info.hex(' ')}")
bytes2read = s_port.in_waiting
tmp = s_port.read(bytes2read)
s_info += tmp
@@ -71,95 +69,117 @@ def burn_flash_bin(s_port:serial.Serial, x_modem:xmodem.XMODEM, f_file):
m_done=False
if m_flash:
# print m_flash.group(0)
print (r"Recieving FLASH-IMAGE in xmodem : C")
wf.writelines("Recieving FLASH-IMAGE in xmodem : C")
# myprint m_flash.group(0)
myprint (r"Recieving FLASH-IMAGE in xmodem : C")
s_info = bytearray()
stime = datetime.datetime.now()
print ("Transferring %s..." % f_file)
wf.writelines("Transferring %s..." % f_file)
myprint ("Transferring %s..." % f_file)
try:
stream = open(f_file, 'rb')
except Exception:
print("Cannot load file, please check the file path and retry. Press <enter> to exit")
myprint("Cannot load file, please check the file path and retry. Press <enter> to exit")
sys.exit()
xmodem_send = x_modem.send(stream, quiet=True, callback=status_update_1)
etime = datetime.datetime.now()
trans_time_1 = (etime - stime).seconds
print ("\nTransferring iot_flash.bin result: %s, consuming time: %d s \n" % (xmodem_send, trans_time_1))
wf.writelines("\nTransferring iot_flash.bin result: %s, consuming time: %d s \n" % (xmodem_send, trans_time_1))
myprint ("\nTransferring iot_flash.bin result: %s, consuming time: %d s \n" % (xmodem_send, trans_time_1))
elif m_done:
print (m_done.group(0))
myprint (m_done.group(0))
break
else:
pass
wf.close()
def upload_callback(total_packets, success_count, error_count, packet_size):
# callback(total_packets, success_count, error_count, packet_size)
print("upload:",total_packets, success_count, error_count, packet_size)
myprint("upload:",total_packets, success_count, error_count, packet_size)
# 上传固件
def upload_bin(x_modem:xmodem.XMODEM, w_file):
global trans_time_0
wf = open(log_file, 'a')
stime = datetime.datetime.now()
print ("Transferring %s..." % w_file)
wf.writelines("Transferring %s..." % w_file)
myprint ("Transferring %s..." % w_file)
try:
stream = open(w_file, 'wb+')
except Exception:
print("Cannot load file, please check the file path and retry. Press <enter> to exit")
myprint("Cannot load file, please check the file path and retry. Press <enter> to exit")
sys.exit()
xmodem_send = x_modem.recv(stream, callback=upload_callback)
etime = datetime.datetime.now()
trans_time_0 = (etime - stime).seconds
print ("\nTransferring ram.bin result: %s, consuming time: %s s \n" % (xmodem_send, trans_time_0))
wf.writelines("Transferring %s..." % w_file)
wf.close()
myprint ("\nTransferring ram.bin result: %s, consuming time: %s s \n" % (xmodem_send, trans_time_0))
def getc(size, timeout=1):
data=ser.read(size)
print("getc:",data.hex(' '))
# myprint("getc:",data.hex(' '))
return data or None
def putc(data, timeout=1):
# print("putc:",data.hex(' '))
# myprint("putc:",data.hex(' '))
ser.write(data)
time.sleep(0.03)
def status_update_0(total_packets, success_count, error_count):
print ("total_packets: %s, success_count: %s, error_count: %d" % (total_packets, success_count, error_count))
myprint ("total_packets: %s, success_count: %s, error_count: %d" % (total_packets, success_count, error_count))
# if total_packets % 10 == 0:
# print ('.'),
# myprint ('.'),
def status_update_1(total_packets, success_count, error_count):
print ("total_packets: %s, success_count: %s, error_count: %d" % (total_packets, success_count, error_count))
myprint ("total_packets: %s, success_count: %s, error_count: %d" % (total_packets, success_count, error_count))
# if total_packets % 50 == 0:
# print ('.'),
# myprint ('.'),
log_file = "log.txt"
'''
IMG_TYPE 0xfc00 sp.bin
IMG_TYPE 0xfc01 sbl.bin
IMG_TYPE 0xfc05 oem.bin
IMG_TYPE 0xfc03 pib.bin
IMG_TYPE 0xfc08 ht.bin
'''
_work_dir='work'
if not os.path.exists(_work_dir):
os.mkdir(_work_dir)
def calc_log_file_name():
log_file=sys.argv[1].split('.')[0]+'.log'
return os.path.join(_work_dir,log_file)
def calc_upload_name():
name=sys.argv[1]
return os.path.join(_work_dir,name)
def calc_hex_name():
name=sys.argv[1]+'.txt'
return os.path.join(_work_dir,name)
def calc_flash_info_name():
name=sys.argv[1].split('.')[0]+'.info'
return os.path.join(_work_dir,name)
# kunlun.py [upload.bin]
if __name__ == '__main__':
if(len(sys.argv)<2):
print("param too less")
exit(-1)
initial_info = """
*** Version 11.0.0.1
*** This is the tool for chip files transmission
*** You can modify xmodem_config.txt to configure
*** Serial Port, Baud Rate, Transfer Files Path
*** Press RST Button to continue the operation...
"""
print (initial_info)
wf = open(log_file, 'w+')
wf.writelines(initial_info)
log_init(calc_log_file_name())
exit_flag = 0
trans_time_0, trans_time_1 = 0, 0
config_file = r"xmodem_config.txt"
@@ -185,34 +205,40 @@ if __name__ == '__main__':
try:
ser = serial.Serial(port='COM' + str(sp_num), baudrate=b_rate, timeout=0.3)
except Exception:
print("Serial Port COM%s Conflicts!!! Press <enter> to Close it and retry..." % str(sp_num))
wf.writelines("Serial Port COM%s Conflicts!!! Press <enter> to Close it and retry..." % str(sp_num))
myprint("Serial Port COM%s Conflicts!!! Press <enter> to Close it and retry..." % str(sp_num))
sys.exit()
modem = xmodem.XMODEM(getc, putc, mode='xmodem1k')
# 发送启动字符让设备进入xmodem模式
# init_send(ser, init_str.encode("utf-8"))
# burn_ram_bin(modem, ram_file)
init_send(ser, init_str.encode("utf-8"))
burn_ram_bin(modem, ram_file)
# ser.baudrate=nb_rate
time.sleep(0.5)
# # ser.baudrate=nb_rate
# time.sleep(0.5)
# burn_flash_bin(ser, modem, iot_flash_file)
# 显示flash信息
ser.write(b"f i\n")
time.sleep(0.5)
print(ser.read(4096).decode('utf-8'))
ser_read_data=ser.read(4096).decode('utf-8')
myprint(ser_read_data)
with open(calc_flash_info_name(),mode='w+',encoding='utf-8') as f:
f.writelines(ser_read_data.split('\r\n'))
# 显示image信息
ser.write(b"f s\n")
time.sleep(0.5)
print(ser.read(4096).decode('utf-8'))
ser_read_data=ser.read(4096).decode('utf-8')
myprint(ser_read_data)
with open(calc_flash_info_name(),mode='a+',encoding='utf-8') as f:
f.writelines(ser_read_data.split('\r\n'))
# 上传整个镜像
ser.write(b"fw u d all\n")
time.sleep(0.5)
print(ser.read(4096).decode('utf-8'))
# upload_bin(modem,"upload.bin")
myprint(ser.read(4096).decode('utf-8'))
upload_bin(modem,calc_upload_name())
print ("Total transmission time: %s s" % str(trans_time_0+trans_time_1))
wf.writelines("Total transmission time: %s s" % str(trans_time_0+trans_time_1))
wf.close()
myprint ("Total transmission time: %s s" % str(trans_time_0+trans_time_1))
myprint("Start transform bin to hex.")
bin_to_hex_file(calc_upload_name(), calc_hex_name(),calc_flash_info_name())
myprint("Transform to hex end.")