自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(58)
  • 资源 (2)
  • 收藏
  • 关注

原创 GCC有哪些内建函数

GCC(GNU Compiler Collection)提供了许多内建函数(built-in functions),这些函数提供了一些特殊的功能或者是直接嵌入到生成的代码中的函数。这些内建函数通常是为了提高性能、支持特定硬件特性或者是实现一些底层的操作。

2024-07-06 13:36:44 304

原创 (二十九)深入理解蓝牙BLE之“5.1版本新特性”

BLE设备可通过一根天线发射包含测向信息的数据包(CTE信息)使其方向可被对等设备获取。对等设备含有一组射频开关和天线阵列,在接收含有测向信息的数据包时切换天线并采集IQ(I表示In-phase,即同相;Q表示Quardrature,即正交)信号样本。IQ信号样本用于计算天线阵列中不同天线上接收到的无线电信号的相位差,并最终基于相位差及天线阵列中天线间距信息估算出到达角(AoA)。

2024-05-10 10:44:47 394

原创 (七)深入理解Bluez协议栈之“再谈Bluez的访问接口”

头文件:lib/mgmt.hc文件:src/shared/mgmt.c示例:mgmt_send(data->mgmt, MGMT_OP_READ_INFO, data->mgmt_index, 0, NULL,缺点:如果应用层希望拿到比较细节的hci参数,那么mgmt无法提供,mgmt的相关资料不详细。优点:屏蔽了hci的细节,使用mgmt的command发送给kernel,一条指令可以解析成为很多条hci指令,对于L2CAP socket的兼容性好,peripheral示例就是这样实现的。

2024-01-17 12:12:55 289

原创 (六)深入理解Bluez协议栈之“GATT Client Profile”

本章节我们继续介绍GATT Client Profile的实现,参考的程序是tools\btgatt-client.c,需要注意的一点,在./configure时,需要添加 --enable-test --enable-testing才会编译该c文件,编译完成后,生成的可执行程序为btgatt-client。本文主要以btgatt-client运行时可能会出现的各种问题为切入点,介绍bluez的gatt client实现难点。对于btgatt-client的源码,无需过多介绍,都是开源的。

2024-01-16 18:10:16 422

原创 mips平台运行valgrind无法统计到内存泄漏

mips的板子上,运行了linux系统和应用程序(本公司业务程序),经过长时间观察,发现应用程序存在内存泄漏的情况,为了高效的分析出原因,交叉编译了valgrind到mips平台。使用mips工具链,交叉编译倒是没有太大的问题,无非就是浮点运算部分在编译时,提示寄存器未定义,编译不通过。解决方法是将valgrind的那部分浮点运算的寄存器代码注释掉就行了,就可以编译通过了。

2023-12-10 13:15:29 260 1

原创 交叉编译嵌入式linux平台的gdb工具

pc机系统:ubuntu系统目标板的编译工具链:arm-openwrt-linux-gcc嵌入式Linux目标板:R328。

2023-09-06 18:18:10 1159

原创 (五)深入理解Bluez协议栈之“GATT Server Profile”

上一篇介绍Bluez协议栈的了GAP Profile的实现,本章节我们继续介绍GATT Profile的实现,参考的程序是Peripheral。通过阅读它的实现代码可以发现,它广播部分是通过mgmt来实现的,然后在初始化完成之后,创建了一个L2CAP类型的socket,来负责实现GATT Server的逻辑。

2023-08-27 22:38:35 583

原创 (二十八)深入理解蓝牙BLE之“IOS系统蓝牙BLE的缓存问题和Attribute Caching机制”

原因是ios系统的蓝牙组件,缓存了Step3的“BLE业务2”的BLE服务,所以在Step5时,ios的蓝牙没有真正的通过空口包去读取智能设备的服务集,而直接将缓存的“BLE业务2”的BLE服务集,提供给了应用层,所以当重启手机,或者开关手机蓝牙后,ios系统的蓝牙组件清空了缓存,所以就又好用了,但是一旦进入“BLE业务2”,再进入“BLE业务1”,就又不行了。这里有一个模糊的点需要注意,换句话说,为什么“BLE业务1”的BLE服务集,ios系统的蓝牙不缓存,但是“BLE业务2”的BLE服务集却缓存了。

2023-06-15 17:19:00 1553

原创 (二十三)深入理解蓝牙BLE之“bluez协议栈与dongle”

想要快速的学习蓝牙知识,除了阅读官网的spec之外,还可以在Linux系统上插入外置的蓝牙Dongle,通过运行Bluez协议栈的实例程序来学习。当然除了Bluez协议栈的程序,zephyr系统也可以运行在Ubuntu系统之上,它也可以编译出来在ubuntu系统上运行的程序。

2023-05-21 21:42:00 496

原创 (九)深入理解蓝牙BLE之“安全管理Part2(SMP legacy pairing)”

本文介绍的内容工作在LE Security mode 1模式下。在4.2版本之前蓝牙BLE的配对方式还是只有legacy pairing方式的,这个方式是比较基础的,目前也有很多设备在使用它。本文只介绍legacy pairing的配对,新增的LESC的方式放在下一篇文章再介绍。配对:配对过程分为三个步骤(排除了建立连接和加密连接的两个过程的话),如图1:建立连接:

2023-05-21 15:39:19 737

原创 (四)深入理解Bluez协议栈之“GAP Profile”

bluetoothd守护程序:bluetoothd是bluez协议栈的最核心的内容,它作为linux系统的蓝牙服务运行在后台中,所有向访问蓝牙的应用,都可以作为一个client端,通过dbus通信协议来调用bluetoothd的接口函数。bluetoothctl是bluez协议栈提供的一个client端,它展示了如何通过dbus来访问bluetoothd后台进程,开发者可以通过它的代码来了解其中的细节。

2023-05-12 20:50:52 993

原创 (三)深入理解Bluez协议栈之“好用的小工具”

bluez的代码结构过于庞大,bluetoothd和bluetoothctl是比较核心的一对应用,bluetoothd是bluetooth service的核心守护进程,linux的系统设置里面都是访问的bluetoothd进程实现的,但是也带了一个问题,就是bluetoothd是通过dbus对外提供访问它的接口,屏蔽掉了mgmt/hci消息的处理细节,同时dbus是一个相对复杂的跨进程通信方式,因此上来就看bluetoothd进程的话,相当于由深入浅,会给开发者增加理解源码的困难,增加学习难度和成本。

2023-05-10 16:31:17 1399

原创 (一)深入理解Bluez协议栈之“源码目录介绍”

src:核心程序bluetoothd的源码位置。其中还包括了shared文件夹,该文件夹编译生成了一个共享库,供bluetoothd和其他程序使用(shared库是重点)。client:bluetoothctl程序的源码位置。mesh:mesh协议栈的源码位置,但是不包含proxy相关的功能。tools:hciattach,hciconfig,hcitool等工具的源码目录,如果打开--enable-testing,--enable-test的话,在该目录中,还会有相关的*-tester执行程序。

2023-05-05 18:08:05 1976

原创 (二)深入理解Bluez协议栈之“bluetooth socket通信”

因此我的建议是,如果应用程序的业务需要使用hci的原始数据,并且mgmt,dbus没有办法直接拿到,就不建议使用bluetoothd的方式来实现逻辑。创建socket之后,可以通过它收发hci命令和事件,也可以收发mgmt类型消息,还可以通过ioctl控制controller,这几种方式在Bluez的代码中都是存在的,这也导致了我们阅读Bluez协议栈的时候总是感觉特别乱,因为它没有统一的访问Controller的接口,目前从bluetoothd守护进程的实现来看,mgmt是bluez主推的一种方式。

2023-04-25 16:22:52 1256

原创 (汇总)深入理解Bluez协议栈

本系列文章主要介绍如何在Linux平台使用Bluez协议栈的工具,如何使用它的功能包括BLE和BLE Mesh,经典蓝牙暂不涉及。

2023-04-03 16:59:56 2162

原创 (三)深入理解Bluez协议栈之蓝牙Mesh的支持(3/5)

上一篇文章介绍了如何在mesh-cfgclient程序的代码基础上,新增代码以实现generic onoff model的功能,其中包括单控和组控,现在把patch的代码实现粘贴出来,方便读者参考,不过请勿转载本文涉及的代码,代码请勿分享给别人。

2023-03-23 16:13:23 359

原创 (二)深入理解Bluez协议栈之蓝牙Mesh的支持(2/5)

上文提到过,原生的bluez虽然支持了mesh的大部分功能,但是并没有提供通过广播控制mesh灯的示例代码(meshctl是通过proxy特性的gatt连接通路控制mesh灯的,这并不是一个搞mesh网关功能的工程师想要的示例代码),而mesh-cfgclient虽然提供了广播通路的消息收发能力,但是只有provision和config功能,说白了就是只实现了devkey处理的config消息,而没有实现generic model的普通mesh消息的功能。

2023-03-11 16:30:05 862

原创 (一)深入理解Bluez协议栈之蓝牙Mesh的支持(1/5)

BlueZ是Linux官方蓝牙协议栈。它是一个基于GNU General Public License (GPL)发布的开源项目,从Linux 2.4.6开始便成为Linux 内核的一部分。如果你是linux平台开发蓝牙的的工程师,肯定会接触过Bluez协议栈,hciconfig,hciattach,hciconfig等工具都是很好用的工具。

2023-02-26 16:23:57 2601 4

原创 (二十四)深入理解蓝牙BLE之“H5协议”

蓝牙产品在实际落地中,很多时候采用host+controller的通信模型,其中host负责实现协议栈profile是运行在主控cpu上的。controller为另外一颗单独的蓝牙芯片,负责蓝牙link layer的处理,两个芯片通过hci消息来交互数据。hci定义了消息格式,但只有消息格式是不完整的,还需要定义在什么硬件总线上传输数据。协议规定hci消息可以在usb总线上传输,也可以在uart协议上传输,还可以在sdio协议上传输,这部分是hci的传输层定义的内容。

2023-01-30 14:53:04 1589

原创 (二十六)深入理解蓝牙BLE之“无线通信的调制解调”

FSK,英文为Frequency Shift Keying,即一种允许根据数字调制信号改变载波频率而进行数据传输的数字调制技术,比如在BFSK中,二进制1和二进制0期间传输不同频率的载波信号。二进制 FSK (BFSK) 可以用以下数学方程式表示:s(t) = A* cos(2*π*f1*t) 对于二进制1s(t) = A* cos(2*π*f2*t)对于二进制 0。

2022-12-24 15:59:50 2774

原创 (十四)深入理解蓝牙BLE之“连接参数更新”

蓝牙BLE之更新连接参数。

2022-12-22 17:53:19 702

原创 (十五)深入理解蓝牙BLE之“扩展广播”

目录前言:4.2版本广播:5.0版本广播:实现原理:格式定义:广播事件类型:扩展广播:周期广播:广播集:HCI接口定义:4.2版本:5.0版本:周期广播:疑问与解答:BLE 5.0的扩展广播特性,网上的资料很少,我觉得写一点关于扩展广播的内容是有意义的。蓝牙BLE的4.2版本及其之前版本,有一个很大的限制,就是广播数据的payload太小了,只有31个字节。原因是广播物理信道(37,38,39)只有三个,并且大家都在使用,因此无法像数据信道那样,修改信道上传输的数据包的大小来解决问题(数据信道有一个好处,就

2022-12-02 23:49:38 2504

原创 (十三)深入理解蓝牙BLE之“Linux系统搭建zephyr和dongle的环境”

首先将dongle插入linux主机,长按reset按键,使dongle进入loader模式。查看/dev/目录下,dongle对应的tty*,我的dongle显示的是/dev/ttyACM0,然后修改tty的访问权限,使用nrfutil下载pts dongle的固件。网上很多介绍安装nrfutil的方法是github下载nordic的nrfutil源码,然后进行安装,我折腾了半天一直报python相关的错误,对python不是很熟悉,短时间内无法解决,索性直接使用pip安装nrfutil工具,亲测可用。

2022-10-10 12:13:21 1009

转载 (二十七)深入理解蓝牙BLE之“Nordic官网介绍”

目录1. Nordic官网及资料下载2. Nordic infocenter(文档中心) 3. Nordic Devzone(开发者论坛)4. Nordic GithubNordic官网主页:Nordic Semiconductor | Specialists in Low Power Wireless - nordicsemi.com,进入官网后,一般点击“Products”标签页,即进入Nordic产品下载首页,其独立链接为:Nordic产品下载链接:Explore our product portfo

2022-10-08 14:13:18 1171

原创 (三)深入理解蓝牙BLE之“信道管理”

AFH(advance frequence hopping)跳频算法仅适用于数据信道的选择(除去37,38,39信道的剩余37个信道),在两个设备建立连接的时候,在CONNECT_IND消息中(connect request)会带着hop值和Channel Map(一共37个bit,为1表示对应的channel可用,为0表示对应的channel不可用)。不一样的是跳频阶跃的值,跳频算法1的跳频阶跃值是固定的,也即是hop是一个固定的值,跳频算法2的跳频阶跃是通过算法计算出来的,也就是hop不是一个固定值。.

2022-08-31 22:00:10 3816

原创 (八)深入理解蓝牙BLE之“安全管理Part1(GAP)”

security mode 1的内容很容易理解,蓝牙BLE的GATT的Server端的数据,需要根据数据的重要性设置不同的安全等级,有四个安全等级可以选择,分别是不需要加密,使用非认证的配对方式生成的密钥进行加密,使用认证的陪对方式生成的密钥加密,使用LESC更高安全级别的陪对方式生成的密钥进行加密,其中这四个安全等级对应着四种不同安全级别的密钥,密钥的安全级别是根据配对的方式来确定的,最高的安全级别的配对是通过LESC来进行配对的,这种方式生成的密钥安全等级最高。签名数据包的格式如图6。.........

2022-08-07 18:37:14 2512

原创 (二十)深入理解蓝牙BLE之“官方Spec文档中涉及的缩写词”

蓝牙官方Corespec的文档中包含了很多表格,多数情况下表格中的信息是由专有的缩写词来表示的,这样使文档更加的简洁美观,不过也增加了初学者的理解难度,下面我以一个典型的含有缩写词的表格为例,解释每一个缩写字母的含义。图1。.........

2022-07-28 17:29:56 688 2

原创 (十九)深入理解蓝牙BLE之“低功耗蓝牙dongle”

目录什么是蓝牙dongle:为什么要买dongle:为什么最好买nordic的dongle:如何选择dongle:Nordic官方Dongle:国产兼容Dongle:蓝牙SIG官方pts dongle: 其他芯片方案dongle:datasheet下载地址:可以建议理解为一个usb接口的蓝牙Controller,可以理解为一个支持蓝牙的usb接口的“网卡”。一.我们在嵌入式开发的前期,可以通过在ubuntu系统上外接一个usb接口的蓝牙dongle,用dongle来当作controller,然后在ubunt

2022-07-05 00:11:08 8611

转载 pthread_cond_wait、pthread_cond_signal 不深入的思考

简介这篇文章主要介绍了pthread_cond_wait、pthread_cond_signal 不深入的思考以及相关的经验技巧,文章约26104字,浏览量341,点赞数8,值得推荐!  编程中,当涉及到多个线程需要访问同一个全局对象时,往往需要进行线程同步,而线程同步,往往是一个约定俗成的东西。比如说:1 //*.cpp2 int g_var ; pthread_mutex_t g_mtx ;3 static void * threadFunc(void * Par) {4 ..

2022-05-17 23:16:23 1424 1

原创 (十七)深入理解蓝牙BLE之“多主多从”

链路层状态机:就绪态:初始状态,是链路层状态机的中心状态,尽管是非活动状态,但最为重要。广播态:对外发送广播报文,因此一定要有发射机。同时也可以支持发送扫描响应,需要有接收机。广播态结束后,会停止扫描,进入就绪态;或者收到了连接请求,广播态的设备则进入连接态。广播态也是可以需要扫描能力的,为了接收到“扫描请求”。扫描态:处于该状态的设备能够接收广播信道的报文,有主动扫描和被动扫描的两个子状态,主动扫描支持发送“扫描请求”给广播态设备,并获取附加的扫描响应数据,被动扫描则仅接收广播报文

2022-05-08 18:59:37 5517

原创 (十八)深入理解蓝牙BLE之“BQB认证”

什么是蓝牙BQB认证?蓝牙认证也就是BQB认证(Bluetooth Qualification Body),简言之就是如果您的产品具有蓝牙功能并且在产品外观上要标明蓝牙标志,必须通过一个叫做BQB的认证。所有Bluetooth SIG成员公司完成认证之后均可使用蓝牙字标和徽标。蓝牙字标和徽标仅可用于通过蓝牙资格认证流程的相关产品。目前,蓝牙BQB认证测试只接受4.2(含)以上的版本。使用蓝牙品牌需要符合哪些条件?1、公司必须成为Bluetooth SIG的注册会员才能使用蓝牙品牌。2、会员公司

2022-05-01 15:20:34 4825

原创 (二十五)深入理解蓝牙BLE之“开源协议栈”

packetcraft:https://github.com/wzd5230/stacksbluez:http://www.bluez.org/Zephyr:https://github.com/zephyrproject-rtos/zephyr/tree/master/samples/bluetoothnimble:https://github.com/RT-Thread-packages/nimblebtstack:https://github.com/bluekitchen/btsta

2022-04-28 21:35:47 1256

原创 【嵌入式Linux系统 c语言代码调试】valgrind工具

解决内存泄漏:交叉编译和使用:Valgrind交叉编译_那时风起的博客-CSDN博客_valgrind交叉编译使用说明:valgrind用来检测内存泄漏时,只有在程序退出时才会有内存统计的输出,没有办法在程序运行过程中进行内存检测。如果程序根本无法正常退出,在退出时没有deinit逻辑,或增加一定的排查难度。但是即使是这样,ctrl + C强行使程序退出时,还是可以看到一些有用信息的,使用valgrind检测程序时,最好使用unstrip的程序,这样子可以看到符号信息。下面是我使用Ctrl

2022-04-25 15:37:18 123

原创 (七)深入理解蓝牙BLE之“蓝牙GATT服务”

目录引用:学习总结:uuid的定义:GATTService:GATT Unit:GATT Declarations:GATT Descriptor:GATT Characteristic and Object Type:引用:先读一下iini大佬的文章,很赞的一篇:低功耗蓝牙ATT/GATT/Profile/Service/Characteristic规格解读 - iini - 博客园学习总结:根据我的理解,以心率计为例子,详细说明其中一些细节:.

2022-04-20 22:24:15 9037 2

原创 (六)深入理解蓝牙BLE之“空口包格式”

本来想着写点什么,不过下面的文章写的已经很好了....详解BLE空口包格式—兼BLE Link layer协议解析 - iini - 博客园BLE蓝牙笔记----广播连接过程_shenlong1356的博客-CSDN博客_ble广播连接

2022-04-12 00:16:57 1141

原创 (十六)深入理解蓝牙BLE之“建立连接过程和连接失败分析”

背景:写完《深入理解蓝牙Mesh》的系列文章之后,我想把蓝牙BLE这一部分再深挖一下,本系列文章主要以最基础的4.2版本的蓝牙进行介绍,5.0的扩展广播和广播集,我们最后作为补充项,5.1,5.2,这个朋友写的BLE建立连接的文章,写的太好了,很清晰,我直接引用过来了,详解BLE连接建立过程_Jason.liu17的博客-CSDN博客建连失败分析:...

2022-04-11 14:08:13 4698 4

原创 (二)深入理解蓝牙BLE之“调制解调”

这部分内容,需要有《信号处理》和《高等数学》的基础,无奈我早已将所学一点不剩的还给了我大学的老师,转载一篇好文吧。【BLE学习笔记】之 BLE基础知识_临时工(Wireless-Tech)的博客-CSDN博客_ble调制方式......

2022-04-09 23:44:57 2584

转载 (一)深入理解蓝牙BLE之“蓝牙的发展历程”

强烈推荐这两篇文章:蓝牙技术|蓝牙的发展历程 - 哔哩哔哩蓝牙5.3来了!为何市面上无线耳机仍停留在4.0?4.2版本:较上一个版本相比,开始支持DLE,将gatt的单包数据,从23个字节的单包传输,提升到247个字节的单包传输。5.0版本:增加扩展广播基础能力,增加2M PHY的调制解调能力,1M的coded PHY,为BLE Audio作准备。5.1版本:支持室内定位基础能力支持。5.2版本: 支持BLE Audio,主要是LC3编码,与传统蓝牙耳机相比,有更好的音质,更低的..

2022-04-09 23:20:01 6561

原创 (汇总)深入理解蓝牙BLE协议

背景:前一段时间,编写了《深入理解蓝牙Mesh协议》的系列文章,现在打算趁着这股劲,再把蓝牙BLE的知识点整理起来,汇总为《深入理解蓝牙BLE协议》,知识点比较琐碎,不成什么系统,还是以往的风格,对一知半解的知识点,刨根问底的深入理解。BLE的相关文章,网上有很多,其中不乏有一些特别优秀的文章,因此有一些我就直接在附上原文链接的基础上,附加一些我的详细的理解和举例。前言:本系列文章主要以最基础的4.2版本的蓝牙进行介绍,5.0的“扩展广播”,2M PHY物理层和1M的Coded PHY等,我会最

2022-04-09 00:16:08 8103 2

原创 (八)深入理解蓝牙Mesh的安全性和优缺点

payload 太小;iv update问题;泛洪;seq number存储容易出错;

2022-03-31 00:17:17 3399

nRF.Mesh.-.V.-.3.1.5.apk

Mobile apps for Bluetooth mesh provisioning, configuration and control.

2021-05-21

蓝牙Core Spec 4.2~5.2

方便初学者下载官方资料。

2021-04-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除