ESP32的蓝牙架构你真的了解吗?来,蓝牙博主给你安排~
Posted Wireless_Link
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP32的蓝牙架构你真的了解吗?来,蓝牙博主给你安排~相关的知识,希望对你有一定的参考价值。
零. 声明
本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:
第一篇:ESP-IDF基本介绍,主要会涉及模组,芯片,开发板的介绍,环境搭建,程序编译下载,启动流程等一些基本的操作,让你对ESP-IDF开发有一个总体的认识,比我们后续学习打下基础!
第二篇:ESP32-IDF外设驱动介绍,主要会根据esp-idf现有的driver,提供各个外设的驱动,比如LED,OLED,SPI LCD,TOUCH,红外,Codec ic等等,在这一篇中,我们不仅仅来做外设驱动,还会对常用的外设总线做一个介绍,让大家知其然又知其所以然!
第三篇:目前比较火热的GUI LVGL介绍,主要会设计LVGL7.1,LVGL8的移植介绍,并且也会介绍各个组件,知道原理后,最后,我们会推出一款组态软件来构建我们的GUI,来提升我们的效率!
第四篇:ESP32-蓝牙,熟悉我的,应该都知道,我即使从事蓝牙协议栈的开发的,所以这个是我们独有的优势,在这一篇章,我们会提供不仅仅是蓝牙应用方法的知识,也会应用结合蓝牙底层协议栈的理论,让你彻底从上到下打通蓝牙任督二脉!
第五篇:Wi-Fi介绍,熟悉我的,应该也知道,我们也做过一款sdio wifi的驱动教程板子,所以在wifi这方面我们也是有独有的优势,在这一篇章,我们同样不仅仅提供Wi-Fi应用方面的知识,也会结合底层理论,让你对Wi-Fi有一个清晰的认知!
另外,我们的教程包括但是不局限于以上篇章,为了给你一个更好的导航,以下信息尤其重要,请详细查看!!
------------------------------------------------------------------------------------------------------------------------------------------
蓝牙交流扣扣群:539357317
微信公众号↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
------------------------------------------------------------------------------------------------------------------------------------------
在前面的章节我们已经看过了市面的蓝牙产品架构以及蓝牙芯片的架构。
我们来看下ESP32是怎样的架构?
一.蓝⽛应⽤结构
蓝⽛是⼀种短距通信系统,其关键特性包括鲁棒性、低功耗、低成本等。蓝⽛系统分为两种不同的技术:经典蓝⽛(Classic Bluetooth) 和蓝⽛低功耗(Bluetooth Low Energy)。
ESP32 ⽀持双模蓝⽛,即同时⽀持经典蓝⽛和蓝⽛低功耗。
从整体结构上,蓝⽛可分为控制器(Controller) 和主机(Host) 两⼤部分:控制器包括了PHY、Baseband、Link Controller、Link Manager、Device Manager、HCI 等模块,⽤于硬件接⼝管理、链路管理等等;主机则包括了L2CAP、SMP、SDP、ATT、GATT、GAP 以及各种规范,构建了向应⽤层提供接⼝的基础,⽅便应⽤层对蓝⽛系统的访问。主机可以与控制器运⾏在同⼀个宿主上,也可以分布在不同的宿主上。ESP32 可以⽀持上述两种⽅式,下图罗列了⼏种典型应⽤结构:
这个架构很简单,其实你们好好看我之前的前面两篇文章,很容易能够理解透彻,他一共分为3个场景,总结如下:
场景⼀(ESP-IDF 默认):在ESP32 的系统上,选择BLUEDROID(最新的还支持Nimble) 为蓝⽛主机,并通过VHCI(软件实现的虚拟HCI 接⼝)接⼝,访问控制器。此场景下,BLUEDROID 和控制器都运⾏在同⼀宿主上(即ESP32 芯⽚),不需要额外连接运⾏蓝⽛主机的PC 或其它主机设备。
场景⼆:在ESP32 上运⾏控制器(此时设备将单纯作为蓝⽛控制器使⽤),外接⼀个运⾏蓝⽛主机的设备(如运⾏BlueZ 的Linux PC、运⾏BLUEDROID 的android 等),当然还可以在单片机下跑Host(比如我自己写的协议栈),此场景下,控制器和主机运⾏在不同宿主上,与⼿机、PAD、PC 的使⽤⽅式⽐较类似。
场景三:此场景与场景⼆类似,特别之处在于,在BQB(或其它认证)的控制器测试下,可以将ESP32 作为DUT,⽤UART 作为IO 接⼝,接上认证测试的PC 机,即可完成认证。
我们看到这个架构,就看到了无限可能性,可玩性比较高,比如:
1)在场景一中可以通过默认的Bluedroid作为Host,来学习下整个蓝牙Host,也顺便看下Bluedroid
2)在场景一中可以通过默认的nimble作为Host,来学习下整个蓝牙Host,也顺便看下nimble
3)在场景二中,我们可以用第三方协议栈来作为Host,ESP32作为单Controller,来扩展各个你想要的profile功能
4)在场景一中把用自己的协议栈或者第三方协议栈替换掉原有的Host
但是可惜的是:无论怎样的架构,你都玩不了bluetooth controller,因为他是闭源的,并且技术参考手机也不会开放rf章节,所以这点比较可以,不像nrf那样可玩性更高·,当时更高的可玩性意味着复杂度更高,所以不要好高骛远,踏踏实实先学好Host吧!!
二.蓝牙menuconfig
1.整个蓝牙的开关
2.Bluetooth controller的menuconfig
2.1 controller mode
也就是bluetooth controller的模式,配置地方如下图:
一共有三种模式:
BLE only:controller仅仅有BLE功能,也就是低功耗蓝牙功能
BR/EDR only:controller仅仅有BR/EDR功能,也就是传统蓝牙功能
Bluetooth Dual Mode:controller支持双模蓝牙功能。
2.2 BLE最大连接数
配置如下,每增加一个连接,就会用到1KB DRAM
2.3 BLE controller跑在哪个核
分别可以跑在core 0或者core 1中
2.4 HCI接口选择
可供选择有两个:
一个是VHCI(也就是第一小节的场景一),也就是说Host跟Controller都跑在ESP32中。
一个是UART H4(也就是第一小节的场景二),也就是controller跑在ESP32中,Host跑在额外的主控中
3.Bluetooth Host的menuconfig
选择是Bluedroid还是nimble的地方
后续我们再根据蓝牙每个功能我们再一一介绍吧!!
以上是关于ESP32的蓝牙架构你真的了解吗?来,蓝牙博主给你安排~的主要内容,如果未能解决你的问题,请参考以下文章
足够你学习ESP32,提供史上最全的ESP32教程(驱动/蓝牙/Wi-Fi/LVGL/Arduino...)
足够你学习ESP32,提供史上最全的ESP32教程(驱动/蓝牙/Wi-Fi/LVGL/Arduino...)