its-gen1/specs/spi_protocol_details.md

128 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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