Android中自定义蓝牙的MTU

【Code】Android MTU 知识及常见问题(高通和MTK方案) 运营商对MTU配置有需求。比如针对不同类型的APN或者是注册网络环境的不同存在需求差异。 阅读详情
AI摘要

本文深入解析蓝牙最大传输单元(MTU)的概念,包括默认值、不同蓝牙版本的最大MTU,以及如何在Android中自定义MTU以优化蓝牙性能。

1、最大传输单元(Maximum Transmission Unit, MTU)


MTU是指在一个协议数据单元中(Protocol Data Unit, PDU) 有效的最大传输Byte。

2、蓝牙MTU默认23个Byte


core spec中ATT的默认MTU为23个Byte,ATT的Opcode占1个Byte、ATT的Handle2个Byte、GATT占20个Byte。
23Byte(ATT)=1Byte(Opcode)+2Byte(Handler)+20Byte(BATT)。


3、蓝牙最大MTU


不同的蓝牙版本最大MTU不同,例如:蓝牙4.2的最大MTU=247Byte(不一定正确,也有说是257Byte、也有说是241Byte),蓝牙5.0的最大MTU=512,有效的最大MTU还需要减去协议Byte、Opcode和Handler。蓝牙4.2的有效的最大MTU是244Byte(不一定正确),有兴趣的可以看看Bluetooth SIG官网https://bluetoothworldevent.com/welcome。
蓝牙4.2:1Byte(Opcode)+2Byte(Handler)+244Byte(BATT)=247Byte(不一定正确);
蓝牙5.0:没查到


4、自定义MTU


不是说蓝牙协议中MTU定义了多少,移动设备就能用多少,不用的移动设备的蓝牙支持的最大有效的MTU不同,例如:有些移动可能仅仅支持默认的MTU=23Byte,也可能仅仅MTU=185(例如苹果)。
在实际开发过程中,需要根据实际需求去选择相应的移动设备,然后根据实际的需要去修改MTU,自定义的MTU不能大于最大的MTU值。此外,自定义的MTU不是随意设置的,自定义的MTU值不同蓝牙的性能可能不同,例如:自定义的MTU=185的蓝牙性能,可能会比自定义的MTU=153的性能好。最好根据实际情况多测几个数据。


5、Android中自定义MTU


在Android中修改MTU很简单只需要调用BluetoothGatt#requestMtu(int MTU)方法即可。requestMtu(intMTU)必须在发现蓝牙服务并建立蓝牙服务连接之后才能调用,否则MTU会默认为20Byte。如果调用成功会自定回调BluetoothGattCallback类中的onMtuChanged(BluetoothGatt gatt, int mtu, int status)方法。

// 重写MTU
private boolean requestMtu() {
    if (bleGatt != null && Build.VERSION.SDK_INT >=Build.VERSION_CODES.LOLLIPOP) {
        // 25 *6 +3 =153
        return bleGatt.requestMtu(this.bleMtu);
    }
    return false;
}

@Override
public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) {
    super.onMtuChanged(gatt, mtu, status);
    Log.d("onMtuChanged"," onMtuChanged");
    if (BluetoothGatt.GATT_SUCCESS == status) {
        Log.d("BleService", "onMtuChanged success MTU = " + mtu);
    }else {
        Log.d("BleService", "onMtuChanged fail ");
    }
}

注:本文如果有误的地方请原谅。

蓝牙学习笔记(九)——BLE超过20字节数据包传输(MTU) 前言:在默认情况下,BLE 4.0支持传输一次性最大不超过20字节的数据包,但是很多应用场景下,往往会需要传输更多数据。下面说说如果进行一些修改,使之满足我们的应用场景。 1.为何默认数据包不超过20字节 2.服务端修改 3.客户端修改 ... 阅读详情

相关推荐

告别串口助手!用这款安卓蓝牙调试器App和STM32 DMA,5分钟搞定无线遥控小车

本文详细介绍了如何利用安卓蓝牙调试器与STM32 DMA技术实现超低延迟的无线遥控小车方案。通过对比主流无线技术,精选蓝牙方案并优化配置,结合DMA技术显著降低CPU占用率和延迟,最终实现35ms以内的稳定控制响应。

