Notify 与 Indicate的区别

it2022-07-03  104

根据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


最新回复(0)