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.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接收超时: 300ms(3个周期)
- 超时处理: 触发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 解析逻辑
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 超时监控
// 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 正常通信测试
9.2 异常处理测试
9.3 边界条件测试
- 最大CPU负载 (100%)
- 最大内存使用 (100%)
- 极端温度值 (-40℃, 85℃)
10. 与SPI协议的关系
- 主备关系: SPI为主通道,UART为监控通道
- 独立性: UART不依赖SPI状态,独立工作
- 协同: UART超时可触发SPI复位,反之亦然