# update_pcan **Repository Path**: stick-chen/update_pcan ## Basic Information - **Project Name**: update_pcan - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-23 - **Last Updated**: 2025-03-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 协议帧格式 | 字段 | 长度 | 描述 | | --- | --- | --- | |命令码|1|开始升级,结束升级,调转等| |帧信息|0-7|| # 命令集设计 |命令码(Hex)| 名称| 描述 | --- | --- | --- | |0x01| 开始升级 |初始化升级流程,传递固件总大小和全局 CRC32。 |0x02| 结束升级 |通知升级完成。 |0x03| 块头 |发送块头信息(块序号、Flash 地址、块 CRC16)。 |0x04| 块确认 |接收端确认块接收成功或失败。 |0x05| 全局校验 |请求接收端校验整个固件的 CRC16。 |0x06| 跳转到应用 |命令设备跳转到应用程序。 |0x07| 获取版本号 |获取设备版本号。 # 开始帧 | 字段 | 长度 | 描述 | | --- | --- | --- | | 命令码 | 1 | 0x01 | | 固件大小 | 4 | 固件大小(字节) | | 全局 CRC32 | 4 | 固件全局 CRC32 | # 结束帧 | 字段 | 长度 | 描述 | | --- | --- | --- | | 命令码 | 1 | 0x02 | | 全局 CRC32 | 4 | 固件全局 CRC32 | # 块头帧 | 字段 | 长度 | 描述 | | --- | --- | --- | | 命令码 | 1 | 0x03 | | 块序号 | 2 | 块序号(0-65535)| | 块大小| 4 | Flash 地址(字节)| | 块 CRC16 | 2 | 块 CRC16 | # 数据分片帧 | 字段 | 长度 | 描述 | | --- | --- | --- | | 命令码 | 1 | 0x04 | | 块序号 | 2 | 块序号(0-65535)| | 分片序号 | 1 | 分片序号(0-255)| | 数据 | 0-4 | 数据长度 | # 数据帧格式 | 字段 | 长度 | 描述 | | --- | --- | --- | | 数据分片| 1 | 0-255 | | 数据 | 0-7 | 数据长度 | ```c sequenceDiagram participant Host as 主机 participant MCU as 设备 Host->>MCU: 0x07 [JUMP to App] (07 + 密码) MCU->>Host: 0x05 [ACK] Host->>MCU: 0x01 [Start] (固件大小, 全局 CRC32) MCU->>Host: 0x05 [ACK] loop 逐个块传输 Host->>MCU: 0x03 [Block Header] (块序号, Flash 地址, 块 CRC16) MCU->>Host: 0x05 [ACK] loop 分片传输 Host->>MCU: 0x04 [Data Chunk] (分片序号, 数据) MCU->>Host: 0x05 [ACK] end MCU->>MCU: 写入 Flash MCU->>Host: 0x05 [Block Done] end Host->>MCU: 0x06 [Verify] (全局 CRC32) MCU->>Host: 0x05 [Success] Host->>MCU: 0x07 [Jump to App] MCU->>MCU: 重启并运行新固件 ```