TI中文支持网
TI专业的中文技术问题搜集分享网站

求助:CC2541在char改为20B大小时发生丢帧现象

我用LightBlue来接收我板子Notify出来的数据。

我程序是基于SimpleBLEPeripehral改的,这是我程序中的主要设置:

1.#define NOTIFY_EVT_PERIOD   1 // 1 ms   在ProcessEvent设置周期性任务为1ms

2.LightBlue默认设置连接间隔为30ms。

3. 打开 overlapped processing
  HCI_EXT_HaltDuringRfCmd(HCI_EXT_HALT_DURING_RF_DISABLE);
  HCI_EXT_OverlappedProcessingCmd(HCI_EXT_ENABLE_OVERLAPPED_PROCESSING);

当我设置Notify的Charicteristic为7个Byte长时,经过长时间多次测试,一直正常,没有丢帧现象。数据速率为为1.13kB/s。

我将Charisteristic增长,当我将Notify的Charicteristic为20个Byte长时,发现了大量丢帧的现象。

比如,发出515个帧,LightBLue只收到387个帧。我一开始怀疑是不是LIghtBLue有问题,但是我用PacketSniffer抓包发现,确实就只有387个帧。丢包率达到了25%。

请问为什么会丢包呢?如何解决呢?协议栈的BUG吗?

谢谢。

Frank

Yan:

Feng,

1ms间隔太短了。

iOS默认connection interval大概30ms不到,你每隔1ms 往下面发大量数据,肯定会丢包呀。 

Feng Xu3:

回复 Yan:

Yan,

     你好,

     明白。但是,我起用了overlapped processing,希望在一个Connection Interval内尽量多发数据。据看到的资料说,一个Connection Interval内最多能发4-6个Packet。

     那么在Connection Interval=30ms的情况下,如果我希望尽可能提高数据速率而又不丢包,应该设置Notify_Event的间隔为多少ms呢?

     我怎样才知道,应该设置多大的发送间隔,才会不丢包?难道只能设置好了,测试一下吗?可是这也不能保证永远不丢包啊。

     或者,TI的BLE1.4.0协议栈有什么样的机制可以保证不丢包?

     十分感谢!

Feng

Yan:

回复 Feng Xu3:

Feng,

和iOS你就别想在一个connection event里面发多次了。。。

Feng Xu3:

回复 Yan:

Yan,

    为什么啊?

    我设置为7B的时候,就没有掉过包,并且我用PacketSniffer看过了,每个Connection Interval传了4-5个包。这不是一个Connection Interval里发了多次了吗?

    而且,现在这和IOS没有关系啊,我用PacketSniffer抓包看过了,设备发出来的时候包就少了。

    或者我这么问,如果我用安卓或者另外一块CC2541做主设备,接收从设备发来的Notification,运用怎样的机制才能保证不丢包呢?

Feng

赞(0)
未经允许不得转载:TI中文支持网 » 求助:CC2541在char改为20B大小时发生丢帧现象
分享到: 更多 (0)