feat: 完善Mesh继电器OTA与地址协议
- 增加STM8 Bootloader工程及出厂固件恢复流程\n- 增加W25Q64外部Flash驱动和OTA分包接收、CRC16校验、断点续传状态管理\n- 增加固件版本查询、升级结果上报与主机确认机制\n- 将业务帧从55 AA帧头调整为发送方Mesh短地址+CMD+LEN+DATA+CRC16\n- 修正JDY-28M外层地址与业务发送方地址的职责划分,支持广播请求定向应答\n- 同步更新硬件引脚、存储分区、OTA流程和主机通信协议文档\n- 已使用SDCC重新编译,应用代码大小为5512字节,链接地址为0x8800
This commit is contained in:
@@ -2,8 +2,9 @@
|
||||
* @file business_protocol.h
|
||||
* @brief STM8 业务帧协议接口。
|
||||
*
|
||||
* 业务帧格式:0x55 0xAA | CMD | LEN | DATA | CRC16。
|
||||
* CRC 使用 CRC-16/MODBUS,计算范围为 CMD 至 DATA,低字节在前。
|
||||
* 业务帧格式:SRC_H SRC_L | CMD | LEN | DATA | CRC16_L CRC16_H。
|
||||
* SRC 为发送方的 Mesh 短地址;CRC 使用 CRC-16/MODBUS,计算范围为
|
||||
* SRC、CMD、LEN 和 DATA,线上低字节在前。
|
||||
*/
|
||||
#ifndef BUSINESS_PROTOCOL_H
|
||||
#define BUSINESS_PROTOCOL_H
|
||||
@@ -13,8 +14,8 @@
|
||||
/** 业务帧最大 DATA 长度,需为 JDY-28M 外层 20 字节限制预留空间。 */
|
||||
#define BUSINESS_MAX_DATA_LENGTH 4u
|
||||
|
||||
/** 业务帧头长度。 */
|
||||
#define BUSINESS_FRAME_HEADER_LENGTH 2u
|
||||
/** 发送方短地址字段长度。 */
|
||||
#define BUSINESS_SOURCE_ADDRESS_LENGTH 2u
|
||||
|
||||
/** 业务命令:继电器控制。 */
|
||||
#define CMD_RELAY_CONTROL 0x01u
|
||||
@@ -34,9 +35,22 @@
|
||||
/** 业务命令:电流阈值配置。 */
|
||||
#define CMD_THRESHOLD_CONFIG 0x06u
|
||||
|
||||
/** 查询当前主程序固件版本。 */
|
||||
#define CMD_FIRMWARE_VERSION_QUERY 0x0Eu
|
||||
|
||||
/** 查询固件版本应答。 */
|
||||
#define CMD_FIRMWARE_VERSION_RESPONSE \
|
||||
(CMD_FIRMWARE_VERSION_QUERY | CMD_RESPONSE_FLAG)
|
||||
|
||||
/** Bootloader升级结果主动上报。 */
|
||||
#define CMD_OTA_RESULT_REPORT 0x0Du
|
||||
|
||||
/** 应答命令基值,具体应答为请求命令加 0x80。 */
|
||||
#define CMD_RESPONSE_FLAG 0x80u
|
||||
|
||||
/** OTA升级结果上报应答命令。 */
|
||||
#define CMD_OTA_RESULT_ACK (CMD_OTA_RESULT_REPORT | CMD_RESPONSE_FLAG)
|
||||
|
||||
/** 通用错误应答命令。 */
|
||||
#define CMD_ERROR_RESPONSE 0xE0u
|
||||
|
||||
@@ -76,10 +90,13 @@ uint8_t BusinessProtocol_GetDataLength(void);
|
||||
/** 读取最近一帧合法业务帧的数据区;返回 0 表示下标越界。 */
|
||||
uint8_t BusinessProtocol_GetDataByte(uint8_t index, uint8_t *value);
|
||||
|
||||
/** 执行最近一帧已经通过校验的业务命令,并向源地址返回应答。 */
|
||||
void BusinessProtocol_HandleFrame(uint16_t source_address);
|
||||
/** 读取最近一帧合法业务帧携带的发送方 Mesh 短地址。 */
|
||||
uint16_t BusinessProtocol_GetSourceAddress(void);
|
||||
|
||||
/** CRC-16/MODBUS 计算函数,输入范围不包含业务帧头。 */
|
||||
/** 执行最近一帧已经通过校验的业务命令,并向源地址返回应答。 */
|
||||
void BusinessProtocol_HandleFrame(void);
|
||||
|
||||
/** CRC-16/MODBUS 计算函数,输入范围包含发送方地址字段。 */
|
||||
uint16_t BusinessProtocol_Crc16Modbus(const uint8_t *data, uint16_t length);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user