# 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接收超时**: 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 解析逻辑 ```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复位,反之亦然