its-gen1/specs/spi_protocol_details.md

128 lines
3.8 KiB
Markdown
Raw Normal View History

# 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内存不足处理