EMS 知识库
首页 / knowledge/代码解析/net

upd_download.h

源文件路径:net/upd_download.h 所属模块:net(网络应用层 — 通用设备固件升级) 代码行数:44

1. 文件职责

本文件是 EMS 整机固件升级"通用状态表服务层"(net/upd_download.c)的公开接口头,对外导出 19 个 STUpdateTab 读写接口和 2 个落盘接口。

它同时重复定义了主用/备份两个 EMS 固件下载区的起止地址宏,供落盘路径计算目标地址。

它是 net 任务(TCP 云端升级)与 Modbus 任务(Modbus 升级)共用的唯一升级状态访问契约,也是 BMS、逆变器、充电桩、AFCI、电表等各设备升级模块判断"是否要升级"的入口声明。

本文件不含实现、不定义结构体,但它声明的接口全部以 ENUpdateType 枚举和 STUpdateTab 结构体为参数,因此隐含依赖 net/server.h。

2. 关键数据结构与宏

名称类型说明
__UPD_DOWNLOAD_H__宏(include guard)头文件保护宏(:9-10)
START_ADDR_SPI_FLASH_EMS_FW宏0x00003000,主用 EMS 固件下载区起始(:16)
END_ADDR_SPI_FLASH_EMS_FW宏0x00102FFF,该区结束,约 1MB(:17)
START_ADDR_SPI_FLASH_EMS_APP2_FW宏0x00106000,备份 EMS 固件下载区起始(:20)
END_ADDR_SPI_FLASH_EMS_APP2_FW宏0x00205FFF,该区结束,约 1MB(:21)

本文件未定义结构体、枚举或联合体。使用的类型说明:

类型来源说明
ENUpdateTypenet/server.h:186-198升级目标枚举:UPDT_EMS=0, UPDT_BMS, UPDT_INV1, UPDT_INV2, UPDT_INV3, UPDT_Meter, UPDT_EVC, UPDT_AFCI, UPDT_MAX
STUpdateTabnet/server.h:216-236单个升级目标的描述表(掩码、版本、MD5、长度、偏移、各标志位、CRC)
BOOLEANuCOS-II布尔类型,用于 4 个标志位接口
u8 / u32 / charincludes.h基础类型
ENInfoTypenet/ems.h:247-272仅出现在 calculate_dev_FW_Flash_MD5 的第三参数声明中
CHIP_FLASH_SIZEsystem/sys/chip.h:180本文件未使用(APP_MAX_SIZE 只在 net/ems_download.h:33 使用)

3. 函数清单

本文件不含函数定义,只含 19 条函数声明(:23-41)。

函数名作用域说明
set_response_force_upd_status(ENUpdateType updType, BOOLEAN set)全局(声明,定义在 net/upd_download.c:41)设置"已应答服务器强制升级请求"标志
get_response_force_upd_status(ENUpdateType updType)全局(声明,定义在 net/upd_download.c:57)读取上述标志
set_flag_force_update(ENUpdateType updType, BOOLEAN bSet)全局(声明,定义在 net/upd_download.c:73)设置设备的强制/主动升级标志
get_flag_force_update(ENUpdateType updType)全局(声明,定义在 net/upd_download.c:89)读取上述标志
clear_curr_offset_file_request(ENUpdateType updType)全局(声明,定义在 net/upd_download.c:105)把下载偏移归零
get_curr_offset_file_request(ENUpdateType updType)全局(声明,定义在 net/upd_download.c:121)读取下载偏移
Save_Data_To_FW_Area_InSdram(ENUpdateType updType, u8 *fw_Bin, u32 Len, u8 *fw_sdram_baseaddr)全局(声明,定义在 net/upd_download.c:137)按当前偏移把一块固件写入 SDRAM 固件区,0 成功 / 1 失败
save_data_to_fw_area_inFlash(ENUpdateType updType, u8 *fw_Bin, u32 Len)全局(声明,定义在 net/upd_download.c:194)按当前偏移把一块固件写入 SPI Flash 主/备固件区,0 成功 / 1 失败
get_save_firm_in_app_flash_flag(void)全局(声明,定义在 net/upd_download.c:166)读取分区选择标志(APP1 / APP2)
set_save_firm_in_app_flash_flag(u8 flag)全局(声明,定义在 net/upd_download.c:178)设置分区选择标志
set_status_update_file_info(ENUpdateType updType, u8 value)全局(声明,定义在 net/upd_download.c:237)设置"已取得升级文件信息"标志
set_updt_file_mask(ENUpdateType updType, char *fileMask)全局(声明,定义在 net/upd_download.c:253)写入升级文件掩码
set_ver_from_server(ENUpdateType updType, char *ver, u8 len)全局(声明,定义在 net/upd_download.c:269)写入服务器下发的目标软件版本
set_id_code_for_updt_cmd(ENUpdateType updType, u8 *buff, u32 len)全局(声明,定义在 net/upd_download.c:304)写入特殊升级指令码
get_length_file_updating(ENUpdateType updType)全局(声明,定义在 net/upd_download.c:327)读取升级文件总长度
get_curr_md5_code_fw_file(ENUpdateType updType)全局(声明,定义在 net/upd_download.c:343)返回服务器下发的 MD5 十六进制串指针
Set_Status_Is_Updated_From_Server(ENUpdateType updType, u8 bSet)全局(声明,定义在 net/upd_download.c:359)置位"固件已就绪待升级"
Get_Status_Is_Updated_From_Server(ENUpdateType updType)全局(声明,定义在 net/upd_download.c:375)读取"固件已就绪待升级"标志
calculate_dev_FW_Flash_MD5(ENUpdateType updType, u8 *g_u8_fw_sdram, ENInfoType type)全局(声明,定义在 net/upd_download.c:391)对 SDRAM 中固件做整包 MD5 并与服务器值比对

