diff --git a/resource/File_Upgrade1.hexpat b/resource/work_update.hexpat similarity index 100% rename from resource/File_Upgrade1.hexpat rename to resource/work_update.hexpat diff --git a/source/dev_LaminaAdapter.py b/source/dev_LaminaAdapter.py index 859c1e2..5572876 100644 --- a/source/dev_LaminaAdapter.py +++ b/source/dev_LaminaAdapter.py @@ -91,8 +91,8 @@ modbus_map = { 0xA5: ["抖动频率上限", 2], 0xA6: ["抖动频率下限", 2], 0xA7: ["电池电压判断限值", 2], - 0xA8: ["保留", 1], - 0xA9: ["保留", 1], + 0xA8: ["MPPT追踪模式", 1], + 0xA9: ["ADC参考电压", 1], 0xAA: ["保留", 1], 0xAB: ["保留", 1], 0xAC: ["保留", 1], diff --git a/source/dev_LaminaController.py b/source/dev_LaminaController.py index e9aa964..3cb4b9f 100644 --- a/source/dev_LaminaController.py +++ b/source/dev_LaminaController.py @@ -2,7 +2,7 @@ import time from pathlib import Path from serial import Serial from utl import trans_list_to_str -from func_frame import make_frame_dlt645, check_frame_dlt645 +from func_frame import make_frame_modbus, check_frame_modbus modbus_map = { # 1 - Hex @@ -150,7 +150,7 @@ class LaminaController: break try: - output_text = check_frame_dlt645(frame_recv, block=self.block) + output_text = check_frame_modbus(frame_recv, self.block['data']) except Exception as e: print(e) cnt += 1 @@ -168,7 +168,7 @@ class LaminaController: self.block['data']['type'] = 'read' self.block['data']['data_addr'] = daddr self.block['data']['data_len'] = dlen - frame = make_frame_dlt645(self.block) + frame = make_frame_modbus(self.block['data']) return self.__transfer_data(frame) @@ -176,7 +176,7 @@ class LaminaController: self.block['data']['type'] = 'write_one' self.block['data']['data_addr'] = daddr self.block['data']['data_val'] = dval - frame = make_frame_dlt645(self.block) + frame = make_frame_modbus(self.block['data']) return self.__transfer_data(frame) @@ -184,7 +184,7 @@ class LaminaController: self.block['data']['type'] = 'write_dual' self.block['data']['data_addr'] = daddr self.block['data']['data_val'] = dval - frame = make_frame_dlt645(self.block) + frame = make_frame_modbus(self.block['data']) return self.__transfer_data(frame) @@ -192,7 +192,7 @@ class LaminaController: self.block['data']['type'] = 'write_str' self.block['data']['data_addr'] = daddr self.block['data']['data_val'] = dval - frame = make_frame_dlt645(self.block) + frame = make_frame_modbus(self.block['data']) return self.__transfer_data(frame) @@ -207,7 +207,7 @@ class LaminaController: self.block['data']['file'] = Path(path_bin).read_bytes() self.block['data']['header_offset'] = 184 # 启动帧 - frame_master = bytearray(make_frame_dlt645(self.block)) + frame_master = bytearray(make_frame_modbus(self.block['data'])) # 等待擦除完成返回 try_times = 30 @@ -220,7 +220,7 @@ class LaminaController: try_times -= 1 continue - _, _, self.block["data"]['file_block_size'] = check_frame_dlt645(frame_slave, self.block) + _, _, self.block["data"]['file_block_size'] = check_frame_modbus(frame_slave, self.block['data']) break if self.block["data"]['file_block_size'] == 0: @@ -233,7 +233,7 @@ class LaminaController: self.block["data"]['step'] = 'trans' data_remain = len(self.block["data"]['file']) - self.block['data']['header_offset'] while data_remain > 0: - frame_master = bytearray(make_frame_dlt645(self.block)) + frame_master = bytearray(make_frame_modbus(self.block['data'])) cnt = 0 while cnt < self.retry: @@ -250,7 +250,7 @@ class LaminaController: break try: - ret = check_frame_dlt645(frame_slave, self.block) + ret = check_frame_modbus(frame_slave, self.block['data']) except Exception as e: print(e) ret = False, 0, 0 @@ -267,7 +267,7 @@ class LaminaController: # 结束升级 self.block["data"]['step'] = 'end' - frame_master = bytearray(make_frame_dlt645(self.block)) + frame_master = bytearray(make_frame_modbus(self.block['data'])) cnt = 0 while cnt < self.retry: @@ -284,7 +284,7 @@ class LaminaController: break try: - ret = check_frame_dlt645(frame_slave, self.block) + ret = check_frame_modbus(frame_slave, self.block['data']) except Exception as e: print(e) ret = False, 0, 0 diff --git a/source/utl_upgrade.py b/source/utl_upgrade.py index 222780b..01bd98e 100644 --- a/source/utl_upgrade.py +++ b/source/utl_upgrade.py @@ -203,6 +203,10 @@ def build_header_new(config: dict): m_file_header[92: 94] = config['area_code'] m_file_header[94: 158] = config['hex_name'] + if 'upgrade_type' in config.keys(): + m_file_header[158: 160] = config['upgrade_type'] + m_file_header[160: 182] = [0x00] * 22 + else: m_file_header[158: 182] = [0x00] * 24 m_file_header = bytearray(m_file_header) @@ -385,6 +389,16 @@ def test4(path_boot, path_main, path_back): return bytearray(Image), main_header, main_data_b, main_data_e, back_header, back_data_b, back_data_e +def task5(): + """ 文件缓冲区对比测试 """ + file_dat = Path(r"test\p280039\result\lamina_controller_dsp_t1.dat") + file_dat_buffer = Path(r"test\p280039\result\lamina_controller_dsp_buffer.bin") + file_dat_buffer.exists(), file_dat.exists() + data_dat = file_dat.read_bytes() + data_dat_buffer = file_dat_buffer.read_bytes() + for i in range(len(data_dat)): + if data_dat[i] != data_dat_buffer[2*i]: + print(f"Diff in {hex(i)}, Data: {data_dat[i]}!={data_dat_buffer[2*i]}") def GenerateImage_SLCP001_p460(path_boot, path_main, path_back): """ 叠光适配器-460平台版本 镜像生成 """ @@ -454,6 +468,7 @@ def GeneratePackage_XXX001_p280039(path_hex): 'prog_id': list(b"SLCP001"), # 程序识别号 'prog_type': 'app', # 程序类型 'area_code': [0x00, 0x00], # 地区 + 'upgrade_type': [0x00, 0x00], # 升级方式(0-片外缓冲, 1-片内缓冲, 2-升级备份) } path_hex = Path(path_hex) @@ -537,18 +552,24 @@ def Process2(): file_bin.write_bytes(data_bins) def Process3(): - """ 升级包生成流程 """ + """ 叠光控制器DSP升级包生成流程 """ root = Path(r"test\p280039") result = Path(r"test\p280039\result") hex_main = root / r"lamina_controller_dsp_t1.hex" file_package = result / f'{hex_main.stem}.dat' file_bin = result / f'{hex_main.stem}.bin' + file_package_buffer = result / f'{hex_main.stem}.datbuffer' data_package, data_bins = GeneratePackage_XXX001_p280039(hex_main) file_package.write_bytes(data_package) file_bin.write_bytes(data_bins) + data_buff = bytearray(2 * len(data_package)) + for i in range(len(data_package)): + data_buff[2*i] = data_package[i] + file_package_buffer.write_bytes(data_buff) + if __name__ == "__main__": # path_bin = Path("F:\\Work\\FPGA\\Test\\Vivado\\test_update\\test_update.vitis\\upgrade_system\\Debug\\sd_card\\BOOT.BIN")