草庐IT

详解蓝牙模块的分类

明解嵌入式 2023-03-28 原文

 摘要:蓝牙模块,是一种集成蓝牙功能的PCBA板,用于短距离无线通讯,蓝牙模块将芯片和外围硬件电路集成到一个PCB上,开发出所需的内置程序实现蓝牙功能的设备。可以通过相关接口和MCU控制设备进行数据传输、可实现蓝牙标准通信和组网。本文从蓝牙模块的不同的分类方式上去梳理蓝牙模块的类型,尽量的从分类方式的角度去了解蓝牙模块所具备一些特性和功能。

一、按照协议类型分

(1)经典蓝牙模块

        经典蓝牙模块(BT)泛指支持蓝牙协议4.0以下的模块,可以细分为:传统蓝牙模块和高速蓝牙模块。

        传统蓝牙模块:蓝牙诞生之初,使用的是BR基本速率技术,此时蓝牙的理论传输速率,只能达到721.2Kbps,在2004年推出支持蓝牙2.0协议的模块,在智能手机时代爆发,新增EDR蓝牙增强速率(Enhanced Data Rate)技术,通过提高多任务处理和多种蓝牙设备同时运行的能力,使得蓝牙设备的传输率可达 3Mbps,是蓝牙1.2技术传输速率的三倍。因此除了可获得更稳定的音频流传送和更低的耗电量之外,还可充分利用带宽优势同时连接多个蓝牙设备。

        高速蓝牙模块:高速蓝牙模块在2009年推出,主要代表是支持蓝牙3.0协议的模块,新增了High Speed技术,可以使蓝牙调用802.11 WiFi用于实现高速数据传输,传输率高达24Mbps,是传统蓝牙模块的8倍。

        经典蓝牙模块一般用于连续流式传输音频和数据量比较大的传输,如:语音、音乐、无线耳机、设备间文件传输、打印机、无线音箱等。

(2)低功耗蓝牙模块

        低功耗蓝牙模块(BLE)指支持2010年推出蓝牙协议4.0或更高的模块,最大的特点是成本和功耗的降低。蓝牙低功耗技术采用可变连接时间间隔,这个间隔根据具体应用可以设置为几毫秒到几秒不等。BLE技术采用非常快速的连接方式,因此可以处于“非连接”状态(节省能源),此时链路两端只有在必要时才开启链路,然后在尽可能短的时间内关闭链路。

        低功耗蓝牙应用于实时性要求比较高,但是低速率,低功耗的场景,如鼠标键盘、心率检测器和温度计等传感器设备、智能家居、智能穿戴这类不需要大数据量交互的场景中,非常适合物联网应用。

        综上所述,经典蓝牙并不是BLE的过时版本,经典蓝牙和低功耗蓝牙共存并用于不同的应用,这完全取决于每个人的不同需求。

二、按照对协议的支持分

        按照对蓝牙协议栈支持的数量可以分为单模模块和双模模块。单模和双模的概念是在BLE蓝牙出现之后才有的,我们应该根据成本、应用程序和功能选择需要的模块。

(1)单模模块

        单模模块就是指支持蓝牙某一种协议的模块,仅支持经典蓝牙(BT)协议或者低功耗蓝牙(BLE)协议。

(2)双模模块

        双模式模块是指同时支持经典蓝牙(BT)协议和低功耗蓝牙(BLE)协议的模块,可以运行两套协议堆栈。双模模块有两类:经典蓝牙(仅限数据)+ BLE和经典蓝牙(数据+音频)+ BLE。因此双模模块具有很好的灵活性和兼容性。

        蓝牙双模无疑是未来的主流。经典蓝牙功耗较大,4.0以后的蓝牙BLE功耗小,但不支持音频协议及受数据传输速度限制,蓝牙双模则是综合了两者的优缺点,既可以支持音频传输,同样可支持数据传输,功耗低,并且兼容性也是两者之和。

三、按照功能分

        站在蓝牙模块传输内容大小的功能角度来说,可以分为以下几种。

(1)数据模块

        一般使用比较多的是数据模块,也就是低功耗蓝牙,也叫透传蓝牙模块。对于数据量不大,传输近距离,运行和待机功耗有严格要求的设备来说是一个很好的选择,由于功耗方面的优势,4.0蓝牙模块目前已占据移动数据传输大部分份额,并且规模和份额还有望继续成长。

