TI毫米波雷达开发 —— 串口输出数据解析
TI毫米波雷达开发 —— 串口输出解析
- TLV协议
- 协议概述
- Header
- Body
- Padding
TI 毫米波雷达芯片计算的结果数据都会从UART发出供上位机进行解析并展示。解析和展示是两个不同的概念,解析指提取有效数据并转换成常见的度量值。展示指数据的可视化。
由于雷达这个领域的特殊性,很多时候理解雷达要拿摄像头类比,在雷达和摄像头的眼里都是“图像”数据,只不过摄像头展示出来的“图像”贴近真实世界,而雷达则在用它自己的视角展示着他看到的“世界”。二者都是对客观世界的反应,只不过形式有所区别,如下图左和图右。
TI 的毫米波雷达提供了很多的Demo用于功能演示和快速评估,配套相关的GUI也都具备上述 数据解析和展示 两种功能,根据不同的应用特点和类型做对应的处理。由于不同的应用需要关注的数据不同,如数据长度和类型,因此自然而然就引出了TLV协议。
TLV协议
TLV 协议是一种可以适应变长数据传输的常见协议格式,在诸多领域中均有应用。TLV(Type-Length-Value),即该协议由类型字段、长度字段和值字段组成。类型字段指代该数据的类型,长度字段指代值的长度,值字段包含了实际的数据。相比于固定字段和固定长度的数据的协议,TLV在TI mmWave 这种需要灵活性的场景中显的尤为得心应手。
协议概述
TLV 协议包含 Header - Body- Padding三大部分,如下图所示,接下来我们逐渐介绍这三部分的内容。
Header
接下来我们详细看下Header部分由哪些内容构成:
名称 | 数据类型 | 占用字节 | 说明 |
---|---|---|---|
magicWord | uint16_t * [4] | 8 | 输出缓冲区MagicWord(同步字),初始化为 {0x0102, 0x0304, 0x0506, 0x0708} ,可以用来区分一帧的起始,值无实际意义。 |
version | uint32_t | 4 | 软件SDK版本,与芯片中运行的SDK版本相关,一般如 20 00 00 04等。 |
totalPacketLen | uint32_t | 4 | 包括头部(Header)的数据包总长度(以字节为单位),这个可以用来做数据的校验和区分。 |
platform | uint32_t | 4 | 芯片类型,AWR1642为1642 |
frameNumber | uint32_t | 4 | 帧编号 , TLV会连续发送数据包,每发送一个数据包帧编号加一,可以用来判断帧是否存在丢帧的情况。 |
timeCpuCycles | uint32_t | 4 | 创建消息时的 CPU 周期时间。对于 XWR16xx:DSP CPU 周期,对于 XWR14xx:R4F CPU 周期 |
numDetectedObj | uint32_t | 4 | 检测到目标数量 |
numTLVs | uint32_t | 4 | TLV 的数量 |
subFrameNumber | uint32_t | 4 | 对于高级帧配置,这是子帧编号,范围为 0 到(子帧数 - 1)。对于帧配置(非高级),始终设置为 0 |
Body
Padding
整个TLV包需要满足32Bytes对齐的要求。整个包长必须是32字节的整数倍。Padding部分就是用来填充字节用于让整个包长满足32Byte字节整数倍的要求,所以Padding部分的字节并没有实际的意义。
TI常见的Type 如下表所示: