# SPI通信协议详细规范 ## 1. 物理层参数 - **时钟频率**: 10MHz (可配置范围: 1-20MHz) - **数据位宽**: 8位 - **时钟极性**: CPOL=0 (空闲时低电平) - **时钟相位**: CPHA=0 (第一个边沿采样) - **MSB/LSB**: MSB first - **最大包长**: 512字节 (包含头部和CRC) ## 2. 协议帧格式 ### 2.1 基本帧结构 | 字段 | 长度 | 描述 | |------|------|------| | SOF | 1字节 | 起始标志 (0xAA) | | Command | 1字节 | 命令类型 | | Length | 2字节 | 数据长度 (大端序) | | Payload | N字节 | 有效载荷 | | CRC32 | 4字节 | CRC32校验 (IEEE 802.3) | | EOF | 1字节 | 结束标志 (0x55) | ### 2.2 命令类型定义 | 命令值 | 命令名称 | 描述 | |--------|----------|------| | 0x01 | POWER_MODE_REQ | 电源模式请求 | | 0x02 | POWER_MODE_ACK | 电源模式确认 | | 0x03 | DATA_TRANSFER | 传感器数据传输 | | 0x04 | DATA_ACK | 数据接收确认 | | 0x05 | STATUS_REPORT | 状态报告 | | 0x06 | ERROR_REPORT | 错误报告 | | 0x07 | CONFIG_UPDATE | 配置更新 | | 0x08 | CONFIG_ACK | 配置确认 | ## 3. 传感器数据传输协议 (DATA_TRANSFER) ### 3.1 数据包格式 ``` SOF(0xAA) + CMD(0x03) + LEN(2B) + [SensorID(1B) + Timestamp(4B) + DataLength(2B) + SensorData(NB)] + CRC32(4B) + EOF(0x55) ``` ### 3.2 传感器数据结构 | 字段 | 长度 | 描述 | |------|------|------| | SensorID | 1字节 | 传感器标识符 | | Timestamp | 4字节 | 时间戳 (毫秒, 大端序) | | DataLength | 2字节 | 传感器数据长度 (大端序) | | SensorData | N字节 | 传感器原始数据 | ### 3.3 传感器ID映射表 | ID | 传感器类型 | 数据格式 | 更新频率 | |----|------------|----------|----------| | 0x01 | 摄像头 | JPEG/YUV帧 | 30Hz | | 0x02 | 温度传感器 | float32 (℃) | 1Hz | | 0x03 | 加速度计 | int16[3] (X,Y,Z) | 100Hz | | 0x04 | GPS | struct {double lat, lon; float alt;} | 1Hz | | 0x05 | 陀螺仪 | int16[3] (X,Y,Z) | 100Hz | | 0x06 | 磁力计 | int16[3] (X,Y,Z) | 10Hz | | 0x07 | 气压计 | float32 (hPa) | 1Hz | | 0x08 | 湿度传感器 | float32 (%) | 1Hz | | 0x09-0xFF | 预留 | - | - | ## 4. 流量控制与错误处理 ### 4.1 ACK机制 - SoC收到DATA_TRANSFER后,必须在10ms内回复DATA_ACK - ACK包包含接收到的SensorID和Timestamp用于确认 ### 4.2 重传机制 - 如果MCU在20ms内未收到ACK,则重传数据包 - 最大重传次数: 3次 - 重传间隔: 10ms ### 4.3 错误码定义 | 错误码 | 描述 | 处理方式 | |--------|------|----------| | 0x01 | CRC校验失败 | 丢弃数据包,记录错误 | | 0x02 | 包长度超限 | 丢弃数据包,记录错误 | | 0x03 | 无效传感器ID | 丢弃数据包,记录错误 | | 0x04 | 内存不足 | 丢弃数据包,触发内存清理 | | 0x05 | 通信超时 | 触发UART健康检查 | ## 5. 性能指标 ### 5.1 带宽计算 - 摄像头(720p@30fps): ~8Mbps - 其他传感器总和: ~100kbps - 总带宽需求: ~8.1Mbps - SPI实际带宽(10MHz): 10Mbps - 带宽利用率: ~81% ### 5.2 实时性要求 | 传感器类型 | 最大端到端延迟 | SPI传输延迟 | |------------|----------------|-------------| | 摄像头 | 100ms | <10ms | | 加速度计 | 50ms | <5ms | | 温度传感器 | 500ms | <1ms | | GPS | 1000ms | <1ms | ## 6. 实现注意事项 ### 6.1 MCU端实现 - 使用DMA传输提高效率 - 实现双缓冲区避免数据丢失 - 定期发送心跳包维持连接 ### 6.2 SoC端实现 - 使用中断驱动接收 - 实现环形缓冲区处理突发流量 - 定期检查MCU健康状态 ## 7. 测试用例 ### 7.1 功能测试 - [ ] 正常数据传输 - [ ] CRC校验失败处理 - [ ] 包长度边界测试 - [ ] 传感器ID有效性验证 ### 7.2 性能测试 - [ ] 最大带宽压力测试 - [ ] 实时性延迟测试 - [ ] 长时间稳定性测试 ### 7.3 异常测试 - [ ] 通信中断恢复 - [ ] MCU复位后同步 - [ ] SoC内存不足处理