nuttx实战项目:多路串口合并功能之七主app需求设计 - 详解

基于宏定义串口配置的转发与探测管理系统需求说明(含心跳上报)

1. 项目整体需求

本项目实现一个串口转发与设备管理程序,功能如下:

  • 上位机通过 UART_MAIN 接收数据并解包,根据设备类型下发至 UART_DEVICE_A–D
  • 芯片通过 UART_DEVICE_A–D 接收设备数据,进行简单封包后通过 UART_MAIN 上传至上位机。
  • 程序通过设备特征数据进行 设备初始化探测与后续热插拔管理
  • 探测线程在完成每次扫描后,统一上报设备状态心跳包

2. 串口宏定义

通过宏配置各个串口设备路径:

#define UART_MAIN      "/dev/ttyS1"
#define UART_DEVICE_A  "/dev/ttyS2"
#define UART_DEVICE_B  "/dev/ttyS3"
#define UART_DEVICE_C  "/dev/ttyS4"
#define UART_DEVICE_D  "/dev/ttyS5"

3. 全局数据结构

结构体 port_device

  • 串口名称(从宏定义赋值)

  • 串口文件句柄

  • 设备 ID

    • 0:BIS
    • 1:Brain_O2
    • 2:Muscle
    • 3:Blood
    • 0xFF:未绑定设备
  • last_rx_time:最后一次接收到消息的时间

4. 初始化流程

  1. 主线程打开 UART_DEVICE_A–D,并保存句柄到 port_device 数组。

  2. 主线程执行 初始化探测,绑定已连接设备。

  3. 探测完成后:

    • 启动 探测线程,持续更新绑定关系与状态上报。
    • 主线程进入数据上报循环。

5. 探测与热插拔管理线程

探测线程每秒执行一次,流程如下:

  1. 超时释放

    • 遍历所有已绑定端口,若 last_rx_time 超过 3s,则清除绑定。
  2. 未绑定端口探测

    • device_id == 0xFF 的端口:

      • 若有接收数据,按规则绑定。

      • 若 1.5s 内无数据,则发送一次探测包,等待 0.5s:

        • 收到数据 → 绑定(仅可能是 Brain_O2)。
        • 无数据 → 探测结束。
  3. Brain_O2 保活

    • 若已绑定,则周期性发送探测包(1–2s 区间)。
    • 回复由接收线程处理,用于刷新 last_rx_time
  4. 心跳状态上报

    • 探测流程结束后,生成设备状态心跳包,上报至 UART_MAIN

      [0xAA 0xAA 0xAA] [00 06] [0xFF] [0x00] [状态字节*4] [CRC] [0xFF 0xFF 0xFF]
      • 子类型:固定为 0x00(心跳)

      • 状态字节:4 个字节,对应 A–D 四个设备端口

        • 0x00:未连接
        • 其他值:连接的设备 ID
      • CRC:对子类型到状态字节累加校验

说明:这样,上位机可定期收到设备连接状态,确保对系统整体情况的可见性。

6. 主程序与线程分工

  • 主程序

    • 初始化串口
    • 完成一次初始化探测
    • 启动探测线程
    • 负责设备上报
  • 上位机接收线程

    • 接收 UART_MAIN 数据,校验 CRC 并转发至对应设备
  • 设备接收线程

    • 接收设备数据并上传
    • 更新 last_rx_time
    • 对 Brain_O2 握手包回复:仅更新 last_rx_time

7. 数据格式说明

7.1 上位机发送数据格式

AA AA AA [数据长度(2B)] [设备ID] [数据] [CRC] FF FF FF

7.2 下行设备数据封包

AA AA AA [数据长度(2B)] [设备ID] [设备数据] [CRC] FF FF FF

7.3 设备状态心跳包格式

AA AA AA 00 06 FF 00 [状态字节*4] CRC FF FF FF

8. 设备特征与探测规则

  • Brain_O2

    • 探测包:EF EF EF ... FE FE FE
    • 响应包:24B,前 6B EF EF EF 11 11 25,后 3B FE FE FE
  • Muscle

    • 周期性 12B 数据,前 10B 固定
  • Blood

    • 周期性 32B 数据,特征 [0]=FA,[1]=FA,[2]=FA,[7]=00,[8]=17,[29-31]=FB FB FB
  • BIS

    • 周期性 2880B 数据,包含连续三个 0x66

9. 功能总结

  • 串口多路转发(主机 ↔ 外设)
  • 初始化探测 + 热插拔探测
  • 设备超时释放与自动重新绑定
  • 特殊设备(Brain_O2)保活机制
  • 设备状态心跳上报(统一 4 设备状态)
  • 上位机与外设的数据帧封装与校验
  • 串口名通过 宏定义灵活配置

posted on 2025-10-28 10:01  wgwyanfs  阅读(0)  评论(0)    收藏  举报

导航