its-gen1/specs/uart_protocol_details.md

144 lines
3.9 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.

# 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复位反之亦然