- 重命名模式文件;

- 更新适配器参数项;
 - 修改优化器报文函数调用;
 - 添加自定义升级模式标志位;
 - 添加升级包生成流程函数;
This commit is contained in:
何 泽隆
2024-08-27 21:20:10 +08:00
parent b407fe1f27
commit 5cb2a423c6
4 changed files with 36 additions and 15 deletions

View File

@@ -91,8 +91,8 @@ modbus_map = {
0xA5: ["抖动频率上限", 2], 0xA5: ["抖动频率上限", 2],
0xA6: ["抖动频率下限", 2], 0xA6: ["抖动频率下限", 2],
0xA7: ["电池电压判断限值", 2], 0xA7: ["电池电压判断限值", 2],
0xA8: ["保留", 1], 0xA8: ["MPPT追踪模式", 1],
0xA9: ["保留", 1], 0xA9: ["ADC参考电压", 1],
0xAA: ["保留", 1], 0xAA: ["保留", 1],
0xAB: ["保留", 1], 0xAB: ["保留", 1],
0xAC: ["保留", 1], 0xAC: ["保留", 1],

View File

@@ -2,7 +2,7 @@ import time
from pathlib import Path from pathlib import Path
from serial import Serial from serial import Serial
from utl import trans_list_to_str 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 = { modbus_map = {
# 1 - Hex # 1 - Hex
@@ -150,7 +150,7 @@ class LaminaController:
break break
try: 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: except Exception as e:
print(e) print(e)
cnt += 1 cnt += 1
@@ -168,7 +168,7 @@ class LaminaController:
self.block['data']['type'] = 'read' self.block['data']['type'] = 'read'
self.block['data']['data_addr'] = daddr self.block['data']['data_addr'] = daddr
self.block['data']['data_len'] = dlen self.block['data']['data_len'] = dlen
frame = make_frame_dlt645(self.block) frame = make_frame_modbus(self.block['data'])
return self.__transfer_data(frame) return self.__transfer_data(frame)
@@ -176,7 +176,7 @@ class LaminaController:
self.block['data']['type'] = 'write_one' self.block['data']['type'] = 'write_one'
self.block['data']['data_addr'] = daddr self.block['data']['data_addr'] = daddr
self.block['data']['data_val'] = dval self.block['data']['data_val'] = dval
frame = make_frame_dlt645(self.block) frame = make_frame_modbus(self.block['data'])
return self.__transfer_data(frame) return self.__transfer_data(frame)
@@ -184,7 +184,7 @@ class LaminaController:
self.block['data']['type'] = 'write_dual' self.block['data']['type'] = 'write_dual'
self.block['data']['data_addr'] = daddr self.block['data']['data_addr'] = daddr
self.block['data']['data_val'] = dval self.block['data']['data_val'] = dval
frame = make_frame_dlt645(self.block) frame = make_frame_modbus(self.block['data'])
return self.__transfer_data(frame) return self.__transfer_data(frame)
@@ -192,7 +192,7 @@ class LaminaController:
self.block['data']['type'] = 'write_str' self.block['data']['type'] = 'write_str'
self.block['data']['data_addr'] = daddr self.block['data']['data_addr'] = daddr
self.block['data']['data_val'] = dval self.block['data']['data_val'] = dval
frame = make_frame_dlt645(self.block) frame = make_frame_modbus(self.block['data'])
return self.__transfer_data(frame) return self.__transfer_data(frame)
@@ -207,7 +207,7 @@ class LaminaController:
self.block['data']['file'] = Path(path_bin).read_bytes() self.block['data']['file'] = Path(path_bin).read_bytes()
self.block['data']['header_offset'] = 184 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 try_times = 30
@@ -220,7 +220,7 @@ class LaminaController:
try_times -= 1 try_times -= 1
continue 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 break
if self.block["data"]['file_block_size'] == 0: if self.block["data"]['file_block_size'] == 0:
@@ -233,7 +233,7 @@ class LaminaController:
self.block["data"]['step'] = 'trans' self.block["data"]['step'] = 'trans'
data_remain = len(self.block["data"]['file']) - self.block['data']['header_offset'] data_remain = len(self.block["data"]['file']) - self.block['data']['header_offset']
while data_remain > 0: while data_remain > 0:
frame_master = bytearray(make_frame_dlt645(self.block)) frame_master = bytearray(make_frame_modbus(self.block['data']))
cnt = 0 cnt = 0
while cnt < self.retry: while cnt < self.retry:
@@ -250,7 +250,7 @@ class LaminaController:
break break
try: try:
ret = check_frame_dlt645(frame_slave, self.block) ret = check_frame_modbus(frame_slave, self.block['data'])
except Exception as e: except Exception as e:
print(e) print(e)
ret = False, 0, 0 ret = False, 0, 0
@@ -267,7 +267,7 @@ class LaminaController:
# 结束升级 # 结束升级
self.block["data"]['step'] = 'end' self.block["data"]['step'] = 'end'
frame_master = bytearray(make_frame_dlt645(self.block)) frame_master = bytearray(make_frame_modbus(self.block['data']))
cnt = 0 cnt = 0
while cnt < self.retry: while cnt < self.retry:
@@ -284,7 +284,7 @@ class LaminaController:
break break
try: try:
ret = check_frame_dlt645(frame_slave, self.block) ret = check_frame_modbus(frame_slave, self.block['data'])
except Exception as e: except Exception as e:
print(e) print(e)
ret = False, 0, 0 ret = False, 0, 0

View File

@@ -203,6 +203,10 @@ def build_header_new(config: dict):
m_file_header[92: 94] = config['area_code'] m_file_header[92: 94] = config['area_code']
m_file_header[94: 158] = config['hex_name'] 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[158: 182] = [0x00] * 24
m_file_header = bytearray(m_file_header) 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 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): def GenerateImage_SLCP001_p460(path_boot, path_main, path_back):
""" 叠光适配器-460平台版本 镜像生成 """ """ 叠光适配器-460平台版本 镜像生成 """
@@ -454,6 +468,7 @@ def GeneratePackage_XXX001_p280039(path_hex):
'prog_id': list(b"SLCP001"), # 程序识别号 'prog_id': list(b"SLCP001"), # 程序识别号
'prog_type': 'app', # 程序类型 'prog_type': 'app', # 程序类型
'area_code': [0x00, 0x00], # 地区 'area_code': [0x00, 0x00], # 地区
'upgrade_type': [0x00, 0x00], # 升级方式(0-片外缓冲, 1-片内缓冲, 2-升级备份)
} }
path_hex = Path(path_hex) path_hex = Path(path_hex)
@@ -537,18 +552,24 @@ def Process2():
file_bin.write_bytes(data_bins) file_bin.write_bytes(data_bins)
def Process3(): def Process3():
""" 升级包生成流程 """ """ 叠光控制器DSP升级包生成流程 """
root = Path(r"test\p280039") root = Path(r"test\p280039")
result = Path(r"test\p280039\result") result = Path(r"test\p280039\result")
hex_main = root / r"lamina_controller_dsp_t1.hex" hex_main = root / r"lamina_controller_dsp_t1.hex"
file_package = result / f'{hex_main.stem}.dat' file_package = result / f'{hex_main.stem}.dat'
file_bin = result / f'{hex_main.stem}.bin' 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) data_package, data_bins = GeneratePackage_XXX001_p280039(hex_main)
file_package.write_bytes(data_package) file_package.write_bytes(data_package)
file_bin.write_bytes(data_bins) 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__": if __name__ == "__main__":
# path_bin = Path("F:\\Work\\FPGA\\Test\\Vivado\\test_update\\test_update.vitis\\upgrade_system\\Debug\\sd_card\\BOOT.BIN") # path_bin = Path("F:\\Work\\FPGA\\Test\\Vivado\\test_update\\test_update.vitis\\upgrade_system\\Debug\\sd_card\\BOOT.BIN")