(2)音频模块

        而音频模块就需要非常大码流的数据传输,所以比较适合经典的蓝牙模块。

(3)数据和音频复合模块

        可以同时实现语音、音频、数据的传输,在移动互联,数据+音频应用的大趋势下,数据和音频复合的双模模块是一个很好的选择。

四、按照芯片设计分

        这是根据模块中蓝牙芯片使用的存储类型来区分的。

(1)ROM版本

        一般是芯片厂家的ROM版芯片,特点是芯片厂家将标准的应用PROFILES 固化在芯片中,一般是固定功能的,用户无法对芯片内程序进行修改。可外接EEPROM,存储空间较小,可用于存放蓝牙地址、设备名称、PIN 码等。

        使用ROM版本芯片做的产品差异化较少,但是开发简单,对于一些常规产品,不需要深度定制化的产品,选用ROM版本芯片可以开发进度,加快产品上市时间。适合大规模的批量生产,价格很低,比较常见的是用于dongle、蓝牙耳机模块、手机模块、鼠标键盘模块等,可以修改配置参数,但基本功能是固定的。大规模民用产品一般选用ROM版模块,如市场上的USB蓝牙适配器,由于大部分协议会运行在PC内部,对芯片处理能力要求很低,因此芯片厂家会推出价格很低的产品。

(2)FLASH版本

        芯片一般内置FLASH,存储空间较大,如果要做一些客户自定义的产品,比如需要增加一些传感器、与外部MCU进行通信,增加蓝牙协议或服务,则需要使用FLASH版本,客户可在FLASH版本芯片的已有工程上添加自己的工程代码,开发自己的固件,做出差异化的产品,相对来说灵活性高一些。

        FLASH版本的芯片价格高,但用户可以按自已的应用需求进行,由于芯片内置了FLASH存储,其各性能表现出色,同时内置了音频编解码电路,适合各种语音网关等应用。工业蓝牙应用一般应采用FLASH版本的芯片生产的模块,运行速度快,具备高集成度、高可靠性、高性能指标等特点。

(3)EXT版本

        EXT模块采用的芯片没有FLASH存储,需外扩存储器件,用户可以进行应用开发,特点是价格适中,不足是稳定性、功耗等性能差异大,同时大部分EXT芯片没有音频解码电路,如需实现音频传输需外接编解码器件。

五、按照功率分

        针对功率来说,低功耗蓝牙和经典蓝牙又有区别。

        低功耗蓝牙没有功率的级别,传输距离可超过100m,5.0协议的距离甚至可达300m,具体距离看产品的设计功率。低功耗蓝牙技术的调制与传统蓝牙技术略有不同。这一不同的调制以10mwdb的无线芯片组(低功耗蓝牙最大功率)实现最远300m的连接范围,也就是说整个家居及楼宇范围都能覆盖,实现更加稳健且可靠的连接。

        经典蓝牙有3个级别的功率,用Class表示,按照蓝牙规范的规定,Class并不用来规定距离的,而是标明发射功率。蓝牙模块发射功率参数确定后,实际发射效率与射频电路、天线效率相关,蓝牙模块的通讯距离与发射功率、接收灵敏度及应用环境密切相关,蓝牙工作在2.4G频段,穿透能力较差,在有遮挡的情况下,应在实际现场测试通讯效果。功率控制的目的是将辐射控制在限制范围内,而不会干扰相邻蓝牙设备的正常工作,使用链路管理协议来实现主从设备之间的功率控制算法。

(1)Class 1

        Class 1输出功率为1mW (0dBm)~100mW (20dBm),支持100m传输距离,为达到最大范围,功率控制是强制。Class 1是用在大功率,远距离的蓝牙产品上,但因成本高和耗电量大,不适合作个人通讯产品之用(手机、蓝牙耳机、蓝牙Dongle等等),故多用在远距离传输上。

        远距离传输一般很少人会用到,但如果想要远距离传输音频,远距离连接音响,更常见是在一些大型会场、舞台、工业场景,用支持Class 1的蓝牙适配器是最好的解决方案。

(2)Class 2

        Class 2输出功率为0.25mW (-6dBm)~2.5mW (4dBm),功率控制可选,正常情况下1mW(0dBm)支持10m传输距离,只要发射功率能超过0dBm就是属于Class 2的范围,但是如果超过4dBm的话,那就是Class 1。

        现在市面上常见的蓝牙设备大多是功耗Class 2,多用于手机内、蓝牙耳机、蓝牙Dongle 的个人通讯产品上,耗电量和体积较小,同时方便携带。