weixin_30591551的博客 474

Android Ble蓝牙App(六)请求MTU与显示设备信息

在上一篇文章中已经了解了数据操作的方式,而数据交互的字节长度取决于我们手机与蓝牙设备的最大支持长度。

晨曦 6478

微信小程序蓝牙分包传输实战:如何用wx.setBLEMTU突破20字节限制(附完整协议设计)

本文详细解析了微信小程序蓝牙开发中突破20字节传输限制的实战方案。通过合理使用wx.setBLEMTU进行MTU协商,并结合精心设计的分包传输协议与CRC校验机制,可大幅提升低功耗蓝牙模块的大容量数据传输效率与稳定性,适用于OTA升级等场景。

river的博客 284

蓝牙 - BLE数据超过23字节(MTU),notify长度

ble设备发送数据帧超过20字节后,手机无法接收到数据。notify长度。

-凌凌漆-的博客 5648

蓝牙UUID:从标准服务到自定义开发的连接密钥

本文深入解析蓝牙UUID在设备通信中的关键作用,从标准服务到自定义开发的实践应用。通过实例代码和调试技巧,帮助开发者掌握UUID的精准使用,提升蓝牙设备连接的稳定性和效率,适用于智能硬件和健康监测等领域。

weixin_29295541的博客 208

从零到一:基于CPCL指令集开发汉印HM-A300蓝牙打印机应用

本文详细介绍了如何从零开始基于CPCL指令集开发汉印HM-A300蓝牙打印机应用。内容涵盖硬件准备、开发环境搭建、CPCL指令解析、蓝牙通信流程及实战案例,帮助开发者快速掌握标签打印技术,特别适合移动场景下的应用开发。

weixin_30383279的博客 410

android 蓝牙数据分包_Android Ble 通讯数据分包

背景:为什么Android 蓝牙通讯数据包默认情况下最多20个字节?参考资料:Core_v4.2.pdfMTU is not a negotiated value, it is an informational parameter that each device can specify independently. It indicates to the remote device that t...

weixin_39938746的博客 1717

智慧农业蓝牙数据可视化方案与优化实践

蓝牙低功耗(BLE)技术作为物联网设备短距离通信的核心方案,通过2.4GHz无线频段实现传感器与终端的高效能数据传输。其工作原理基于主从设备间的服务发现与特征值读写,具有低功耗、低成本的技术优势,特别适合农业物联网等电池供电场景。在智慧农业应用中,蓝牙技术可实现大棚环境参数的实时监测,包括温湿度、土壤墒情等关键指标。通过优化MTU大小、调整广播间隔等工程实践,能显著提升数据传输效率。典型应用场景还涉及设备分组管理、阈值报警等扩展功能,为精准农业提供可靠的数据支撑。

weixin_29164091的博客 304

Android 蓝牙协议配置实战:从基础到高级功能定制

本文详细介绍了Android蓝牙协议从基础配置到高级功能定制的实战指南。涵盖蓝牙协议栈结构、配置文件修改、常见问题排查及性能优化技巧,特别针对A2DP、OPP等协议进行深入解析,帮助开发者高效实现蓝牙功能定制与系统级开发。

pandas7gardener的博客 171

一起Talk Android吧(第四百二十六回:修改BLE中的MTU)

本章回中主要介绍了MTU的概念,以及如何修改手机中的MTU,并且配有具体的示例代码。

talk_8的专栏 1322

低功耗蓝牙BLE从原理到实践:STM32+Android温湿度采集Demo全解析

低功耗蓝牙(BLE)并非经典蓝牙的省电模式,而是一套独立设计的协议栈,它通过按需唤醒、短包收发和精细的连接参数控制,让物联网设备能以极小电流维持数月乃至数年的续航。理解BLE的核心机制,包括广播信道与数据信道的分工、GATT服务模型、Characteristic与CCCD的交互流程,是开发低功耗硬件产品的基础。掌握这些原理后,开发者可以面向智能家居、可穿戴设备、医疗体征采集等电池供电场景,设计出稳定且省电的数据上报链路。本文以一个基于STM32F103和BLE透传模块的温湿度采集系统为例,详细讲解GATT服

