From 531a8570576e160b2cdfe3d29e7635811898e76f Mon Sep 17 00:00:00 2001 From: ranchuan Date: Mon, 14 Oct 2024 19:42:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E7=83=A7=E5=BD=95=E5=92=8C?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=9B=BA=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- bin_to_hex.py | 1 + bootram_kl3_build.bin | Bin 0 -> 54114 bytes kl3_ram_build.bin | Bin 0 -> 48156 bytes kunlun.py | 132 ++++++++++++++++++++++++------------------ xmodem_config.txt | 8 +-- 6 files changed, 84 insertions(+), 60 deletions(-) create mode 100644 bootram_kl3_build.bin create mode 100644 kl3_ram_build.bin diff --git a/.gitignore b/.gitignore index 4efcc1b..be979e4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ work/ -__pycache__/ \ No newline at end of file +__pycache__/ +history/ \ No newline at end of file diff --git a/bin_to_hex.py b/bin_to_hex.py index 463f127..87a5a19 100644 --- a/bin_to_hex.py +++ b/bin_to_hex.py @@ -254,6 +254,7 @@ def bin_to_hex_file(bin_file_name:str,hex_file_name:str,info_file_name:str=None) else: info=load_flash_info(info_file_name) text=bin_to_hex2(bin) + print(f"write to file {hex_file_name}") with open(hex_file_name,mode='w+',encoding="utf-8") as f: f.write(text) diff --git a/bootram_kl3_build.bin b/bootram_kl3_build.bin new file mode 100644 index 0000000000000000000000000000000000000000..b8d8a6986c298a68985b06e41322938dfc3ff214 GIT binary patch literal 54114 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

