Notify 与 Indicate的区别

根据TI BLE1.4.0的介绍,Indicate是有ACK的。

Q1:那么如果我用Notify,是否可能会丢数据呢?

比如我用一个charisticrist 连续notify100个数据,中间是否有可能丢数据?

我实验了很多次,也没有发现有丢数据。

Q2:Indicate怎么使用呢?我看了thermometer的例子,但是感觉他仅仅是在定义

static gattAttribute_t thermometerAttrTbl[] = 时,用了GATT_PROP_INDICATE属性。

但在实际发送时,仍然用的是GATT_Notification啊

Feng Xu3,

Q1:BLE是可以基于link layer层保证空中数据不丢失的,notification和indication都是基于GATT的,取决于你在应用层如何对这些数据处理,如果你对notification的数据处理不及时,是会被后续数据冲击丢失的。

Q2:indication 用的是GATT_Indication().

Hi Y,

      非常感谢你的回答。

      就是说,使用notify,BLE的link layer本身会保证数据不会丢失,但是在central节点,数据如果不被及时读走,会被冲掉?

      我不知道如果我用Notify方式的话,APP那端能不能够及时读走数据,这要如何确定呢?

      还是说只有使用indication才能够保证不丢数据?

      另外,如果使用read的方式,数据传输速度能够比notify高吗?

      谢谢!

Frank

Feng Xu3,

这个完全取决于你发Notification的速度和APP那端的处理方法,两边都是你自己控制的,问题应该不大。

read的方式应该速度比Notification要低。

Hi Y,

     那么Indicate与Notify相比,如果APP那端能及时处理,是否Indicate能达到与Notify同样的速率?

     谢谢!

Frank

回复 Feng Xu3:

Feng Xu3,

这是个好问题。

这么说吧,如果在连接参数相同的情况下(主要指connection interval),并且APP处理得当,那肯定是Notification快,因为indication要等回复才能发下一个包。

Hi Yan,

请问您说的indication等回复才能发下一个包,是指link layer前一个packet已经发送成功了的前提下,也不会再发下一个packet,而是要等主机端对数据进行应用层的逻辑处理完成,并得到主机端的反馈后才发下一个packet,我理解的意思对吗?

如果对的话,那么write with response是不是也可以同理的反向理解。

我个性签名档的博客地址,《CC2541之notify》、《CC2541之indicate》。

1、博客:http://blog.csdn.net/feilusia
2、香瓜BLE之CC2541:127442605
3、香瓜BLE之CC2640R2F:557278427
4、香瓜单片机之职场交流:450154342
5、《简单粗暴学蓝牙5》下载地址:https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

<think>好的,我现在需要帮助用户了解如何通过蓝牙启动通知功能或解决相关问题,特别是关于蓝牙notify的配置教程或常见问题。首先,我得回忆一下蓝牙协议中的通知(Notify)机制。 蓝牙的GATT(通用属性协议)中,通知是一种服务器(从机)主动向客户端(主机)发送数据的机制,不需要客户端每次都发送请求。这通常用于传感器数据等需要实时更新的场景。要实现通知功能,服务器端需要配置特征的属性,客户端则需要启用通知。 接下来,我需要结合用户提供的参考资料。用户提到了两个引用,一个是关于DX-BT24蓝牙模块的AT命令和手机透传教程,另一个是关于沁恒CH58X蓝牙从机的使用。这两个芯片可能配置通知的方式不同,所以需要分别分析。 对于DX-BT24模块,根据引用[1],它可能使用AT命令来配置蓝牙参数。比如设置名称、服务UUID、特征UUID等。但AT命令是否支持配置通知属性呢?通常,启用通知需要设置客户端特征配置描述符(CCCD),即向特定的描述符写入0x0001。可能DX-BT24的AT命令中是否有相关指令,比如AT+NOTIFY或类似的命令? 对于沁恒的CH58X芯片,引用[2]提到它使用MounRiver Studio编译器,并且有丰富的例程。可能他们的SDK中提供了配置通知的API或者示例代码。例如,在从机端,需要设置特征的属性为可通知,并处理客户端启用通知的请求。 然后,我需要考虑蓝牙协议的一般流程。服务器端需要定义一个具有Notify属性的特征,并在特征的值变化时主动发送通知。客户端需要发现该特征,并写入CCCD以启用通知。 常见问题可能包括:通知未启用,特征属性未正确配置,连接参数不合适导致丢包,或者从机未正确处理启用请求等。比如,客户端没有成功写入CCCD,或者服务器没有正确响应。 现在需要将这些整理成步骤,并引用用户提供的资料。比如,对于沁恒的芯片,可能需要在代码中设置特征属性为INDICATENOTIFY,并实现相应的回调函数。对于DX-BT24,可能需要使用AT命令配置相关UUID和属性,然后通过手机APP启用通知。 还要考虑用户可能的开发环境,比如使用哪个芯片,是否有SDK或AT命令手册。但用户的问题比较通用,可能需要给出两种情况的解决方法。 最后,确保回答符合格式要求,使用中文,行内公式用$...$,独立公式用$$...$$,并生成相关问题。引用部分需要正确标注,比如引用[^1]和[^2]。</think>### 蓝牙通知(Notify)功能配置常见问题 蓝牙通知(Notify)是BLE(低功耗蓝牙)中用于从设备(从机)主动向主设备(主机)推送数据的机制。以下是配置方法及常见问题解决方案: --- #### **一、配置蓝牙通知的通用步骤** 1. **定义可通知的特征(Characteristic)** 从机需在GATT服务中创建具有`NOTIFY`属性的特征,例如: ```c // 示例代码(基于沁恒CH58X SDK) uint8_t charValue[20] = {0}; gattCharacteristic_t notifyChar = { .uuid = 0xFF01, // 自定义特征UUID .properties = CHAR_PROP_NOTIFY, // 设置通知属性 .permissions = GATT_PERMIT_READ, .value = charValue, .len = sizeof(charValue) }; ``` 此类特征需绑定**客户端特征配置描述符(CCCD)**,用于主机启用通知。 2. **主机启用通知** 主机需向CCCD(UUID: `0x2902`)写入`0x0001`以启用通知。例如,在手机APP中: - 使用DX-SMART软件连接设备后,找到目标特征
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值