(3)Class 3

        Class 3输出功率为≤ 1mW (0dBm),支持1m传输距离。输出功率最低,Class 3类设备由于其覆盖距离非常有限,所以不常见。

六、按照支持的温度分

(1)商业级

        温度范围约为0℃~70℃。一般用在普通的民用产品中,在生活中较为常见且价格较低便宜。适用于环境条件(如温度、EMC和机械应力)处于轻度至中等水平的消费产品应用。如各种消费类的电子产品,智能家电,娱乐设备、移动计算、相机、显示器、路由器和测试设备等。

(2)工业级

        温度范围约为-40℃~85℃。一般用在工业环境中,同时也能够在环境不太好的室外或者有干扰的情况下运行。与商业级产品相比,工业级产品可以承受更极端的环境,适合、预期或要求用于工业用途的类型或质量,例如在运输、工厂自动化、高冲击和振动的环境。

(3)汽车级

        温度范围约为-40℃~125℃。一般用在车载或恶劣环境中,由于汽车在启动过程中,会产生很高的热量,因此在高温方面,会比工业级高一些,在价格上也会比工业级贵一些,其可能会受到高水平的EMI、碰撞、冲击和振动以及极端温度的影响。因此该类型产品专为汽车、交通运输和其它关键任务应用而设计,符合行业标准汽车规范。

(4)军工级

        温度范围约为-55℃~150℃。一般用在军方的设备中,因此对其要求也是最严格的,主要使用在导弹、飞机、坦克、航母等军工领域,档次是最先进的,精密度高,工艺先进同时价格也很昂贵,军工级一般要比工业级领先数年时间。

总结

        通过上述对蓝牙模块的不同分类方式的梳理,不仅可以了解到一些蓝牙的基础知识,也可以从不同分类方式的角度在蓝牙模块的选型上提供一些思路。最后整篇文章浓缩为下面一张蓝牙模块分类的思维导图。

 


更多技术内容和书籍资料获取敬请关注微信公众号“明解嵌入式”

有关详解蓝牙模块的分类的更多相关文章

  1. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  2. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  3. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  4. ruby - 当使用::指定模块时,为什么 Ruby 不在更高范围内查找类? - 2

    我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or

  5. ruby - 获取模块中定义的所有常量的值 - 2

    我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c

  6. ruby - 模块嵌套代码风格偏好 - 2

    我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的

  7. ruby-on-rails - 使用 config.threadsafe 时从 lib/加载模块/类的正确方法是什么!选项? - 2

    我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co

  8. ruby-on-rails - Controller 中的 Rails 辅助模块 - 2

    我有一个Controller,我想为这个Controller创建一个助手,我可以在不包含它的情况下使用它。我尝试像这样创建一个与Controller同名的助手classCars::EnginesController我创建的助手是moduleCars::EnginesHelperdefcheck_fuellogger.debug("chekingfuel")endend我得到的错误是undefinedlocalvariableormethod`check_fuel'for#有没有我遗漏的约定? 最佳答案 如果你真的想在Controll

  9. ruby-on-rails - 具有同名的模块和类 - 2

    我有一个模块stat存在于目录结构中:lib/stat_creator/stat/在lib/stat_creator/stat.rb中,我在lib/stat_creator/stat/目录中有我需要的文件,以及:moduleStatCreatormoduleStatendend当我使用该模块时,我将这些类称为StatCreator::Stat::Foo.new现在我想要一个存在于应用程序中的根Stat类。我在app/models中制作了我的Stat类,并在routes.rb中进行了设置。但是,如果我转到Rails控制台并尝试在应用程序/模型中使用Stat类,例如:Stat.by_use

  10. ruby-on-rails - 使用 rspec 和 rails 测试嵌套模块 - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Testingmodulesinrspec目前我正在使用rspec成功测试我的模块,如下所示:require'spec_helper'moduleServicesmoduleAppServicedescribeAppServicedodescribe"authenticate"doit"shouldauthenticatetheuser"dopending"authenticatetheuser"endendendendend我的模块位于应用程序/服务/services.rb应用程序/服务/app_servi

随机推荐