weixin_29179311的博客 195

智慧养殖蓝牙监控方案与App开发实战

蓝牙低功耗(BLE)技术作为物联网关键通信协议,通过2.4GHz频段实现设备间短距离数据传输,其核心优势在于低功耗设计(仅需纽扣电池供电)与自适应跳频抗干扰能力。在智慧农业场景中,基于BLE的环境监测方案能有效解决养殖场布线困难、供电受限等痛点,典型应用包括温湿度传感、气体浓度检测等实时数据采集。通过手机App或网关设备,养殖场管理者可远程监控氨气浓度等关键指标,结合4G/GPS模块还能实现位置追踪与云端同步。开发时需注意蓝牙协议栈的MTU设置、数据分包处理及重连机制,现场部署则要考虑金属结构对信号的衰减影

weixin_33925615的博客 286

博通PEX89000 PCIe 5.0交换芯片:如何为AI集群构建高效GPU互联架构

本文深入解析了博通PEX89000 PCIe 5.0交换芯片如何为AI集群构建高效的GPU互联架构。该芯片通过提供高带宽、低延迟的PCIe 5.0交换能力,打破传统GPU通信的带宽瓶颈,并支持多主机共享、资源池化及软件定义拓扑,从而显著提升大规模AI训练与推理任务的效率与资源利用率。

weixin_29214559的博客 411

Android-DFU-Library完全指南:如何快速实现蓝牙设备固件更新

Android-DFU-Library是一款功能强大的蓝牙设备固件更新库,专为Android应用开发设计。它提供了完整的解决方案,帮助开发者轻松实现通过蓝牙对设备进行固件更新的功能,无需深入了解复杂的DFU协议细节。 ## 什么是DFU以及为什么它很重要 DFU(Device Firmware Update)即设备固件更新,是保持蓝牙设备功能持续优化和安全更新的关键技术。通过DFU,用户可以在

gitblog_00131的博客 475

工业机器人关节拆装流程_一文读懂模块化直驱电机及机器人关节模组

私信“干货”二字,即可领取138G伺服与机器人专属及电控资料!如果说芯片是智能行业最为重要的核心元件,那么电机几乎可以说是支撑了整个自动化和大工业生产以及现代社会最为重要的部件,全世界90%的能源是由电机发出来的,而70%是由电机消耗调的,电机可以说是整个人类社会能源循环的占有绝对地位的产品。普通伺服电机伺服电机其实已经算是电动机中比较高端的类型,特别是永磁同步类型的伺服电机,由于其启动快速,惯量...

weixin_32159771的博客 2155

12V电源电路五层防护设计实战指南

12V电源电路是工业控制、车载电子和智能终端中最基础的供电架构,其可靠性不取决于稳压精度,而取决于对反接、浪涌、短路、过温等典型故障的响应能力。理解TVS钳位原理、P-MOSFET防反接机制及eFuse可编程限流逻辑,是构建鲁棒电源系统的核心。技术价值在于将保护从‘事后补救’升级为‘事前拦截’,显著提升产品MTBF并降低售后返修率。典型应用场景涵盖PLC辅助电源、ADAS摄像头供电、IoT网关主板等严苛环境设备。本文聚焦12V输入端到负载输出端的五层串行防护链设计,深度融合TVS选型、MOSFET导通阈值与

weixin_30983965的博客 295

Android-DFU-Library API完全参考:开发者必备手册

Android-DFU-Library是一款强大的设备固件更新(DFU)库,为Android开发者提供了完整的蓝牙设备固件更新解决方案。本手册将全面解析其核心API组件、使用流程及最佳实践,帮助开发者快速集成和高效使用该库。 ## 核心API组件解析 ### DfuServiceInitiator:固件更新的启动器 DfuServiceInitiator是DFU过程的入口点,负责配置更新参数

gitblog_00767的博客 299

告别Keil?在Mac上配置STM32CubeIDE + CMSIS-DAP调试器全攻略(含常见报错解决)

