DA14580通讯距离

工程版本:5.0.4
使用工程为OTA工程加入扩展睡眠,因为低功耗的原因修改了广播间隔和连接间隔
广播间隔为500ms~1s
连接间隔450ms~500ms
连接间隔变长之后发现通讯距离缩短二分之一,以前可以到10m距离,现在距离缩短到5m以下
加了2.4G陶瓷天线发现也没什么大的变化,请问有什么办法可以在功耗不增加的情况下增加一点距离

  • Hi,

    修改连接间隔之后,距离由 10m 缩短到 5m 以下,应该是有其它原因导致的距离变短。请详细描述一下您的测试步骤。

    另外,根据你目前提供的信息,怀疑是超时断开:修改了连接间隔之后,有没有把超时时间也相应的加长一点:time_out、superv_to?

  • 测试步骤:
    #define APP_PARAM_UPDATE_REQUEST_TO (1000)

    /// Minimum interval for advertising
    .intv_min = 800, //500ms // 100ms = (160*0.625ms)
    /// Maximum interval for advertising
    .intv_max = 1600, // 100ms = (160*0.625ms)

    上面参数固定
    修改了函数user_gapm_conf
    .con_intv_min = MS_TO_DOUBLESLOTS(360),
    .con_intv_max = MS_TO_DOUBLESLOTS(400),
    user_connection_param_conf为
    .intv_min = MS_TO_DOUBLESLOTS(360),
    .intv_max = MS_TO_DOUBLESLOTS(400),

    以往都是没有修改,内参数为10和20,距离可以到10m,数值改大之后,距离就缩短了。

    还有您怀疑的问题:
    .time_out = MS_TO_TIMERUNITS(1250),
    .superv_to = MS_TO_TIMERUNITS(1000),
    他们都是10ms为为单位,按理说都在10s以上 = =,
    我将其每个增加了500的量,距离没有变化

  • Hi,

    timer unit 是 10ms 没错,宏 MS_TO_TIMERUNITS 里的参数的单位是 ms。。。

    把参数都填为 5000 试试吧~~

  • 非常感谢您的回复
    按照您说的都改成5000
    .superv_to = MS_TO_TIMERUNITS(5000),
    .time_out = MS_TO_TIMERUNITS(5000),
    效果就是断开之后5s才响应user_app_disconnect这个函数,距离并没有改变。
    而且处于一种很尴尬的情况:在5m~10m距离之间,安卓手机搜索不到此蓝牙,用苹果手机能搜索到蓝牙,但是不能连接(这里我的猜想:我在手机蓝牙连接设备蓝牙之后会发送一串绑定码给设备蓝牙,这串码有18位,将蓝牙间隔改长了之后,功耗确实低了不少,但是收发数据的效率相应也变低 了,所以需要差不多5s时间才能在我的方案逻辑里面判断是连接上了)
    在这里面有什么好的办法吗 = =!

  • 我们把问题分步骤解决吧:

    1、修改连接间隔会导致距离变短。

    理论上,如果连接参数没问题的话,修改连接间隔并不会导致距离变短。所以先解决这个问题:

    a) 先排查硬件问题,做法就是使用我们官方的例程(barebone)下载到你的板子上,然后用第三方工具(lightblue)跟它连接。修改不同的连接参数,观察连接距离有无变化。

    b) 再排查软件问题,你的描述“效果就是断开之后5s才响应user_app_disconnect这个函数”有个矛盾,断开之后,是会马上回调 user_app_disconnect 函数的,所以不清楚你判断断开的依据是什么?这里需要你以 user_app_disconnect 的回调作为断开的依据,再仔细测试、观察你的设备的行为,然后描述出来。

    根据“5s才响应user_app_disconnect这个函数”的描述,暂且先假设为超时断开,那么你需要排查下你软件中有没有造成阻塞的操作,如连续频繁的读写flash,连续频繁的读写IIC,使用while(i--);等类似的语句占用 CPU 实现延迟等。

    2、提高通讯效率、同时节省功耗

    主、从连接成功之后,从设备可以发起修改连接参数的请求。

    所以,将 user_connection_param_conf  配置成满足你功耗需求的参数。手机连上之后,会以比较快的速度通讯,APP_PARAM_UPDATE_REQUEST_TO 超时之后,以 user_connection_param_conf  中的参数通讯。