This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2540广播的方式传送一定的信息



hi:

   我有一个问题,ble4.0协议栈中,广播数据的数据包中advData段最大是31个字节吗,如果是的话,通过广播方式传送数据只能是每个数据包的拼接,

这样传输的数据大小和传输速率很不理想;

  如果能让advData段字节加长如100个字节,可以吗,怎么做,限制字节数,应该是为了降低功耗,因为想做一个广播推送广告基站,所以不用考虑功耗问题。

  • 广播包负载Payload  = AdvA (6 Bytes) + AdvData (31 Bytes max.),这个是协议定义的,降低功耗主要靠连接间隔等参数,而不是数据大小,蓝牙本身就不适宜大数据传输

  • Hi Viki shi:

       谢谢你的回答,还有就是一个问题:

          我想把我的广播数据分成两种类型,一种是广播数据一样的,一种是将大的数据分包的,这两种数据包之间间隔30ms更新一次;我试过在

    peripheralStateNotificationCB中的GAPROLE_ADVERTISING下用GAPRole_SetParameter( GAPROLE_ADVERT_DATA, sizeof( advertDataNew ), advertDataNew )更新数据,但是没有成功;又在SimpleBLEPeripheral_ProcessEvent中用同样的方法还是没有更新成功;是不是用新的定时器中断来做这件事呢,如果不是该怎么做?

  • 用广播来传送数据是个很有创意的想法,这样就省去了连接的开销,而且一个Broadcast的广播可以被很多个Observer接收。

    但是,通过广播来传输数据其实是一种不可靠的数据传输。因为广播者发出的广播有没有被接收者接收到,是没有确认的。

    现实的环境可能存在各种干扰,是无法保证Observer能检测到Broadcast的每一次广播包的。

    如果你的实际应用中允许这种不确定性的丢包现象,倒也无所谓。

    而建立在连接的数据传输,在底层是做好了差错控制的。

  • Hi shaokai Lin:

      因为需要交互的主机较多,想不到别的办法,由于传输的信息量不是很大,所以容许一定的丢失率,现在就是还不了解怎么更新广播包!

  • 修改广播包

    GAPRole_SetParameter( GAPROLE_ADVERT_DATA, sizeof( advertData ), advertData );

    修改扫描回应包

    GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( scanRspData ), scanRspData );

  • Hi shaokai Lin:

        修改广播的内容是这样的,我一直没有正确的注意到每隔30ms发送一次广播的事件

  • 我最近也在做广播包携带自己的数据相关的东东,你可以通过GAP_UpdateAdvertisingData( simpleBLEPeripheral_TaskID, TRUE, sizeof( advertData ), advertData );来更新广播数据包。

  • hi yuhong liu:

       我早前就在app中用GAP_UpdateAdvertisingData( simpleBLEPeripheral_TaskID, TRUE, sizeof( advertData ), advertData );更新广播只更新了一次,最后我采用的是这个函数:HCI_LE_SetAdvDataCmd(len ,advertData);来20ms更新一次广播,结果是主机收到的数据会有一定的丢失率,但是基本是可行的,因为我的数据不多最多300个字节;

       我有一个问题,请知道的工程师帮我解答一下,就是我要连接更新我的广告,要更新的数据大概在300字节,连接发送的时候最大时20个字节,也就是我得自行分包和组包,如果是这样,主机发送是连续的发送数据包,还是数据包之间有一定的时间间隔?

  • 各位大神:

    请问:

    GAP_UpdateAdvertisingData( simpleBLEPeripheral_TaskID, TRUE, sizeof( advertData ); 或

    HCI_LE_SetAdvDataCmd(len ,advertData);

    要更新广播数据,些更新函数应该放在哪个地方,我试了几个地方都不行

    我用的例程是:SimpleBLEBroadcaster

    放在这里面,结果不行

    uint16 SimpleBLEBroadcaster_ProcessEvent( uint8 task_id, uint16 events )
    {

    }

    谢谢