9C+ 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 WaZxzzHbIL_y_tOQ4DB@c3jZG_F>ELR literal 0 HcmV?d00001 diff --git a/kunlun.py b/kunlun.py index dc83e62..62f9196 100644 --- a/kunlun.py +++ b/kunlun.py @@ -24,7 +24,6 @@ def init_send(s_port:serial.Serial, send_str): bytes2read = s_port.in_waiting tmp = s_port.read(bytes2read) s_info += tmp - # m_ram = re.search("Recieving RAM-IMAGE in xmodem : C", s_info.decode("utf-8")) if(s_info.find(b"Recieving RAM-IMAGE in xmodem : C")>=0): m_ram=True else: @@ -45,21 +44,22 @@ def burn_ram_bin(x_modem:xmodem.XMODEM, r_file): myprint("Cannot load file, please check the file path and retry. Press to exit") sys.exit() - xmodem_send = x_modem.send(stream, callback=status_update_0) + xmodem_send = x_modem.send(stream, callback=download_callback) etime = datetime.datetime.now() trans_time_0 = (etime - stime).seconds - myprint ("\nTransferring ram.bin result: %s, consuming time: %s s \n" % (xmodem_send, trans_time_0)) + myprint ("\nTransferring %s result: %s, consuming time: %s s \n" % (r_file, 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() while True: - s_info += s_port.read(1) - myprint(f"recv:{s_info.hex(' ')}") bytes2read = s_port.in_waiting tmp = s_port.read(bytes2read) + if(len(tmp)==0): + continue + print_device_str(tmp) s_info += tmp - if(s_info.find(b'C')>=0): + if(s_info.find(b'C')>=0 and bytes2read==1): m_flash=True else: m_flash=False @@ -69,7 +69,6 @@ def burn_flash_bin(s_port:serial.Serial, x_modem:xmodem.XMODEM, f_file): m_done=False if m_flash: - # myprint m_flash.group(0) myprint (r"Recieving FLASH-IMAGE in xmodem : C") s_info = bytearray() stime = datetime.datetime.now() @@ -80,20 +79,37 @@ def burn_flash_bin(s_port:serial.Serial, x_modem:xmodem.XMODEM, f_file): myprint("Cannot load file, please check the file path and retry. Press to exit") sys.exit() - xmodem_send = x_modem.send(stream, quiet=True, callback=status_update_1) + xmodem_send = x_modem.send(stream, quiet=True, callback=download_callback) etime = datetime.datetime.now() trans_time_1 = (etime - stime).seconds - myprint ("\nTransferring iot_flash.bin result: %s, consuming time: %d s \n" % (xmodem_send, trans_time_1)) + myprint ("\nTransferring %s result: %s, consuming time: %d s \n" % (f_file,xmodem_send, trans_time_1)) elif m_done: - myprint (m_done.group(0)) + myprint("Update done.") break else: pass def upload_callback(total_packets, success_count, error_count, packet_size): - # callback(total_packets, success_count, error_count, packet_size) - myprint("upload:",total_packets, success_count, error_count, packet_size) + if total_packets % 10 == 0: + sys.stdout.write('.') + sys.stdout.flush() + + +def download_callback(total_packets, success_count, error_count): + if total_packets % 10 == 0: + sys.stdout.write('.') + sys.stdout.flush() + +# 打印串口收到的字符 +def print_device_str(data:bytearray): + data:list[bytearray]=data.split(b"\r\n") + for item in data: + try: + d=item.decode('utf-8') + myprint(d.strip()) + except Exception as e: + myprint(f" {item.hex()}") # 上传固件 def upload_bin(x_modem:xmodem.XMODEM, w_file): @@ -116,28 +132,14 @@ def upload_bin(x_modem:xmodem.XMODEM, w_file): def getc(size, timeout=1): data=ser.read(size) - # myprint("getc:",data.hex(' ')) return data or None def putc(data, timeout=1): - # myprint("putc:",data.hex(' ')) ser.write(data) time.sleep(0.03) -def status_update_0(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: - # myprint ('.'), - - -def status_update_1(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: - # myprint ('.'), - - @@ -173,6 +175,52 @@ def calc_flash_info_name(): return os.path.join(_work_dir,name) + + +# 上传固件 +def upload_fun(): + # 显示flash信息 + ser.write(b"f i\n") + time.sleep(0.5) + ser_read_data=ser.read(4096) + print_device_str(ser_read_data) + with open(calc_flash_info_name(),mode='w+',encoding='utf-8') as f: + f.writelines(ser_read_data.decode('utf-8').split('\r\n')) + # 显示image信息 + ser.write(b"f s\n") + time.sleep(0.5) + ser_read_data=ser.read(4096) + print_device_str(ser_read_data) + with open(calc_flash_info_name(),mode='a+',encoding='utf-8') as f: + f.writelines(ser_read_data.decode('utf-8').split('\r\n')) + # 上传整个镜像 + ser.write(b"fw u d all\n") + time.sleep(0.5) + myprint(ser.read(4096).decode('utf-8')) + upload_bin(modem,calc_upload_name()) + + 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.") + + +# 烧录固件 +def burn_fun(): + time.sleep(3) + ser_read_data=ser.read(4096) + print_device_str(ser_read_data) + ser.baudrate=nb_rate + + burn_flash_bin(ser, modem, iot_flash_file) + myprint ("Total transmission time: %s s" % str(trans_time_0+trans_time_1)) + time.sleep(3) + ser_read_data=ser.read(4096) + print_device_str(ser_read_data) + + + + # kunlun.py [upload.bin] if __name__ == '__main__': if(len(sys.argv)<2): @@ -212,33 +260,7 @@ if __name__ == '__main__': # 发送启动字符让设备进入xmodem模式 init_send(ser, init_str.encode("utf-8")) burn_ram_bin(modem, ram_file) + # burn_ram_bin(modem, "kl3_ram_build.bin") - # # 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) - 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) - 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) - myprint(ser.read(4096).decode('utf-8')) - upload_bin(modem,calc_upload_name()) - - 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.") - + upload_fun() + # burn_fun() diff --git a/xmodem_config.txt b/xmodem_config.txt index 49c132a..5a99808 100644 --- a/xmodem_config.txt +++ b/xmodem_config.txt @@ -6,9 +6,9 @@ init_str = WQKL -serial_port_num = 3 +serial_port_num = 11 baud_rate = 115200 -new_baud_rate = 460800 +new_baud_rate = 468000 -ram_file = bootram_kl1.bin -iot_flash_file = HZ-SG-QJCCO03-SOLAR-F-PSRAM-E-P12087-RF-DUAL-11.0.0.1-dbd3324-20240709.bin \ No newline at end of file +ram_file = bootram_kl3_build.bin +iot_flash_file = HTZD_STA_xts.bin \ No newline at end of file