CCC联盟数字车钥匙(四)——UWB MAC协议

本篇文章介绍CCC协议中关于UWB消息流,以及相关会话设置及控制消息的配置。

5、MAC协议

5.1 测距交换序列

本节介绍DK MAC层协议,针对双边双向测距方法(DS-TWR),协调器和Responder之间的数据交换方式。
MAC协议消息流
图中关于SP0、SP3数据帧已经在前文中进行介绍,RFRAME为Ranging Frame的简写,测距帧。
对于测距过程中,每个信息对应的时隙按照下表方式定义:
在这里插入图片描述
N S l o t _ p e r _ R o u n d k N^k_{Slot\_per\_Round} NSlot_per_Roundk数量大于实际需要发送的数据包的数量,对于Final_Data后的时隙暂不使用。

MAC协议序列在正常的操作模式下(发起者和响应者设备都工作在一个活跃的测距会话中)。
关于SP0的Pre-POLL与Final-Data帧相关数据结构示意如下。


typedef struct
{uint32_t uwb_session_id;uint32_t poll_sts_index;uint16_t ranging_block;uint8_t  hop_flag;uint16_t round_index;
}uwb_msg_pre_poll_t;typedef struct 
{uint8_t responder_index;uint32_t ranging_ts_resp_rstu; /* timestamp between POLL and RESPONSE */uint8_t ts_uncertainty;  /* range of values from 1.5cm-3.6m various confidences */uint8_t status;
}uwb_msg_responder_final_t;#define FINAL_RESPONDER_MAX  (10)typedef struct
{uint32_t uwb_session_id;uint16_t ranging_block;uint8_t hop_flag;uint16_t round_index;uint32_t final_sts_index;uint32_t ranging_ts_final_tx_rstu;uint8_t responder_num;usb_msg_responder_final_t responder_list[FINAL_RESPONDER_MAX];
}uwb_msg_final_data_t;

上述代码只是简单对PRE-POLL以及FINAL-DATA数据帧的封装,其中关于时间戳均为相对于POLL的时间长度,所以整个时间长度只用了4个字节,同时这里时间戳均用’*_rstu’结尾,表示为测距时间单位,时间戳单位为15.65ps。

具体数据帧则还需要按照IEEE 802.15.4a/z的数据传输格式进行封装,相关Payload段还需要进行加密处理。

在测距过程中,若协调器没有收到任何应答帧,那么Final Message和Final_Data包将忽略。
同时,协调器和responder都应该触发hopping(如果使用adaptive hopping模式)。
Frame Counter不应该增加,由于忽略了Final Data包。

如果没有收到有效响应,但是又为该响应添加了时间戳数据,那么时间戳数据的值应为0。

对于Final_Data消息的最大长度为127字节,Final_Data帧的Payload字段数据量 = 18 + 7*N_responder。
技术规范中,最大支持Responder数量为10。如果车辆的responders数量超过10,则车辆应将参与每个测距轮次的响应者数量设置为小于9或等于10的值,在测距会话设置的流程中。具体哪些responder参与测距,由车辆来决定(responder-device)。
在实现中,超过最大支持Responder数量时,还可以增加额外的Final_Data帧,传后续的Responder的信息。(当然,CCC规范中,并未如此支持)。

5.2 测距会话设置

本节介绍了如何在发起方和响应方设备之间执行MAC参数协商的流程:

首先,应答设备和协调器应通过BLE链路执行测距能力交换,responder-device发送RC-RQ(测距能力请求消息)到协调器,协调器应答RC-RS。一旦信息交换成功,接下来的协商步骤将通过BLE控制来设置测距会话。

部分流程以及实现可以结合CCC规范《第19章 BLE接口》一起来实现(部分略)。

另外,在CCC规范中, N C h a p _ p e r _ S l o t k = 8 N^k_{Chap\_per\_Slot}=8 NChap_per_Slotk=8是一个强制值,所有的设备都应该能够支持(约2.64ms周期,可能相对来说是比较宽裕的一个时隙长度)。通过设置强制值,也避免了设备之间达不成共识,即无法统一时隙长度。

5.3 MAC控制通道

MAC控制信道(通过BLE)的实现应符合以下要求:

  1. 控制信道应科用于协商或重新协商UWB参数(如测距会话设置)。
  2. 控制信道应是会话特定的,应在会话开始之前、会话的整个生命周期、以及测距会话终止之后。
  3. RAN应具有与其响应器设备一样多的UWB控制信道。
  4. 控制信道应通过BLE连接进行传输。
  5. 关于第k个测距会话的控制业务应当用 U W B _ S e s s i o n _ I D k UWB\_Session\_ID^k UWB_Session_IDk
  6. 在一个活跃测距会话的时序,应通过该测距会话的适当时间网络切片(如block index,round index, slot index或 mapped STS切片)来参考。
  7. 控制信道应由BLE L2CAP信道的Channel ID触发。协调器或响应者设备可以触发控制信道,并且可以请求UWB参数的变更。

5.4 UWB MAC配置

所有发送的SP0类型的包都需要根据MAC层协议,包含MAC Header(MHR),MAC Payload以及MAC Footer(MFR)字段。本节描述了SP0包的构成。

MHR(23 Octets)MAC PayloadMFR (2 Octets)

其中,MAC Payload除包含有效载荷外,还需要增加8字节的MIC,因而Final_Data仅支持10个Responder信息。

