CCC联盟数字车钥匙(七)——BLE连接流程

本文接上一篇CCC数字钥匙BLE概述,介绍BLE中相关连接流程的实现。

2、BLE流程

2.1 所有者配对连接建立

CCC中使用Bluetooth OOB(Out of Band, 带外)配对完成所有者配对、连接建立的流程。BLE设置分为以下两个子部分:

  • BLE链路层连接建立,以及BLE所有者配对GATT流
  • BLE配对和加密设置

一辆不支持安全测距的车辆不应允许通过BLE接口建立与所有者的配对,也不应广播所有者配对广播。所有者配对应通过NFC启动,以及完成相关的BLE激活流程。

2.1.1 BLE链路层连接建立和BLE所有者配对GATT工作流

在这里插入图片描述

建立流程由车辆端使用CCC_DK_UUID进行广播(ADV_IND)。车辆链路层应处于广播状态,同时其过滤策略应设置为接受所有连接请求。
而设备端则开启扫描,设备端应处于扫描状态,其过滤策略设置为接受所有广播。一旦设备链路层接收到一个广播,由HOST处理,Device Host检查收到的广播载荷中是否包含CCC_DK_UUID。如果包含CCC_DK_UUID,则通知用户,请求配对。若用户接受所有者配对请求,则提供配对秘钥,创建BLE连接。当收到下一个车端链路层的广播帧时,设备链路层发送CONNECT_IND,发起一个连接请求(图中步骤16)。至此,LE增强连接完成。
在这里插入图片描述
在图19-2中,设备Host(作为GATT客户端)与车辆主机(充当GATT服务器)发起服务发现,以获取DK服务和DK服务UUID_SPSM特征(Simplified Protocol/Service Multiplexer, SPSM),以建立DK服务的L2CAP连接。
图中,设备从车辆GATT服务器读取SPSM值。

2.1.2 BLE配对和加密设置

在这里插入图片描述在这里插入图片描述
设置流程从BLE安全OOB配对准备开始。

步骤1:主节点初始化配对,包括配对请求(设备发起)与配对应答(车端应答)。
步骤1a/1b:交换公钥(Pka/Pkb);
步骤2:安全连接秘钥生成;通过随机数进行配对与确认;配对过程中,需要计算Long Term Key(LTK);检查DHKey。
配对DHKey检查成功之后,主机设备开始加密,将设备和车辆添加到解析列表。

在此流程中,设备已生成公钥(Pka)和私钥(SKa),并通过安全通道收到车辆的蓝牙地址(BTAddrB),车辆的承诺值(Cb)和随机数(rb)。
车辆已生成其公钥(PKb)和私钥(SKb),并通过安全通道收到设备的蓝牙地址(BTAddrA)、设备的承诺值(Ca)和随机数(ra)。

2.1.3 所有者配对广播

对于所有者配对,仅支持Legacy LE 1M PHY。ADV_IND需要按照Section 2.3.1.1 Volume 6 Part B。
事件类型:无指向可连接和可扫描。
ADV_IND中包含广播地址和广播数据,如下所示,其中广播地址(Advertising Address, AdvA)为6字节。
在这里插入图片描述
其中IntentConfiguration用于设备上允许单独的用户流(user flow),具体取决于用户是否已经在车辆中开始车主配对。


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

1、CCC联盟——UWB PHY
2、CCC联盟数字车钥匙(一)——UWB MAC概述
3、CCC联盟数字车钥匙(二)——UWB MAC时间网格
4、CCC联盟数字车钥匙(三)——UWB MAC时间网格同步及Hopping
5、CCC联盟数字车钥匙(四)——UWB MAC协议
6、CCC联盟数字车钥匙(五)——UWB MAC STS索引
7、CCC联盟数字车钥匙(六)——BLE连接概述

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

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

相关文章

UI自动化Selenium find_elements和find_element的区别

# 如果获取的element是list,那么需要用find_elements方法;此方法会返回list,然后使用len() 方法,计算对象的个数; # find_element方法返回的不是list对象,所以导致没办法计算对象个数 # 1.返回值类型不同…

oops-framework框架 之 初始了解(一)

引擎:CocosCreator 环境: Mac Gitee: oops-framework 简介 oops-framework是由作者dgflash编写,基于CocosCreator 3.x而实现的开源框架。 该框架以插件形式存在,主要目的是为了降低与项目的耦合,并且通过插件内部的…

LeetCode | 100. 相同的树

LeetCode | 100. 相同的树 OJ链接 判断两个节点是否等于空,两个都等于空就直接返回true如果一个等于空,另一个不等于空,说明false然后再判断两个树的值是否相等最后递归p的左,q的左,p的右,q的右 bool isS…

仿真的整体框架和类图设计

之前的写的模拟代码没有模块,没有对象,写的逻辑结构也很混乱。我花了些时间进行整理,首先所有的类如下图 在管理类中有统一的管理类的接口 ,提供所有管理类的虚拟初始化和关闭方法 然后事件的管理类 我希望在这个类中管理所有的脉…

K7系列FPGA多重启动(Multiboot)

Xilinx 家的 FPGA 支持多重启动功能(Multiboot),即可以从多个 bin 文件中进行选择性加载,从而实现对系统的动态更新,或系统功能的动态调整。 这一过程可以通过嵌入在 bit 文件里的 IPROG 命令实现上电后的自动加载。而…