本文详细介绍了在Mac平台上配置STM32CubeIDE与CMSIS-DAP调试器的全流程,包括硬件准备、软件安装、工程创建及调试优化。通过实战指南,帮助开发者高效完成STM32开发,解决常见报错问题,提升开发效率。

weixin_30485379的博客 433

蓝牙背后的通信协议:深入解析Android与STM32的数据对话

本文深入解析Android与STM32间的蓝牙通信协议,涵盖经典蓝牙与低功耗蓝牙(BLE)的选择策略、数据帧结构设计、传输效率优化及安全加密机制。针对开发中的连接稳定性与功耗问题,提供实战优化方案,帮助开发者实现高效可靠的数据交换。

nn3456的博客 192

SerDes硬件设计原理介绍

接收端:外部差分串行数据------线性均衡器----(CDR从数据中恢复出采样时钟)-----解串器(串行信号转并行信号)-------8B/10B的解码器或解扰器-----FIFO-----FPGA接受差分并行数据。发送端: FPGA发送差分并行数据----FIFO------8B/10B编码器或者扰码器-----串行器(并行信号转串行信号)-----均衡器(滤波)--------TX串行信号差分外发。串行器:8bit的并行数据----2bit的并行数据----1bits的串行数据。

weixin_42304393的博客 1108

SAP_ABAP_SD_BAPI清单案例教程——销售订单开票_BAPI_BILLINGDOC_CREATEMULTIPLE_VF01_S4版本

SAP BAPI(Business Application Programming Interface)是SAP系统中的一组规范和标准,用于从SAP系统中获取数据、输入数据和更新数据。这些API允许开发者以编程方式与SAP系统交互,而无需编写大量的自定义代码。2.1 Copy代码 直接可使用。2.2 VF01开票。

java_zhong1990的专栏 2214

安卓开发---BluetoothGattCallback(GATT回调)

是 Android 蓝牙开发中最重要的回调类之一,它负责处理所有与 GATT (通用属性配置文件) 相关的操作结果和事件通知。主要有两大功能:1.​:当你执行连接、发现服务、读写特征等操作后,通过回调返回操作结果。2.​:当设备主动发送数据或状态变化时,通过回调通知应用。BluetoothGattCallback 中的常用方法和逻辑:1.功能:此方法会在蓝牙设备连接或断开连接时被调用。参数:gatt:与蓝牙设备的连接实例。

m0_50891221的博客 921

电子技术课程设计:声音音量峰值检测显示系统设计

本文介绍了声音音量峰值检测显示系统的设计方案。系统采用分立元件设计,不使用单片机和集成运放,包含电源模块、声音采集放大电路、峰值检测保持模块、比较器、A/D转换及显示控制等部分。麦克风信号经两级晶体管放大后,通过二极管-电容电路检测峰值并保持,再经A/D转换显示为数字值(0000-9999)。系统采用9V电池供电,包含启动/清除控制功能,能指示声音过低或过高状态。详细阐述了各模块电路设计、参数计算和仿真验证,并提供了完整的原理图和PCB布线方案。该系统实现了声音峰值电压的准确检测与数字显示功能。

huanghm88的专栏 257

用ESP32 BLE GATT服务端做个智能家居传感器:从自定义服务到手机App通信的完整实战

本文详细介绍了如何利用ESP32 BLE GATT服务端技术开发智能家居温湿度传感器,涵盖从自定义服务设计到手机App通信的完整实战流程。通过ESP-IDF框架实现GATT服务端,结合DHT22传感器数据采集,展示BLE在低功耗物联网设备中的优势应用,并提供手机端通信实现与调试技巧。

weixin_30312563的博客 406

[DDR5] 模式寄存器 Mode Register MRR/MRW

模式寄存器用于定义各种操作模式。在初始化过程中,可以通过重新执行MRS命令来更改模式寄存器的内容。

串起点滴 1639

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: 蓝牙BLE设备连接与通信
下一篇: 基于RxAndroid实现水平滑动条实时变化
MasonYyp
博客等级 码龄9年 301粉丝 297原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值