
蓝牙
文章平均质量分 87
逐梦,无惧!
心有多大舞台就有多大!!
展开
-
蓝牙系列四:开源蓝牙协议BTStack框架分析
同样,上面的各个层都可以处理自己感兴趣的数据,因此都可以提供处理数据的函数。这个main函数处于不同的文件里面(不同的硬件接口以及操作系统,main.c所处的文件都是不同的。不同文件中的main.c中的main函数回去操作不同的硬件。然后再去创建一个循环。在循环里面,从蓝牙模块里面获取数据,然后依次调用各个层次提供的处理函数,在这些处理函数里面它会分辨那些数据,如果对数据感兴趣就去处理,不感兴趣就不管。1.main函数会调用操作系统相关的代码(下图中的①)、硬件接口相关的代码(下图中的②),进行初始化。原创 2024-03-06 10:58:06 · 1398 阅读 · 0 评论 -
蓝牙系列十七:BLE安全机制--地址类型与LL层设备过滤
上一篇我们讲了BLE的安全机制,引入白名单和安全地址的感念,使用白名单来过滤安全设备是BLE种最简单的方法。这一篇我们来详细讲一下这些概念。原创 2024-03-19 10:32:33 · 1670 阅读 · 1 评论 -
蓝牙系列十六:BLE安全机制概述
蓝牙安全模型包括五个不同的安全特性:配对,绑定,设备鉴权,加密和消息完整性。配对:创建一个或多个共享密钥的过程绑定:保存配对中创建的密钥的行为,用于后续的连接,形成一个信任的设备对设备鉴权:验证两个设备有相同的密钥加密:消息保密性消息完整性:防止消息伪造原创 2024-03-19 10:27:34 · 1826 阅读 · 0 评论 -
蓝牙协议栈系列学习目录汇总(已完结)
蓝牙系列二、BLE协议各层的形象化理解。蓝牙系列一:初识蓝牙。原创 2024-03-19 11:15:10 · 956 阅读 · 0 评论 -
蓝牙系列第九:协议链路层(LL)分析
连接事件计数器为0时(一个事件对应一个channel),fn =0, hop=7----->fn+1= 7,从数组used中可以看出,fn+1是不能用的。因为used 数组中元素的个数为9,所以remappingIndex =7 mod 9 =7------->used[7]=35。连接事件计数器为1时,fn =7, hop=7----->fn+1=14,从数组used中可以看出,fn+1是不能用的。L2CAP的数据包很大时,可以拆分来多次发送,有起始包(LLID=01b)、延续包(LLID=10b)原创 2024-03-11 08:27:45 · 1435 阅读 · 0 评论 -
蓝牙系列十五:协议栈GAP层分析
Generic Access Profile(通用访问规范) 它在用来控制设备连接和广播,用于提供蓝牙设备的通用访问功能,包括设备发现、连接、鉴权、服务发现等等。GATT是建立连接后通信规范, 而蓝牙是通过GAP建立通信的。GAP 使你的设备被其他设备可见,并决定了你的设备是否可以或者怎样与合同设备进行交互。GAP 给设备定义了若干角色,其中主要的两个是:外围设备(Peripheral)和中心设备(Central)。 外围设备:这一般就是非常小或者简单的低功耗设备,用来提供数据,并连接原创 2024-03-13 08:48:04 · 2232 阅读 · 0 评论 -
蓝牙系列十四:协议栈GATT层分析
所谓“声明”也就是一个属性,这个属性的type为0x2800或0x2801,表示这是一个首要服务(Primary Service)或次要服务(Secondary Service)。一个Characteristic定义,从它的“声明”开始,到下一个Characteristic的声明结束,或是直到下一个Service的声明结束,或一直持续到最大的handle值。在BLE里,通过ATT层可以读写对端设备的属性,但是属性之间有什么联系、各个属性怎么组合起来提供服务,由上层GATT负责。原创 2024-03-12 18:44:52 · 1527 阅读 · 0 评论 -
蓝牙系列十三:协议栈L2CAP层
然后它也会构造一个头部,根据HCI层传入的handle得到access address(代表一个连接,也就是对端的设备), 它还会根据HCI中的PB构造一个header,header中的LLID设为10b,也就是代表了起始包,还会根据HCI中length构造header中的length。应用程序通过L2CAP传送数据给对方,不应该限制数据包的大小,但是蓝牙控制器是使用单片机来实现的,它里面的内存是有限的,较大的数据包传进来,它的内存就不够用了。收发室里面的人是医院的内部员工,它可以在医院内部来传动包裹。原创 2024-03-12 08:25:30 · 2359 阅读 · 0 评论 -
蓝牙系列十二:协议栈ATT层分析
这些检查结果之间有什么联系,它们组合起来体现了什么,化验室是不知道的,这些得由上层来负责。即把32位UUID的低96位去掉,就得到32位的UUID;ATT层构造好数据后,由下层的L2CAP发给对端设备。L2CAP层是收发室,它怎么知道这些数据是发给对端设备的ATT层?通过ATT层可以读写对端设备的属性,但是属性之间有什么联系、各个属性怎么组合起来提供服务,由上层GATT负责。ATT层负责去获得对端设备的属性,去读写对端设备的属性,如何读取对端设备的属性呢?读写对端设备的属性,就是ATT的关键词。原创 2024-03-12 08:03:52 · 837 阅读 · 0 评论 -
蓝牙系列十一:HCI层的数据格式
Controller就是一个芯片,它封装了LL层、PHY层那些复杂的操作;Host不需要理解芯片内部复杂的操作,只需要遵守Controller的规范,向它提供command,从它获得event,与它交互acl data。HCI层跟LL层的关系:a. 有些HCI command只是用来设置本地Controller,不导致无线传输b. 有些HCI command会导致LL层发出各类广播包, 比如“LE Set Scan Enable Command”在主动扫描时会导致LL层发出SCAN_RE原创 2024-03-11 09:31:57 · 1289 阅读 · 0 评论 -
蓝牙系列七:开源蓝牙协议栈BTStack数据处理(Wireshark抓包分析)
hci_initializing_run()函数内部,会根据hci_stack->substate等于HCI_INIT_SEND_RESET而发出复位命令,并令substate等于HCI_INIT_W4_SEND_RESET,这表示等待收到该命令的回复信息。hci_initializing_event_handler将调用hci_initializing_next_state(),把subsate设置为HCI_INIT_SEND_READ_LOCAL_VERSION_INFORMATION。原创 2024-03-06 11:23:37 · 1573 阅读 · 0 评论 -
蓝牙系列六:最简单的开源蓝牙协议BTStack框架代码分析(2)
hci_register_sco_packet_handler就是真接设置hci_stack->sco_packet_handler。btstack_data_source_t结构体中的process函数是数据处理的起点,该“起点”会调用hci.c中的packet_handler函数。各个句柄对应的处理函数,是该句柄数据的处理起点,它将会调用上面各层提供的处理函数。2) 并调用btstack_run_loop_add_data_source把这个结构体告诉btstack_run_loop,原创 2024-03-06 11:19:52 · 1564 阅读 · 2 评论 -
蓝牙系列五:最简单的开源蓝牙协议BTStack代码分析(1)
对于蓝牙协议栈的理解,最好的办法是找一个最简单的开源协议栈进行学习,BTStack整个协议栈都是C语言编写,非常适合刚入门的同学来学习借鉴。原创 2024-03-06 11:13:20 · 2671 阅读 · 0 评论 -
蓝牙系列一:初识蓝牙
1、协议栈模型如下图,在图中,它将蓝牙协议栈分为好几层,比如说物理层、链路层等等。蓝牙采用了2.4G ISM频段。蓝牙中无线信道的划分,对于BLE低功耗蓝牙,它将。蓝牙技术分经典蓝牙(Classic BT)和低功耗蓝牙(BLE),2.4GHZ频率的周围划分出了0到39,总共40个信道。,其他信道为数据信道,也就是建立链接后使用的信道)。37/38/39信道为广播信道。原创 2024-03-06 09:29:57 · 1114 阅读 · 0 评论 -
蓝牙系列三:BLE协议栈各层数据格式解析
这个B部门的人一看到数据包有A这个头部,就知道数据包是发给A部门的,于是就将for A2'的数据包取出来,由A部门的派件员根据里面的信息发给A2',这样A2'就收到了甲公司中A1发给它的数据包了。,由快递员发给乙公司的B部门。B部门一看这个数据包就是发给本部门的人,于是它就直接看了看这个数据包,哦是发给B2’,于是就发给了B2'通过对公司中上下部门传送数据包的流程大概能知道A、B部门数据包的格式。对方在收到数据包的时候,首先根据头部信息进行解析,它是发给哪一层的,确定了哪一层之后,它再去确定数据的格式。原创 2024-03-06 10:21:37 · 1680 阅读 · 1 评论 -
蓝牙系列二:BLE协议各层的形象化理解
在客户端手机这边需要定义如何发现服务,如何发现服务里面的特性,读写服务里面的特性。https://blog.youkuaiyun.com/caodaxia/article/details/78567996,描述了一个真实的蓝牙设备,里面有24个属性,这24个属性如何组合起来提供服务呢?客户端手机想去读取某个属性,它需要利用ATT这一层来发起请求,请求的数据需要经过L2CAP层以及下面的几层到达服务端的L2CAP层。在这里还要引入一个概念,从L2CAP传过来的数据包可能很大,此时就需要分段,把经过分段的数据传给LL层。原创 2024-03-06 09:38:47 · 1016 阅读 · 0 评论