牛客剑指offer刷题模拟篇

文章目录 顺时针打印矩阵题目思路代码实现 扑克牌顺子题目思路代码实现 把字符串转换成整数题目思路代码实现 表示数值的字符串题目思路代码实现 顺时针打印矩阵 题目 描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如&#xf…

机器学习笔记 - 基于百度飞桨PaddleSeg的人体分割模型以及TensorRT部署说明

一、简述 虽然Segment Anything用于图像分割的通用大模型看起来很酷(飞桨也提供分割一切的模型),但是个人感觉落地应用的时候心里还是更倾向于飞桨这种场景式的,因为需要用到一些人体分割的需求,所以这里主要是对飞桨高性能图像分割开发套件进行了解和使用,但是暂时不训练…

Java 线程同步和通信

Android 11 废弃了AsyncTask 线程 Thread: 通过start 开启 源码: start0 native方法 通过虚拟机跟操作系统交互 进程和线程区别: 进程是操作系统的独立区域,各个区域互不干扰,一个进程可以有多条线程同时工作,进程大于线程,线程依赖进程,线程间可以共享资源 Runnable: 接口…

matlab操作方法(二)——基本作图

matlab提供很多灵活的二维作图功能函数。这些作图函数分为3类:图形处理、曲线和曲面图的创建、注释和图形特性。作图函数虽多,但语法大致相同 在 MATLAB 中,figure 函数用于创建或选择图形窗口。 matlab figure函数的用法_matlab中figure-C…

89基于matlab的人工蜂群和粒子群混合优化的路径规划算法

基于matlab的人工蜂群和粒子群混合优化的路径规划算法,起点和终点确定的前提下,在障碍物中寻找最佳路径。数据可更换自己的,程序已调通,可直接运行。 89人工蜂群和粒子群混合优化 (xiaohongshu.com)https://www.xiaohongshu.com/e…

用JavaScript的管道方法简化代码复杂性

用JavaScript的管道方法简化代码复杂性 在现代 web 开发中,维护干净有效的代码是必不可少的。随着项目的增加,我们功能的复杂性也在增加。然而,javaScript为我们提供了一个强大的工具,可以将这些复杂的函数分解为更小的、可管理的…

【 RTTI 】

RTTI 概念: RTTI(Run Time Type Identification)即通过运行时类型识别,程序能够使用基类的指针或引用来检 查着这些指针或引用所指的对象的实际派生类型。 原因: C是一种静态类 型语言。其数据类型是在编译期就确定的,不能在运…

MySQL的系统信息函数

系统信息函数让你更好的使用MySQL数据库 1、version()函数 查看MySQL系统版本信息号 select version();2、connection_id()函数 查看当前登入用户的连接次数 直接调用CONNECTION_ID()函数--不需任何参数--就可以看到当下连接MySQL服务器的连接次数,不同时间段该…

(数据结构)顺序表的插入删除

#include<stdio.h> #include<stdlib.h> #define MAX 10 typedef struct {int data[MAX];int lenth; }List; //初始化 void CreateList(List* L) {L->lenth 0;for (int i 0; i < MAX; i){L->data[i] 0;} } //插入 int ListInsert(List* L,int i,int e) …

ESP32-Web-Server编程- 实现 Web 登录网页

ESP32-Web-Server编程- 实现 Web 登录网页 概述 是时候实现更加安全的网页了。登录机制是最简单的控制网页访问权限的方法。 需求及功能解析 本节演示如何在 ESP32 上部署一个 Web 服务器&#xff0c;并建立登录页面的机制&#xff0c;用户可以实现登录、登出的功能&#x…

算法题-统计字符个数(Python题解)

文章目录 前言思路code 前言 先前笔试做了一道算法题&#xff0c;题目是这样子的&#xff1a;&#xff08;PS&#xff1a;不用惊讶&#xff0c;是的&#xff0c;我不打算24今年考研了&#xff0c;一是&#xff0c;当初填报的学校不是我想要去的学校&#xff08;当初想一战成硕…

【HuggingFace Transformer库学习笔记】基础组件学习:Tokenizer

基础组件——Tokenizer &#xff08;1&#xff09;模型加载 from transformers import AutoTokenizersen "弱小的我也有大梦想!" # 从HuggingFace加载&#xff0c;输入模型名称&#xff0c;即可加载对于的分词器 tokenizer AutoTokenizer.from_pretrained("m…

华为电视盒子 EC6108V9C 刷机成linux系统

场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 家里装宽带的时候会自带电视盒子&#xff0c;但是由于某些原因电视盒子没有用&#xff0c;于是就只能摆在那里吃土&#xff0c;闲来无事&#xff0c;搞一下 问题描述 提示&#xff1a;这里描述项目中遇到…

【数据结构和算法】找出叠涂元素

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 三、代码 四、复杂度分析 前言 这是力扣的2661题&#xff0c;难度为中等&#xff0c;解题方案有很多种&…

Linux 系统是如何收发网络包的?(计算机网络)

一、Linux 网络协议栈 如下是TCP/IP四层网络模型&#xff0c;实际上Linux 网络协议栈与它相似 下图是Linux 网络协议栈 二、Linux 接收网络包的流程 1.网卡是计算机里的一个硬件&#xff0c;专门负责接收和发送网络包&#xff0c;当网卡接收到一个网络包后&#xff0c;会通过…