关于MHR相关字段定义如下:
在这里插入图片描述
其中,关于辅助安全报头(Auxiliary Security Header)定义如下:
在这里插入图片描述

需要注意,辅助安全报头与SP3包(POLL与Final消息)无关,因为SP3包没有携带MAC数据帧(没有物理层载荷),没有payload、MHR和MFR。(均为小端格式)

关于供应商特定的Header IE如下:
在这里插入图片描述
可以看到,供应商自定义信息中,用1个字节来表明数据帧的类型,0x1为Pre-POLL消息,0x2为Final Data消息。


持续更新,系列教程,收藏关注吧!

1、CCC联盟——UWB PHY
2、CCC联盟(一)——UWB MAC概述
3、CCC联盟数字车钥匙(二)——UWB MAC时间网格
4、CCC联盟数字车钥匙(三)——UWB MAC时间网格同步及Hopping

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/224964.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决git action发布报错:Input required and not supplied: upload_url

现象: 这个问题死活都找不到原因,后来打了一段调试的代码 - name: Debug Create Release Output run: | echo "Release ID: ${{ env.RELEASE_ID }}" echo "Release Upload URL: ${{ env.RELEASE_UPLOAD_URL }}" env: RELEASE_ID: ${…

统信UOS安装Virtualbox虚拟机和Windows10系统

在UOS统信系统中部署Windows环境我可以通过安装虚拟机来实现,这也可以解决软件不适配带来的一些问题,当然对硬件配置也有一定的要求,不建议性能过低的设备使用。 接下来请按照以下步骤进行安装Virtualbox及Win10虚拟系统的设置。 1、安装Vi…

深度学习【二】

1.运行时错误 1.1 ModuleNotFoundError: No module named ‘torch_scatter’ 参考 https://blog.csdn.net/weixin_42421914/article/details/132875571 pip install --no-index torch-scatter -f https://pytorch-geometric.com/whl/torch-1.13.1%2Bcpu.html

OSG粒子系统与阴影 - ​​​​​​​阴影shadow(7)

OSG阴影 在虚拟现实仿真中,为了真实地模拟自然效果,阴影效果是不可缺少的,它对一个场景的真实性是非常重要的。在游戏或仿真中,一个高效的阴影往往能够提供非常强悍的视觉真实感。 osgShadow库 在OSG中专门定义了一个名字空间osg…

lua的gc原理

lua垃圾回收(Garbage Collect)是lua中一个比较重要的部分。由于lua源码版本变迁,目前大多数有关这个方面的文章都还是基于lua5.1版本,有一定的滞后性。因此本文通过参考当前的5.3.4版本的Lua源码,希望对Lua的GC算法有一个较为详尽的探讨。 L…

【LeetCode】每日一题 2023_11_28 设计前中后队列(数组/链表/双端队列)

文章目录 刷题前唠嗑题目:设计前中后队列题目描述代码与解题思路偷看大佬题解 结语 刷题前唠嗑 LeetCode?启动!!! 这道题的难度,才是我想象中的中等题的难度好吧,昨天那玩意对我来说还是太难了…

9个AI视频后期处理神器——Runway 全功能超详细使用教程(3)

前面2期内容,主要给大家重点介绍了Runway视频生成技术的核心产品功能板块Gen1、Gen2、FI使用教程,还没有看过的小伙伴可以回看往期文章。除了视频生成AI技术外,Runway还具有图片、视频后期处理30多项单个功能,例如视频修复、视频主…

封装可多选的组件(Autocomplete)

一。组件库Material UI 1.1 地址 https://v4.mui.com/zh/getting-started/installation/ 1.2 简介 自称世界上最受欢迎的React UI组件库(能看到这里的基本用法应该都清楚了,我就不重复了) 二。效果展示 三。代码展示 import React from reactimport { useField, us…

阿里云ACE认证之国际版与国内版对比!

大厂疯狂裁员,互联网行业迎来寒冬,技术人员被动陷入疯狂内卷。在愈加内卷的IT领域,“云计算”作为少有的蓝海,无疑是打工人未来实现职场提升、摆脱内卷的绝佳选择! 对于云计算行业的人来说,最值得考的肯定是…

rust-flexi_logger

flexi_logger 是字节开源的rust日志库。目前有log4rs、env_log 等库,综合比较下来,还是flexi_logger简单容易上手,而且自定义很方便,以及在效率方面感觉也会高,下篇文章我们来测试下。 下面来看下怎么使用 关注 vx gol…

jq+canvas:实现图片上传+裁剪+保存等功能

效果图 上传图片之前&#xff1a; 上传图片之后&#xff0c;点击放大/缩小后的效果&#xff1a; 裁剪之后的效果&#xff1a; 代码实现如下&#xff1a; 1.html部分 <input type"file" id"fileInput" accept"image/png, image/gif, image/j…

Python提取PDF表格(基于AUTOSAR_SWS_CANDriver.pdf)

个人学习笔记&#xff0c;仅供参考。 需求&#xff1a;提取AUTOSAR SWS中所有的API接口信息&#xff0c;用于生成C代码。 此处以AUTOSAR_SWS_CANDriver.pdf为例&#xff0c;若需要提取多个SWS文件&#xff0c;遍历各个文件即可。 1.Python包 pdfplumber是一款完全用python开…