its-gen1/specs/uart_protocol_details.md

144 lines
3.9 KiB
Markdown
Raw Normal View History

# UART通信协议详细规范
## 1. 协议概述
UART通道主要用于SoC健康状态监控和关键传感器状态报告作为SPI主通道的补充和备份。
## 2. 物理层参数
| 参数 | 值 | 说明 |
|------|-----|------|
| 波特率 | 1000000 | 1Mbps满足实时性要求 |
| 数据位 | 8 | 标准8位数据 |
| 停止位 | 1 | 标准1位停止位 |
| 校验位 | None | 无校验位 |
| 流控 | None | 无硬件流控 |
## 3. 帧格式定义
### 3.1 基本帧结构
```
[Header: 2B] [Payload: N B] [CRC16: 2B]
```
### 3.2 Header定义
- **固定值**: `0xAA55`
- **用途**: 帧同步和识别
### 3.3 Payload结构
| 字段 | 长度 | 类型 | 描述 |
|------|------|------|------|
| cpu_load | 1字节 | uint8_t | CPU负载百分比 (0-100) |
| memory_usage | 1字节 | uint8_t | 内存使用百分比 (0-100) |
| temp_soc | 2字节 | int16_t | SoC温度 (℃ × 10范围-400~850) |
| critical_sensors | 4字节 | uint32_t | 关键传感器状态位图 |
| timestamp_ms | 4字节 | uint32_t | 时间戳 (毫秒) |
### 3.4 CRC16计算
- **算法**: CRC16-CCITT
- **初始值**: 0xFFFF
- **多项式**: 0x1021
- **输入数据**: Header + Payload
## 4. 通信时序
### 4.1 发送频率
- **正常状态**: 每100ms发送一次
- **异常状态**: 每10ms发送一次CPU负载>90%或内存使用>95%
### 4.2 超时机制
- **MCU接收超时**: 300ms3个周期
- **超时处理**: 触发GPIO RESET_N复位信号
### 4.3 状态机
```
IDLE → SEND_FRAME → WAIT_ACK → IDLE
↓ (timeout)
TRIGGER_RESET
```
## 5. 关键传感器状态位图
| 位 | 传感器 | 状态值 | 说明 |
|----|--------|--------|------|
| 0 | 摄像头 | 0=离线, 1=在线 | 视频流状态 |
| 1 | 温度传感器 | 0=正常, 1=异常 | 超出工作范围 |
| 2 | 加速度计 | 0=正常, 1=异常 | 数据异常或离线 |
| 3 | GPS | 0=无信号, 1=有信号 | 定位状态 |
| 4-31 | 预留 | - | 未来扩展 |
## 6. 错误处理
### 6.1 CRC校验失败
- **处理方式**: 丢弃当前帧,记录错误计数
- **阈值**: 连续5次CRC失败触发告警
### 6.2 帧同步丢失
- **检测**: 连续3帧Header不匹配
- **恢复**: 重新同步从下一个0xAA55开始
### 6.3 数据异常
- **检测**: CPU负载>100%、内存使用>100%、温度超出范围
- **处理**: 标记为异常状态,提高发送频率
## 7. MCU端实现要求
### 7.1 接收缓冲区
- **大小**: 128字节环形缓冲区
- **处理**: 中断驱动接收DMA可选
### 7.2 解析逻辑
```c
typedef struct {
uint8_t header[2]; // 0xAA55
uint8_t cpu_load; // 0-100%
uint8_t memory_usage; // 0-100%
int16_t temp_soc; // ℃ * 10
uint32_t critical_sensors;
uint32_t timestamp_ms;
uint16_t crc16;
} uart_health_report_t;
int parse_uart_frame(uint8_t* buffer, size_t len, uart_health_report_t* report);
int validate_health_report(uart_health_report_t* report);
void handle_health_report(uart_health_report_t* report);
```
### 7.3 超时监控
```c
// 300ms超时定时器
void start_uart_timeout_timer(void);
void stop_uart_timeout_timer(void);
void uart_timeout_handler(void); // 触发GPIO复位
```
## 8. 性能指标
| 指标 | 要求 | 测试方法 |
|------|------|----------|
| 传输延迟 | ≤10ms | 示波器测量 |
| 误码率 | ≤10⁻⁶ | 长时间压力测试 |
| CPU占用 | ≤5% | 性能分析工具 |
| 内存占用 | ≤1KB | 内存分析 |
## 9. 测试用例
### 9.1 正常通信测试
- 发送标准健康报告帧
- 验证MCU正确解析和处理
### 9.2 异常处理测试
- CRC校验失败帧
- 超时场景模拟
- 数据异常场景
### 9.3 边界条件测试
- 最大CPU负载 (100%)
- 最大内存使用 (100%)
- 极端温度值 (-40℃, 85℃)
## 10. 与SPI协议的关系
- **主备关系**: SPI为主通道UART为监控通道
- **独立性**: UART不依赖SPI状态独立工作
- **协同**: UART超时可触发SPI复位反之亦然