声明总数(19 条,:23-41)与 net/upd_download.c 中的函数定义总数(19 个)完全一致,接口契约完整,无遗漏或多声明。

4. 核心逻辑解析

本文件无逻辑代码。相关实现逻辑说明见 docs/knowledge/代码解析/net/upd_download.c.md 的第 4 节。

头文件层面的要点:

分区地址宏与外挂 SPI Flash 布局

宏值区域
START_ADDR_SPI_FLASH_EMS_FW0x00003000主用固件区起始
END_ADDR_SPI_FLASH_EMS_FW0x00102FFF主用固件区结束(≈1020KB)
START_ADDR_SPI_FLASH_EMS_APP2_FW0x00106000备份固件区起始
END_ADDR_SPI_FLASH_EMS_APP2_FW0x00205FFF备份固件区结束(≈1020KB)

四个宏的取值与 net/ems_download.h:21-30 中的同名定义完全一致,属于双份定义。两个头文件的配置区宏(START/END_ADDR_SPI_FLASH_EMS_FW_CFG_INFO、START/END_ADDR_SPI_FLASH_EMS_APP2_FW_CFG_INFO)只在 net/ems_download.h 中定义。

接口分层

19 个接口按职责分为三类:

注意 get_save_firm_in_app_flash_flag 与 set_save_firm_in_app_flash_flag 管理的是 net/upd_download.c:27 的文件级静态变量而非 STUpdateTab 字段,跨文件可见但作用域仅限本模块。

5. 对外接口

本文件导出

符号使用者
START_ADDR_SPI_FLASH_EMS_FWnet/upd_download.c:205、net/ems_download.c:97
START_ADDR_SPI_FLASH_EMS_APP2_FWnet/upd_download.c:209、net/ems_download.c:97
END_ADDR_SPI_FLASH_EMS_FW / END_ADDR_SPI_FLASH_EMS_APP2_FW全工程无引用(仅文档用途)
set_response_force_upd_status / get_response_force_upd_statusnet/ems.c:2882、net/server.c:149、:151、:2370、:2382
set_flag_force_update / get_flag_force_updatenet/ems_download.c:219、net/server.c:2412、midware/afci/afci_upgrade.c:406、:452、midware/inverter/alphaess/alphaess_upgrade.c:538-539、:587-588
clear_curr_offset_file_request / get_curr_offset_file_requestnet/server.c:3236、:3778、net/ems_download.c:230
Save_Data_To_FW_Area_InSdramnet/server.c:3589、:3598
save_data_to_fw_area_inFlashnet/server.c:3613、:3622
get_save_firm_in_app_flash_flag / set_save_firm_in_app_flash_flagnet/ems_download.c:74、:97;net/ems.c:4660;midware/interface/modbus/modbus.c:8992、:9002
set_status_update_file_infonet/server.c:2405、:3232
set_updt_file_masknet/server.c:2418、:2430、:2439
set_ver_from_servernet/server.c:2422
set_id_code_for_updt_cmdnet/server.c:2358、:2359、:2361
get_length_file_updatingnet/ems_download.c:129-130、:172、net/ems_boot_handle.c:222、net/server.c:3786、midware/afci/afci_upgrade.c:263-271、net/upd_download.c:398
get_curr_md5_code_fw_filenet/ems_download.c:164/167/206、midware/inverter/alphaess/alphaess_upgrade.c:105/107、net/upd_download.c:407/410/425
Set_Status_Is_Updated_From_Server / Get_Status_Is_Updated_From_Servernet/ems_download.c:180、:276-283、midware/bms/bms.c:2751/2758、midware/bms/alpha/battery_upgrade.c:751、midware/evc/evc_upgrade.c:677、midware/interface/interface.c:318、midware/afci/afci_upgrade.c:405/451/517、midware/debug/ate.c:132-134/166
calculate_dev_FW_Flash_MD5net/server.c:3789-3813、midware/interface/modbus/modbus.c:9340-9352

本文件直接使用的类型(隐含依赖)

ENUpdateType、STUpdateTab(net/server.h),ENInfoType(net/ems.h),BOOLEAN(uCOS-II)。本文件已 include net/ems.h(:13),net/ems.h 内部 include net/server.h,因此类型可见性依赖这条链路。

本文件调用的外部函数 / 变量

无(仅声明;:12 的 #include <includes.h> 提供基础类型,:13 的 #include "ems.h" 提供 ENUpdateType / STUpdateTab / ENInfoType)。

6. 依赖关系

7. 备注与风险点