# SOC方案接入通信协议文档 # 修订记录 |文档版本|协议版本|日期|编写人|修订类型|修订内容| |---|---|---|---|---|---| |V1\.0\.0|V1\.0|2026\-07\-08|麦田|新建|首次发布SOC方案接入协议通讯文档| --- # 协议说明 - 数据采用**大端模式**(Big Endian)传输。 - 数据帧格式: **包头 \+ 包长度 \+ 命令 \+ 序列号 \+ 数据 \+ 校验和**。 - 包头固定为 `0x55AA`。 - 包长度表示 **命令开始至校验和结束** 的数据长度。 - 命令字(Command)用于区分不同功能。 - 序列号(Seq)由请求方递增生成,ACK需原样返回,用于匹配请求与响应。 - 默认所有命令采用 **一问一答机制**,发送方发送命令后,接收方必须返回对应 ACK。 - ACK 数据包包含 Result 字段,用于返回执行结果。 - 超时未收到 ACK 时,发送方可进行重试,最大重试次数建议为 3 次。 - 数据点标志(Bitmap)由 DP 配置文档自动生成,一个 Bit 对应一个 DP。 - 数据点值按照 Bitmap 中 Bit 置位顺序依次排列。 - 读取命令通过 Bitmap 指定需要读取的 DP,Bitmap 全 1 表示读取全部 DP。 - BLE 模组主要负责数据透传、蓝牙连接及状态管理,业务数据由 MCU 处理。 - 校验方式:累加和校验(Sum Check),计算范围为 **包长度字段至校验和前一个字节**。 ## Result 定义: |值|含义| |---|---| |0x00|成功| |0x01|参数错误| |0x02|设备忙| |0x03|不支持该操作| |0x04|校验错误| |0x05|执行失败| ### OTA 专用错误码 |值|含义| |---|---| |0x20|无需升级(版本一致)| |0x21|OTA 版本低于当前版本| |0x22|Flash 空间不足| |0x23|OTA 状态错误| |0x24|OTA文件检验失败| |0x25|升级失败| # 基本通讯协议 ## 设备上报版本信息 > 设备绑定上网关之后,主动上报固件版本到服务器,此命令通过网关的应答格式判断是否发送成功。。 > > ### 设备 =\> 网关 |序号|字段名称|字节长度|内容说明| |---|---|---|---| |1|包头|2|0x55AA| |2|包长度|2|len\(命令\.\.\.校验和\)| |3|命令|1|0x41| |4|序列号|1|与请求的序列号一致| |5|Result|1|执行结果(见 Result 定义)| |6|BLE Version|3|固件版本号,格式:主版本号\(1Byte\)\+次版本号\(1Byte\)\+修订版本号\(1Byte\),显示格式为:`Vx.x.x`| |7|MCU Version|3|固件版本号,格式:主版本号\(1Byte\)\+次版本号\(1Byte\)\+修订版本号\(1Byte\),显示格式为:`Vx.x.x`,如MCU不存在则填0| |8|Hardware Version|3|硬件版本号,格式:硬件主版本号\(1Byte\)\+硬件次版本号\(1Byte\)\+硬件修订版本号\(1Byte\),显示格式:`Vx.x.x`| |9|校验和|1|和校验(包长度\.\.\.校验和前一个字节)| #### Version版本格式说明 |字节|字段名称|内容说明| |---|---|---| |Byte0|主版本号|产品架构、通信协议等重大变化时递增| |Byte1|次版本号|新增功能或功能优化时递增| |Byte2|修订版本号|Bug修复、参数调整、性能优化时递增| #### 示例 |MCU Version|版本号| |---|---| |0x01 0x02 0x05|V1\.2\.5| |0x05 0x02 0x21|V5\.2\.33| ### 网关 =\> 设备 通过网关的应答格式判断是否发送成功 ## APP控制设备 ### APP =\> 设备 |序号|字段名称|字节长度|内容说明| |---|---|---|---| |1|包头|2|0x55AA| |2|包长度|2|len\(命令\.\.\.校验和\)| |3|命令|1|0x03(下发控制)| |4|序列号|1|APP递增生成,ACK原样回传| |5|数据点标志|x(\(DP数量\+7\)/8)|一个字节可代表8个数据点| |6|数据点值|x|数据值| |7|校验和|1|和校验(包长度\.\.\.校验和前一个字节)| ### 设备 =\> APP |序号|字段名称|字节长度|内容说明| |---|---|---|---| |1|包头|2|0x55AA| |2|包长度|2|len\(命令\.\.\.校验和\)| |3|命令|1|0x04(应答下发控制)| |4|序列号|1|与请求的序列号一致| |5|Result|1|执行结果(见 Result 定义)| |6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)| --- ## APP读取设备 ### APP =\> 设备 |序号|字段名称|字节长度|内容说明| |---|---|---|---| |1|包头|2|0x55AA| |2|包长度|2|len\(命令\.\.\.校验和\)| |3|命令|1|0x05(下发读取)| |4|序列号|1|APP递增生成,ACK原样回传| |5|数据点标志|x(\(DP数量\+7\)/8)|指定需要读取的 DP,Bitmap 全 1 表示读取全部 DP| |6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)| ### 设备=\> APP |序号|字段名称|字节长度|内容说明| |---|---|---|---| |1|包头|2|0x55AA| |2|包长度|2|len\(命令\.\.\.校验和\)| |3|命令|1|0x06(应答读取)| |4|序列号|1|与请求的序列号一致| |5|数据点标志|x(\(DP数量\+7\)/8)|返回的数据点标志| |6|数据点值|x|数据值| |7|校验和|1|和校验(包长度\.\.\.校验和前一个字节)| --- ## 设备主动上报数据 此命令直接上报到服务器,通过网关的应答格式判断是否发送成功。 ### 设备 =\> APP/IPC |序号|字段名称|字节长度|内容说明| |---|---|---|---| |1|包头|2|0x55AA| |2|包长度|2|len\(命令\.\.\.校验和\)| |3|命令|1|0x07(主动上报)| |4|序列号|1|设备递增生成| |5|数据点标志|x(\(DP数量\+7\)/8)|一个字节可代表8个数据点| |6|数据点值|x|数据值| |7|校验和|1|和校验(包长度\.\.\.校验和前一个字节)| ### APP/IPC =\> 设备 通过网关的应答格式判断是否发送成功 --- # 扩展通讯协议 ## APP向设备推送OTA升级 > **功能说明:** APP 将与设备升级相关的信息发送给设备,设备根据这些信息判断是否允许OTA升级,并返回升级准备结果。 ### APP =\> 设备 |序号|字段名称|字节长度|内容说明| |---|---|---|---| |1|包头|2|固定 `0x55AA`| |2|包长度|2|len\(命令\.\.\.校验和\)| |3|命令|1|0x30| |4|序列号|1|数据包序列号| |5|固件类型(Type)|1|0x01:MCU
0x02:BLE| |6|固件版本(Firmware Version)|3|OTA 固件版本号| |7|固件长度(Payload Length)|4|OTA Bin 数据长度| |8|固件 CRC32(Payload CRC32)|4|OTA Bin 数据 CRC32 校验值| |9|校验和|1|和校验(包长度\.\.\.校验和前一个字节)| ### 设备 =\> APP |序号|字段名称|字节长度|内容说明| |---|---|---|---| |1|包头|2|固定 `0x55AA`| |2|包长度|2|`len(命令...校验和)`| |3|命令|1|0x31| |4|序列号|1|与请求保持一致| |5|Result|1|执行结果(见 Result OTA 专用错误码定义)| |6|Max Data Length|2|设备 单次允许接收的最大 Payload 长度(Byte)| |7|校验和|1|和校验(包长度\.\.\.校验和前一个字节)| --- ## APP向设备推送OTA数据 > **功能说明:** APP 根据 设备 返回的 **Max Data Length** 对 OTA Bin 进行分片,并按顺序发送给设备。 设备 每接收一包数据后立即返回应答,APP 收到成功应答后继续发送下一包。 ### APP =\> 设备 |序号|字段名称|字节长度|内容说明| |---|---|---|---| |1|包头|2|固定 `0x55AA`| |2|包长度|2|`len(命令...校验和)`| |3|命令|1|0x32| |4|序列号|1|数据包序列号| |5|分片序号|2|当前数据包的分片序号,分片序号从1开始计算| |6|总分片数|2|| |7|Payload Data|x|OTA Bin 数据,长度 ≤ Max Data Length| |8|校验和|1|和校验(包长度\.\.\.校验和前一个字节)| ### 设备 =\> APP > **功能说明:** 设备 成功接收并处理当前 OTA 数据包后返回 Result。 APP收到成功应答后继续发送下一包 OTA 数据;若返回失败,则停止本次 OTA 升级。 |序号|字段名称|字节长度|内容说明| |---|---|---|---| |1|包头|2|固定 `0x55AA`| |2|包长度|2|`len(命令...校验和)`| |3|命令|1|0x33| |4|序列号|1|与请求保持一致| |5|Result|1|执行结果(见 Result 定义)| |6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)| ## 设备通知APP模组OTA升级完成 > **功能说明: ** 设备完成OTA升级后,主动通知APP当前升级结果及固件版本信息。 ### 设备 =\> APP |序号|字段名称|字节长度|内容说明| |---|---|---|---| |1|包头|2|固定 `0x55AA`| |2|包长度|2|`len(命令...校验和)`| |3|命令|1|0x34| |4|序列号|1|数据包序列号| |5|类型(Type)|1|0x01:MCU
0x02:BLE| |6|OTA Result|1|OTA结果| |7|Firmware Version|3|当前固件版本| |8|校验和|1|和校验(包长度\.\.\.校验和前一个字节)| ### APP =\> 设备 |序号|字段名称|字节长度|内容说明| |---|---|---|---| |1|包头|2|固定 `0x55AA`| |2|包长度|2|`len(命令...校验和)`| |3|命令|1|0x35| |4|序列号|1|与请求保持一致| |5|Result|1|执行结果(见 Result 定义)| |6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)| --- ## APP向设备通知OTA停止 > **功能说明:** APP 主动通知设备终止当前 OTA 升级流程。设备收到后立即停止 OTA 数据接收,释放 OTA 相关资源,并返回处理结果。 ### APP =\> 设备 |序号|字段名称|字节长度|内容说明| |---|---|---|---| |1|包头|2|固定 `0x55AA`| |2|包长度|2|`len(命令...校验和)`| |3|命令|1|0x36| |4|序列号|1|数据包序列号| |5|校验和|1|和校验(包长度\.\.\.校验和前一个字节)| ### 设备 =\> APP |序号|字段名称|字节长度|内容说明| |---|---|---|---| |1|包头|2|固定 `0x55AA`| |2|包长度|2|`len(命令...校验和)`| |3|命令|1|0x37| |4|序列号|1|与请求保持一致| |5|Result|1|执行结果(见 Result 定义)| |6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)| --- ## 设备向APP通知OTA停止 > **功能说明:** 设备在 OTA 过程中因内部异常无法继续升级时,主动通知 APP 停止当前 OTA。APP 收到通知后立即停止发送 OTA 数据,并返回应答。 ### 设备 =\> APP |序号|字段名称|字节长度|内容说明| |---|---|---|---| |1|包头|2|固定 `0x55AA`| |2|包长度|2|`len(命令...校验和)`| |3|命令|1|0x38| |4|序列号|1|数据包序列号| |5|校验和|1|和校验(包长度\.\.\.校验和前一个字节)| ### APP =\> 设备 |序号|字段名称|字节长度|内容说明| |---|---|---|---| |1|包头|2|固定 `0x55AA`| |2|包长度|2|`len(命令...校验和)`| |3|命令|1|0x39| |4|序列号|1|与通知保持一致| |5|Result|1|`0x00`:已收到并停止 OTA| |6|校验和|1|和校验(包长度\.\.\.校验和前一个字节)|