![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
蓝牙ble4.2
文章平均质量分 55
通过wireshark安装nordic ble sniffer插件,抓蓝牙ble各种数据包,学习蓝牙。
freemote
这个作者很懒,什么都没留下…
展开
-
【BLE 5.3无线MCU CH582】2、MounRiver IDE初体验
MounRiver IDE原创 2023-03-17 10:50:50 · 1302 阅读 · 0 评论 -
【BLE 5.3无线MCU CH582】1、初识CH582开发板(开箱)
CH582板子原创 2023-03-17 10:52:02 · 1710 阅读 · 0 评论 -
蓝牙ble学习开发资料
1、蓝牙核心规范这个是蓝牙官方的文档,也是最权威的文档,所有开源的、闭源的蓝牙协议栈都是根据这个展开的,为了对比学习,我收集了从v4.0到v5.3的文档,ble也是从v4.0开始支持的。2、蓝牙核心规范补充协议可以认为是补丁,这里是最新的v10。3、蓝牙官方标准Profile与service这里面的文档也是来自蓝牙官方,官方规定了一些常见的profile和serivice文档,如心率、电池、设备信息等。4、几款ble调试手机app个别需要科学上网,才能下载。使用教程:几款常用的ble.原创 2021-12-28 13:53:52 · 1053 阅读 · 1 评论 -
ble功耗优化——连接参数更新
为什么要更新连接参数?从设备一般是电池供电的,要想让从设备的电池使用寿命更长,就可以更新连接,减少发包间隔,所以就是为了优化功耗。连接参数都有什么?“连接参数更新请求”命令可以让从设备更新链路层的连接参数,这些连接参数包括连接事件间隔(从设备希望主设备允许的发送数据包的频率)、从设备延迟(从机设备能够忽略主设备的连接事件的最大值)、监控超时等。连接参数更新过程可以看出:由从机发起连接参数更新请求(Connection Parameter Update Request)(L2CAP层),主机返回连原创 2021-11-18 19:37:58 · 874 阅读 · 0 评论 -
ble提高数据传输量——MTU交换
1、ATT_MTU默认大小可以看出对ble设备,ATT_MTU的默认大小是23字节,换言之,如果不修改MTU大小的,那么一包数据最多发送23个字节。2、为什么要交换MTU我们知道ATT_MTU的默认大小只有23,幸运的是,ATT层是支持交换MTU,因此我们可以通过交换MTU的大小可以数据提高吞吐量。3、MTU交换过程可以看出:MTU交换由客户端发起请求,参数中携带Client Rx MTU的大小服务器回复,参数中携带Server Rx MTU的大小,最终服务器和客户端使用Client Rx M原创 2021-11-09 20:25:12 · 4079 阅读 · 0 评论 -
几款常用的ble调试app(nRF Connect、BLE调试助手、LightBlue)
这里分享3个用的比较多的ble调试app1、nRF Connect这个是nordic官方出的,在各大应用商店,均可以搜索下面,界面全是英文的,原创 2021-10-27 10:52:01 · 26617 阅读 · 0 评论 -
CH579实现不可连接的非定向广播包
1、广播包格式参考ble4.2不可连接的非定向广播包详解(ADV_NONCONN_IND)一文。2、交互过程可以看出,ADV_NONCONN_IND过程只有广播,不会有其他包。3、代码实现3.1、主框架int main( void ) {#if (defined (HAL_SLEEP)) && (HAL_SLEEP == TRUE) GPIOA_ModeCfg( GPIO_Pin_All, GPIO_ModeIN_PU ); GPIOB_ModeCfg( GPIO_P原创 2021-08-04 19:52:42 · 750 阅读 · 0 评论 -
ble4.2串口透传综合速率测试
在CH579实现蓝牙(ble4.2)串口透传的基础上测试发送和接收的速率。为了最大限度的提高速率,设置MTU为最大,对于CH579来说ATT_MTU最大为247。在电脑端使用USB转串口,发送和接收串口数据,串口使用115200波特率;设置蓝牙每包240字节。1、发送速率测试数据流向:电脑串口----->CH579----->手机。从上面图可以看出,发送和接收的数据量一致,实时速度可以达到1440 B/s,同时也应该注意串口发送间隔设置为了150ms。2、接收速率测试数据流向:原创 2021-09-09 16:45:28 · 1700 阅读 · 5 评论 -
基于CH579实现蓝牙(ble4.2)串口透传
1、整体框图实现思路:CH579作为外部设备(Peripheral),串口接收(RX)来自外部mcu的数据,通过蓝牙(ble4.2)发送到中心设备(Center)(上图中是手机),通过蓝牙接收来自中心设备的数据,然后通过串口发送(TX)到外部mcu。2、串口透传服务ble是通过特征值传输数据的,因此串口透传服务至少需要两个特征值;一个用于发送数据,一个用于接收数据;为了提高数据吞吐量,发送和接收都不使用ack;因此CH579主动发送数据到手机,可以用notify,手机发送数据到CH579,可以用wr原创 2021-09-09 11:10:32 · 5903 阅读 · 10 评论 -
ble4.2一次最多能传输多少字节?
1、链路层数据包格式可以看出PDU(协议数据单元)字段长度在2-257字节之间。2、数据通道PDU可以看出,数据通道PUD包含三部分,其中:Header:包头,2字节;Payload:数据,变长;MIC:数据一致性校验,4字节。3、L2CAP层数据包格式可以看出,L2CAP层数据包包含三个部分,其中:Length:长度,2字节;Channel ID:信道ID,2字节;Information payload:变长。4、Attribute Protocol PDU格式可以看出,原创 2021-09-07 21:38:19 · 2827 阅读 · 1 评论 -
基于CH579实现蓝牙(ble4.2)控制led亮灭
1、特征分析控制led亮灭:通过对一个特征值写来实现;获取led状态:通过对一个特征值读来实现。2、控制led亮灭服务要实现特征值的读写,必须要有服务,特征声明,特征值声明。3、属性表定义static gattAttribute_t ledAttrTbl[] = { // 服务,主要服务 { { ATT_BT_UUID_SIZE, primaryServiceUUID }, /* type */ GATT_PERMIT_READ,原创 2021-09-01 16:02:11 · 1581 阅读 · 0 评论 -
CH579 TMOS调度学习
以CH579的广播例程学习TMOS,广播例程在SDK中的位置如下:CH579EVT\EVT\EXAM\BLE\Broadcaster。1、TMOS简介TMOS 系统时钟单位为 625us,以 RTC 为基准得到所有需要系 统的时间;TMOS基于时间片调度,不支持抢占式。2、API说明注册一个 TMOS 回调函数,并分配 IDextern tmosTaskID TMOS_ProcessEventRegister( pTaskEventHandlerFn eventCb );系统时钟,默认使原创 2021-08-04 19:18:35 · 2116 阅读 · 0 评论 -
CH579实现一个最小外围设备(Peripheral)
本文基于CH57X实现一个最小外围设备,在官方历程Peripheral的基础上精简。1、main函数int main( void ) {#if (defined (HAL_SLEEP)) && (HAL_SLEEP == TRUE) GPIOA_ModeCfg( GPIO_Pin_All, GPIO_ModeIN_PU ); GPIOB_ModeCfg( GPIO_Pin_All, GPIO_ModeIN_PU );#endif#ifdef DEBUG GPIOA_S原创 2021-08-24 16:12:28 · 1186 阅读 · 2 评论 -
一文学会使用nRF Sniffer、Wireshark抓蓝牙ble包
1、安装python安装完成后,打开终端,输入python --version显示如下,即代表安装成功。2、安装pyserial库输入命令pip install pyserial ,出现Successfully字样,即表示安装完成。3、安装wireshark关键步骤截图如下,其他点击“Next”即可安装成功。4、下载nRF-Sniffer-for-Bluetooth-LE工具下载地址:https://www.nordicsemi.com/Products/Development-t原创 2021-08-21 10:21:56 · 8943 阅读 · 0 评论 -
一个CH579属性表分析
关于服务、特特征的声明,查看ble属性格式、权限与声明一文。1、属性定义CH57X中一条属性的定义如下:/** * GATT Attribute format. */typedef struct attAttribute_t{ gattAttrType_t type; //!< Attribute type (2 or 16 octet UUIDs) uint8 permissions; //!< Attribute permissions uint16 handl原创 2021-08-17 21:38:55 · 448 阅读 · 0 评论 -
ble属性格式、权限与声明
0、前言属性协议(ATT)有两个角色,Client和Server,ATT协议都是纯C/S架构,即Server存储属性,Client什么也不存储,Client主动发起请求读写Server端的属性,Server被动响应。但是服务端也有通知的能力,在服务端属性发生变化时,Server能够通知Client,这样避免了Client不停的Poll。1、属性分类BLE的属性类型是有限的,可以分为四大类。Primary Service(首要服务项)Secondary Service(次要服务项)Include(原创 2021-08-17 18:26:28 · 2555 阅读 · 1 评论 -
ble40个射频通道
射频通道,编号0-39,每个2M,分为广播通道和数据通道,广播通道是37,38,39,其余都是数据通道。原创 2021-08-09 20:52:07 · 656 阅读 · 0 评论 -
关于Generic Access(UUID:1800)和Generic Attribute(UUID:1801)两个服务
1、一些缩写字母的含义’ M '表示强制支持(用于配置文件中应使用的功能);’ O '表示可选支持(用于可在配置文件中使用的功能);’ C '表示条件支持(用于支持其他功能时应使用的功能);’ E’表示在概要文件角色中排除(用于可能支持的功能由单位负责,但绝不可用于profile角色);'N/A’表示不适用(在给定的上下文中不可能使用这个能力);‘C1’:如果服务器上的服务定义可以添加、更改或删除,则为强制;否则可选。2、GAP服务需求上面的LE表示BLE。可以看出,对于Periphera原创 2021-08-09 20:18:33 · 3429 阅读 · 0 评论 -
非定向可连接广播(ADV_IND)、扫描请求(SCAN_REQ)、扫描回复(SCAN_RSP)、连接请求(CONNECT_REQ)之间的关系
1、广播过程可以看出,在三个广播信道,各广播(ADV_IND)一次。2、广播与扫描请求、扫描回复之间的关系可以看出,在从机广播(ADV_IND)的时候,主机发出扫描请求(SCAN_REQ),从机回复扫描回复(SCAN_RSP)。主机(以手机为例)只有在收到扫描回复之后,才会在蓝牙列表显示从机。3、广播与连接请求之间的关系从机发出广播(ADV_IND),主机发起连接请求(CONNECT_REQ)。这里要注意,只有主机在收到扫描回复之后,才能发起连接。...原创 2021-08-05 11:40:06 · 1804 阅读 · 0 评论 -
ble4.2 GAP层四种角色
本文依照蓝牙核心规范Core_v4.2文档展开。可以看出GAP层定义了四种角色:Broadcaster :广播者,广播数据,不支持连接;Observer:观察者,接收广播数据,不支持连接;Peripheral:外围设备,也叫从机,只支持单一链接;Central:中心设备,也叫主机,支持多个连接。...原创 2021-08-04 21:09:15 · 505 阅读 · 0 评论 -
ble4.2广播数据类型
声明:1、这里要注意区分广播类型和广播数据类型,本文聊聊广播数据类型;2、本文依照蓝牙核心规范Core_v4.2、核心规范补充Css_v10、Generic Access Profile文档展开。广播数据结构可以看出广播数据格式由多个AD Structure 组成,每个AD Structure由3部分构成,Length、AD Type、AD Data组成,Length为1字节,表示AD Type、AD Data的总长度,现有的AD Type也都是一字节的广播数据类型在《Generic Acce原创 2021-08-03 12:31:45 · 4796 阅读 · 0 评论 -
ble4.2 ATT层包详解(Attribute Protocol)
L2CAP层用于BLE设备的CID可以看出BLE主要使用0x0004、0x0005、0x0006三个信道;0x0004用于ATT协议,0x0005用于L2CAP信令,0x0006用于安全管理。Attribute Protocol PDU格式Opcode:操作码;Attribute Parameters:ATT参数;Authentication Signature:身份验证签名。ATT层完整数据包Attribute Opcode取值ATT层抓包Read By Group Typ原创 2021-08-02 20:56:23 · 770 阅读 · 0 评论 -
ble4.2 L2CAP层信令通道包详解(SIGNALING PACKET FORMATS)
L2CAP层用于BLE设备的CID可以看出BLE主要使用0x0004、0x0005、0x0006三个信道;0x0004用于ATT协议,0x0005用于L2CAP信令,0x0006用于安全管理。L2CAP信令通道PDU格式Length:长度Channel ID:信道ID,0x0005标识BLE设备。命令格式Code:1字节,操作码;Identitier:1字节,ID;Length:2字节,长度;data:0-N字节。L2CAP层信通道完整包结构Code取值Connection原创 2021-08-02 20:25:45 · 667 阅读 · 0 评论 -
ble4.2链路层控制包详解(LL Control)
前言数据通道PDU,分为LL Data PDU和LL Control PDU,本文聊聊LL Control PDU。LL Control PDU格式Opcode :1字节,操作码,指示了Control PDU的不同类型;CtrData:0-26字节,控制数据。LL Control 完整包结构Opcode的取值LL_CHANNEL_MAP_REQ包PDULL_CHANNEL_MAP_REQ抓包LL_FEATURE_REQ包PDULL_FEATURE_REQ抓包...原创 2021-08-02 19:54:50 · 929 阅读 · 0 评论 -
ble4.2不可连接的非定向广播包详解(ADV_NONCONN_IND)
本文依照蓝牙核心规范Core_v4.2和核心规范补充Css_v10展开。1、ADV_NONCONN_IND包PDUAdvA:6字节,广播地址;AdvData:0-31字节,广播数据。2、广播数据格式可以看出广播数据格式由多个AD Structure组成,每个AD Structure由3部分构成,Length、AD Type、AD Data组成;Length为1字节,表示AD Type和AD Data的总长度;现有的AD Type也都是一字节的。3、ADV_NONCONN_IND完整包结构由原创 2021-07-29 20:23:02 · 5346 阅读 · 0 评论 -
ble4.2连接请求包详解(CONNECT_REQ)
本文依照蓝牙核心规范Core_v4.2和核心规范补充Css_v10展开。1、CONNECT_REQ包PDUInitA:初始地址,也就是主机的地址;AdvA:广播地址,也就是广播者的地址;LLData:LL 数据,本身由10个字段组成。2、LLData 字段格式AA: Access Address,接入地址;CRCInit:CRC校验;WinSize:传输窗口大小;WinOffset:传输窗口偏移;Interval:连接间隔;Latency:连接丛集延迟;Timeout:连接最大超原创 2021-07-29 19:49:43 · 1345 阅读 · 0 评论 -
ble4.2扫描回复包详解(SCAN_RSP)
本文依照蓝牙核心规范Core_v4.2和核心规范补充Css_v10展开。1、SCAN_RSP包PDUAdvA:6字节,广播地址;ScanRspData:0-31字节,扫描回复数据。2、扫描回复数据格式可以看出广播数据格式由多个AD Structure组成,每个AD Structure由3部分构成,Length、AD Type、AD Data组成;Length为1字节,表示AD Type和AD Data的总长度;现有的AD Type也都是一字节的。3、SCAN_RSP整包结构关于Pream原创 2021-07-29 19:14:05 · 2578 阅读 · 0 评论 -
ble4.2扫描请求包详解(SCAN_REQ)
本文依照蓝牙核心规范Core_v4.2和核心规范补充Css_v10展开。1、SCAN_REQ包PDUScanA:扫描者的地址;AdvA:收到的广播者的地址。2、SCAN_REQ整包结构关于Preamble、Access Address、Header、CRC等字段可参考图解ble4.2空口包(air interface packets)一文。3、SCAN_REQ抓包可以看出扫描请求SCAN_REQ包的payload只有两个地址,与ADV_IND是不同的。扫描请求一般由主机发出,比如手机。原创 2021-07-29 17:22:34 · 1687 阅读 · 0 评论 -
ble4.2可连接的非定向广播包详解(ADV_IND)
本文依照蓝牙核心规范Core_v4.2和核心规范补充Css_v10展开。1、ADV_IND包PDUAdvA:6字节,广播者的地址,公共或者随机地址,如果是公共地址则Header中的TxAdd为1,否则为0;AdvData:0-31字节,广播数据。2、广播数据格式可以看出广播数据格式由多个AD Structure组成,每个AD Structure由3部分构成,Length、AD Type、AD Data组成;Length为1字节,表示AD Type和AD Data的总长度;现有的AD Type也原创 2021-07-29 16:11:56 · 1809 阅读 · 0 评论 -
ble4.2空口包详解(air interface packets)
本文依照蓝牙核心规范Core_v4.2和核心规范补充Css_v10展开。1、 链路层包格式链路层包格式如下图,用于广播通道和数据通道。Preamble:前导码,一般情况下,协议栈会自动处理这个字段;Access Address:接入地址,广播通道的时候使用0x8E89BED6这个固定值,数据通道的时候使用随机值;PDU:协议数据单元,又分为广播通道PDU和数据通道PDU,其中前2个字节是数据头字段;CRC:检验,一般情况下,协议栈会自动处理这个字段。2、广播通道PDU2.1、广播通道PDU格原创 2021-07-28 21:34:32 · 3690 阅读 · 0 评论